matlab中lsqcurvefit怎么用
我的数据如下,想求解一个反比例函数,怎么用lsqcurvefit实现啊?x=1:5;y=[10.830.750.710.68];plot(x,y)f=@(c,x)1./(...
我的数据如下,想求解一个反比例函数,怎么用lsqcurvefit实现啊? x=1:5; y=[1 0.83 0.75 0.71 0.68]; plot(x,y) f=@(c,x)1./(c(1)*x+c(2)); c0=[0.5 -0.1]; [c,resnorm]=lsqcurvefit(f,c0,x,y); 其运行结果为: Optimization terminated: relative function value changing by less than OPTIONS.TolFun. 请大神指教。。。
展开
1个回答
展开全部
求解曲线拟合问题的一般过程是,先通过观察曲线形状大致确定函数的形式,然后对函数的参数有个大概的估计作为初值,拟合后画出曲线来看看效果,如果效果不理想,就考虑修改初值或函数的形式再试。有时候需要经过多次尝试才能得到满意的结果。
需要特别注意以下两点:
1、与拟合函数的形式有关,如果函数形式选择不当,不可能得到理想的结果。
例如,对于反比例函数,比较一般的情况应该考虑取1/(c1*x+c2)+c3。
2、拟合问题与初值关系很大,不是随便指定什么初值都行的通的。
例如,对于本题,初值如果选择[0.5
-0.1
1],得到的结果就不太理想;但取[1
1
1]得到的结果就比较满意。
代码及拟合结果如下:
1234567x=1:5;y=[1 0.83 0.75 0.71 0.68];f=@(c,x)1./(c(1)*x+c(2))+c(3);c0=[1 1 1];[c,resnorm]=lsqcurvefit(f,c0,x,y);plot(x,y,'.-',x,f(c,x),'r:x')legend('原始数据','拟合数据')
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询