Matlab 格值函数的fminsearch似然估计

Matlab 格值函数的fminsearch似然估计,matlab,parameters,estimation,Matlab,Parameters,Estimation,我想用一个网格创建一个多变量(这里是四个)函数,然后对任意X,Y进行插值。假设这是我的概率密度函数,我计算它们在X上的边缘。我使用这个函数来构建一个数据集。我的每个M文件都运行良好,至少我这么认为。但是当我运行估算部分时,我收到了一个错误。如果我的错误可以改正,你能帮我吗 clear all; %%%Some parameters m1=0.01; m2=0.02; m3=0.001; Z=zeros(10,20,10,5); % MFIL

我想用一个网格创建一个多变量(这里是四个)函数,然后对任意X,Y进行插值。假设这是我的概率密度函数,我计算它们在X上的边缘。我使用这个函数来构建一个数据集。我的每个M文件都运行良好,至少我这么认为。但是当我运行估算部分时,我收到了一个错误。如果我的错误可以改正,你能帮我吗

    clear all;
    %%%Some parameters
    m1=0.01;
    m2=0.02;
    m3=0.001;
    Z=zeros(10,20,10,5);
    % MFILE1
    %Create a four variable function 
    % function w=anemon(m1,m2,m3,X,Y,k,l)
    % w=(m1*k+(m1+m2).*l)+X.*exp(-m3.*Y);
    % end

    % MFILE2
    %Interpolate any (Xstar,Ystar) with a nonsence interpolation code
    %I wrote it only for giving an example
    % function p=interpanemon(Xstar,Ystar,m1,m2,m3,Z,X,Y,kk,ll)
    % p=0;
    % for i=1:length(X)-1
    %     for j=1:length(Y)-1
    %           if ((Y(j)<=Ystar)&&(Ystar<=Y(j+1)))&&((X(i)<=Xstar)&&(Xstar<=X(i+1)))
    %           p=(Z(i,j,kk,ll)+Z(i+1,j,kk,ll)+Z(i,j+1,kk,ll)+Z(i+1,j+1,kk,ll))/4;
    %          end
    %     end
    % end
    %     return
    %  end

    % MFILE3
    %Create a model which I'm going to use for parameter estimation
    % function loglik= modelanemon(p)
    % global n x m2 m3 kk ll ;
    % f =marjinteranemon(Ystar,p,m2,m3,Z,X,Y,kk,ll); 
    % loglik0=(-1)*(x.*log(f)+(n-x).*log(1-f));%minus likelihood
    % loglik=sum(loglik0);
    % end

%%
    X=linspace(0,10,6);
    Y=linspace(0,20,6);
    for k=1:10
        kk=k-1;
        for l=1:5
            ll=l-1;
    for i=1:length(X)
        for j=1:length(Y)
            Z(i,j,k,l)=anemon(m1,m2,m3,X(i),Y(j),kk,ll);
        end
    end
        end
    end
    %%%Now run all M-Files for self control
    anemon(m1,m2,m3,X,Y,4,5)
    interpanemon(3,4,m1,m2,m3,Z,X,Y,4,5)
    marjinteranemon(3,Z,X,Y,m1,m2,m3,4,5)

%STARTING PROBLEM PART


%SCRIPT fminsearch, I will be greatful if you have any advise. This part of        %       code  doesn't work
    % global n Ystar x kk ll m1 m2 m3;
    % m1=0.1;
    % m2=0.2;
    % m3=0.3;
    % Ystar=[1 3 6 9 12 18]';
    % kk=[1 1 2 3 3 4]';
    % ll=[0 0 1 3 4 5]';
    % y=marjinteranemon(Ystar,Z,X,Y,m1,m2,m3,kk,ll);
    % n=100;
    % x=y.*n;
    % pstart=5;
    % [p1,modelvalue]=fminsearch(@modelanemon,pstart);
全部清除;
%%%一些参数
m1=0.01;
m2=0.02;
m3=0.001;
Z=零(10,20,10,5);
%MFILE1
%创建一个四变量函数
%函数w=anemon(m1,m2,m3,X,Y,k,l)
%w=(m1*k+(m1+m2)。*l)+X*exp(-m3.*Y);
%结束
%MFILE2
%使用非ENCE插值代码对任意(Xstar,Ystar)进行插值
%我写它只是为了举个例子
%功能p=对讲机(Xstar、Ystar、m1、m2、m3、Z、X、Y、kk、ll)
%p=0;
%对于i=1:长度(X)-1
%对于j=1:长度(Y)-1
%if((Y(j)
  • anemon
    函数中,mu应该是m3
  • 由于您试图估计参数m1,因此需要将所有其他数据作为参数或全局参数传递给
    modelanemon
    函数
  • 我通常不推荐全局函数,但我认为尝试将参数传递给本地函数句柄可能有点太高级了。:-)您的代码如下所示:

        % MFILE3
        %Create a model which I'm going to use for parameter estimation
        function loglik= modelanemon(p)
          global Ystar m2 m3 Z X Y kk ll n x;
          f =marjinteranemon(Ystar,p,m2,m3,Z,X,Y,kk,ll); 
          loglik0=(-1)*(x.*log(f)+(n-x).*log(1-f));%minus likelihood
          loglik=sum(loglik0);
        end
    

    你能发布你看到的错误吗?我得到:
    ???未定义的函数或变量“mu”。
    来自
    anemon
    函数,应该是
    m3
    ?@macduff感谢你的快速回答!错误休止:=>modelanemon在3f=marjinteranemon(Ystar,p,m2,m3,Z,Y,kk,ll)时出错;错误==>fminsearch at 205 fv(:,1)=funfcn(x,varargin{:});“mu的值应该是什么?如果这是显而易见的,请原谅。我还缺少函数
    marjinteranemon()
    在您的@macduff通知后我修复了它,并用m3:)这解决了您的问题吗?另外,作为个人恩惠,我可以看看
    marjinteranemon()
    函数吗?