在MATLAB中,有一非线性最小二乘问题中一函数lsqnonlin,我想把里边X的数据改为矩阵形式,而不是数

请高手指点,不慎感激!!!!谢谢。。。。。。

不好意思啊,漏掉了,下面补上了:

%编写M文件:文件中的a(1)=a,a(2)=b,a(3)=c,a(4)=d
function E=fun(a,x,y)
x=x(:);
y=y(:);
Y=a(1)*(1-exp(-a(2)*x)) + a(3)*(exp(a(4)*x)-1);
E=y-Y;
%M文件结束
%用lsqnonlin调用解决:
x=[3 4 5 7 9 15];
y=[1 2 4 6 8 10];
a0=[1 1 1 1];
options=optimset('lsqnonlin');
a=lsqnonlin(@fun,a0,[],[],options,x,y)

关于a0,可以通过所知道的几组x和y的值来估算系数a、b、c、d的值,我这里没有估计,直接代入了1。
如果估计的较准确,最小二乘算出的系数更加精确。

lsqnonlin函数采用的是迭代法,a0则是迭代初始值。由于程序的局限性,不可能搜索无穷大的区间,这样一来,初始值的选择就很重要了。如果最优解离所给初始值比较近,迭代求出该最优解的概率就很高;如果初始值提供的不理想,离最优解较远,而matlab对于迭代次数及迭代精度都有个默认的设定,这种情况下很可能没有搜到最优解便给出了结果,当然这个结果是在所搜索区间上的最优解而不是全局最优的。

至于怎样估计初始值,我也没有肯定的办法,总之通过所知的x和y尽量使初始值接近就好了,毕竟matlab还是很强大的。
另外一个办法是,得到解后,画出函数的图形,看看那几个点是不是都在曲线附近,如果相差太大,就得考虑重新给初始值再计算一次。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜