
要提高精度,就要增加迭代次数。
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)
得到的结果如下:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)