fminsearch用来求解多维无约束的非线性优化问题,它的基本形式是:
[X,FVAL,EXITFLAG,OUTPUT] = FMINSEARCH(FUN,X0,OPTIONS)。
例如,
fun=inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2','x');
[sx,sfval,sexit,soutput]=fminsearch(fun,[-1.2,1]);
但是,我们可以稍微对进行一些变换,就可实现利用fminsearch进行参数估计。
例如,原始信号发生器模型为:Z=3*exp(-0.4*x)+12*exp(-3.2*x);
假设有两个参数我们未知,即我们要进行参数估计的模型为
z=a(1)*exp(a(2)*x)+a(3)*exp(a(4)*x);
下面我们只需采用以下代码就可以实现上述参数的估计。
x=[0:0.2:4]';
Z=3*exp(-0.4*x)+12*exp(-3.2*x);
c=[1 1 1 1];
options=optimset('fminsearch');
options.TolX=0.001;
options.Display='off';
[a,sfval,sexit,soutput]=fminsearch(@fun,c,options,x,Z)
函数定义为:
function E=fun(a,x,Z)
z=a(1)*exp(a(2)*x)+a(3)*exp(a(4)*x);
E=sum((Z-z).^2);
结果为:
a =
3.0004 -0.4001 11.9994 -3.2000
sfval =
1.5099e-007
sexit =
1
soutput =
iterations: 190
funcCount: 322
algorithm: 'Nelder-Mead simplex direct
search'
相关文章: