【发布时间】:2012-02-25 21:44:27
【问题描述】:
首先非常感谢。第一个代码运行良好:
函数 f=malibu(m1,m2,m3,k,l,t)
f=(m1.*k+(m1+m2).*l).*exp(-m3.*t);
结束
function loglik= modelmalibu(p)
global k l t x n m2 m3;
f =malibu(p,m2,m3,k,l,t);
if f==0;
loglik0=0;
else
loglik0=(x.*log(f)+(n-x).*log(1-f));%minus likelihood
end
loglik=sum(-loglik0);
end
clear all;
global n t x k l m2 m3;
m1=0.1;
m2=0.2;
m3=0.3;
t=[1 3 6 9 12 18]';
k=[1 1 2 3 3 4]';
l=[0 0 1 3 4 5]';
y=meltem(m1,m2,m3,k,l,t);
n=100;%trial
x=y.*n;%correct replies
pstart=0.3;
[p1,modelvalue]=fminsearch(@modelmalibu,pstart);
但是更多变量的类似代码给出了错误。
function w=anemon(m1,m2,m3,X,Y,k,l)
w=(m1.*k+(m1+m2).*l)+X.*exp(-m3.*Y);
end
function loglik= modelanemon(p)
global n x m2 m3 X Y k l ;
f =anemon(p,m2,m3,X,Y,k,l);
if f==0;
loglik0=0;
else
loglik0=(x*log(f)+(n-x)*log(1-f));%minus likelihood
end
loglik=sum(-loglik0);
end
clear;
global n x Ydata kdata ldata m1 m2 m3;
%parameters
m1=0.002;
m2=0.0001;
m3=7;
%given data
Xdata=[1 3 6 9 10 12]';
Ydata=[11 13 41 81 121 181]';
kdata=[1 1 2 4 5 4]';
ldata=[1 1 3 3 4 5]';
y=anemon(m1,m2,m3,Xdata,Ydata,kdata,ldata);
n=10;
x=y.*n;
pstart=2;
[pbest,modelvalue]=fminsearch(@modelanemon,pstart);
我实际上已经尝试使用您的建议,但如果我写一个不等式而不是 f==0,那么第一个代码也会失败。
【问题讨论】:
-
看起来你所有的“Mfile”都只包含 cmets。这些文件的每一行前面真的有“%”吗?如果是这种情况,那么您的代码并没有做太多。否则,请编辑您的帖子。
-
@Kavka,感谢您的评论。我只想强调 M-Files 的部分,但在您的评论之后我看到这个想法是多么令人困惑。我按照你的建议编辑了它。
-
我无法理解您的问题。你能澄清一下吗? - 可能是一个小的 sn-p,或者一个特定的例子。
-
@bdecaf,感谢您的关注。当我为像“anemon”这样的基本功能定义模型并想在 fminsearch 中使用它时,它会运行。然后我想如果我有很多复杂的情况会发生什么。我编写的每一个 Mfile 函数,单独运行良好。例如:interpanemon(3,5,m1,m2,m3,Z,X,Y,4,3)。但是 fminsearch 不喜欢复杂的函数。首先,我认为我应该对我的函数进行 vektorize,但它也不起作用。可能在这种情况下,fminsearce 假设参数是恒定的。实际上,我不确定。
标签: matlab math mathematical-optimization