MATLAB中的 lsqnonlin命令怎么使??
[x,resnorm]=lsqnonlin(@myfun,x0)
运行候总是说 F表达式 有问题,请各位高人帮帮忙啊
问题:::
要求目标函数最小化,minD(a1,a2)=SUM{(sqrt(w(xi)))(1-(a1/(a1+xi))bi)-yi}2
其中 a1, a2为待估计的模型参数。 Yi, xi,是观测数据,w(xi)可以由公式通过yi求得。要使目标函数最小化,求出待估计参数,a1 a2
该怎么写MATLAB程序啊,
我利用的是lsqnonlin 函数来作,可以总是作不出想要的结果啊,
下面是我利用15个数据的试算程序,各位高手指点指点啊!!!!!
function s=f(x)
t=[0.39 0.44 0.71 0.9 1.81 1.98 3.79 3.81 3.9 4.13 4.72 5.98 7.16 9.72 19.13];
y=[0.067 0.133 0.2 0.267 0.333 0.4 0.467 0.533 0.6 0.667 0.733 0.8 0.867 0.933 1.0];
w=[3.73 2.55 2.0 1.66 1.42 1.22 1.07 0.94 0.82 0.71 0.6 0.5 0.39 0.27 0.0];
s=0.0;
for i=1:15;
s=s+(w(i)-w(i)*(x(1)/(x(1)+t(i)))^x(2)-w(i)*y(i))^2;
end;
在命令窗口,输入,得到
options=optimset(options,'LargeScale','off');
options=optimset(options,'LevenbergMarquardt','on');
x0=[227 50];
[x,residual]=lsqnonlin('f',x0,[],[],options)
Optimization terminated: directional derivative along
search direction less than TolFun and infinity-norm of
gradient less than 10*(TolFun+TolX).
x =
1.0e+002 *
2.26060899434407 0.54298280959085
residual =
0.00394886859667
又试了一次:变化了初始值:
>> options=optimset(options,'LargeScale','off');
options=optimset(options,'LevenbergMarquardt','off');
>> options=optimset(options,'TolFun',1e-20);
>> x0=[20 10];
>> [x,residual]=lsqnonlin('f',x0,[],[],options)
Conditioning of Gradient Poor - Switching To LM method
Maximum number of function evaluations exceeded. Increase OPTIONS.MaxFunEvals.
x =
20.37538726670586 5.17535205796596
residual =
0.00348480289019
>>试了两个不同的初始值,怎么迭代后的值,和初始值就没有大的变化啊,
而且,第一组初始值,是我用矩估计算出来的,应该是一个比较好的初始值了。
我在作一个非寿险精算问题, 有一年的损失数据,现在,就是要给出损失的精确经验分布函数,上边的目标函数中就有 帕雷托分布函数
求各位高人指点指点 啊,
小弟 这里先谢过各位了!
[此贴子已经被作者于2007-4-15 11:31:56编辑过]