与nlinfit不合适

时间:2013-07-23 22:48:59

标签: matlab

我对nlinfit有适合的问题。我似乎无法弄清楚如何改善健康状况。减少TolX或TolFun并未改变coeffs中的值。

 model = @(a,x) 1./(1 + a*x.^2); 
 model0 = [1e13];  
 opts = statset('TolX', 1e-25, 'TolFun', 1e-25); 
 coeffs = nlinfit(freqData, noiseData, model, model0, opts);

这是我的契合。 http://i.imgur.com/v1dkd4X.png

2 个答案:

答案 0 :(得分:2)

看起来你正在处理非常小的数字,因此可能存在浮点精度问题。为什么不将表达式转换为不同的,然后拟合,然后逆变换? 例如:

1/model作为转换,现在你只有一个简单的多项式拟合,

model_new=(x,a)=1+a*x.^2

您可以使用polyfitpolyval,然后选择1/result ...

答案 1 :(得分:1)

我适合看起来与你的相似的模拟数据,没有缩放:

enter image description here

诀窍是检查您的数据 - 您的信号幅度在x~40和~150之间从~1.5降至~1.0。然而,如果你检查函数,很明显它的值不应该低于1,所以它无法正确建模数据。

通过包括初始幅度来更好地拟合这些数据:

model_new = @(a,x) a(1)./(1 + a(2)*x.^2); 

查看绘制到数据上的拟合函数,看起来您还在某处包含了缩放参数。

包括幅度参数可以改善原始功能,但不一定安全:您的数据噪音很大,而且不会下降太多,因此您可以预期您的不确定性(和相关性)会很大。

在拟合之前缩放数据可能在这里没有用,因为你没有数据低至x = 0并且不知道应该是什么样的适当缩放因子。