MATLAB中LSQR的问题

MATLAB中LSQR的问题,第1张

提示的意思是:由于达到迭代步数,算法停止,但没达到精度要求。相对误差是0.46

要提高精度,就要增加迭代次数。

X = lsqr(A,B,TOL,MAXIT)在这句中把MAXIT用一个较大的数代入,就能增加迭代次数 。

从下图的曲线可见,问题最大的症结在于:u在第20个点处有比较激烈的变化,而i,i1-i5都没有这样的变化的特征,所以想要使用这6个信号的先行叠加得到和u比较接近的值是不太现实的。

要想使拟合的总误差最小,可以用lsqcurvefit函数,代码如下(前面应该是你贴出来的数据定义,省略):

c0=ones(1,6)

c0=[16 -331 369 50 -153 39]

x=[ii1i2i3i4i5]

f=inline('c(1)*x(1,:)+c(2)*x(2,:)+c(3)*x(3,:)+c(4)*x(4,:)+c(5)*x(5,:)+c(6)*x(6,:)','c','x')

opt=optimset('MaxFunEvals',1e5,'MaxIter',1e5)

c=lsqcurvefit(f,c0,x,u,[],[],opt)   % 6个元素,分别对应a-f

plot(u,'o-')

hold on

plot(f(c,x),'x:r')

legend('原始数据','拟合数据',0)

得到的结果如下:


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8108387.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存