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