fit()使用custom fittype()返回指定的起始值

时间:2015-12-12 20:34:09

标签: matlab curve-fitting

在matlab中使用fit函数时,它返回我在代码中指定的起始值。

所以在我给fit的{​​{1}}函数参数中说,返回值为

fit(... 'start', [2.9 10000] ...)

为什么matlab没有在这里调整拟合参数?我尝试改变起点,但它仍然只返回我输入的值。我还绘制了函数(参数等于我输入的起点)与数据拟合的函数,它们是非常接近彼此。

我使用fit功能错了吗?有什么方法可以从matlab获得精确的拟合参数吗?

另外,正如旁注,但是有可能得到一些东西(例如... = 2.9 (some 95% confidence value) ... = 10000 (some 95% confidence value) 值)表明拟合的程度如何?

谢谢!

编辑: 以下是我对fit函数的了解:

myfitopt = fitoptions(' Method',' NonlinearLeastSquares',' start',[13.5 * 10 ^ 3,1.31 * 10 ^ 4]); %options

myfittype = fittype(' 4 * k Temp beta /(m *((2 * pi)^ 4 *(f ^ 2-v_0 ^ 2)^ 2 +(2 * pi f beta)^ 2))','独立',' f','问题',{& #39; k',' m',' Temp'},'系数',{' beta',' v_0'},' options',myfitopt)

myfit = fit(freq',p,myfittype,' problem',{k_B,mass,Temperature})%播放beta和v_0的起始值

这是回归:

myfittype =

R^2

myfit =

 General model:
 myfittype(beta,v_0,k,m,Temp,f) = 4*k*Temp*beta/(m*((2*pi)^4*(f^2-v_0^2)^2+
                (2*pi*f*beta)^2))

其中beta和v_0就是我输入的起始值,误差范围非常大。为什么代码不会改变这些系数以适应数据?

谢谢!

1 个答案:

答案 0 :(得分:1)

由于您提供的信息很少,很难给您一定的解决方案。但是,我以最简单的方式解释拟合过程。

在处理曲线/曲面拟合时,您应该考虑3个重要步骤:

<强> 1。选择一个模型

例如,对于以下数据,选择poly2模型是正确的。 enter image description here

但是,您可以为该类型选择不同的内容,例如:

poly1   Y = p1*x+p2
poly2   Y = p1*x^2+p2*x+p3
poly3   Y = p1*x^3+p2*x^2+...+p4
...etc., up to poly9    Y = p1*x^9+p2*x^8+...+p10

检查所有其他详细信息here

<强> 2。使模型适合数据

在这里,您可以使用fit函数生成适合对象f

f = fit(x,y,'poly2')

结果如下:

f = 

     Linear model Poly2:
     f(x) = p1*x^2 + p2*x + p3
     Coefficients (with 95% confidence bounds):
       p1 =    0.006541  (0.006124, 0.006958)
       p2 =      -23.51  (-25.09, -21.93)
       p3 =   2.113e+04  (1.964e+04, 2.262e+04)

这显示了模型以及拟合函数为您找到的系数。

第3。现在您可以轻松地使用该模型:

f(1900)
ans =
       74.5558

情节中的红点是: enter image description here

可以使用fit函数修改fitoptions函数的许多其他属性。检查fitfitoptions here上的matlab文档。

startpoint属性指定系数起始值。要使用startpoint选项,您可以使用fitoption,然后使用fittype然后使用fit,如下所示:

fo = fitoptions('Method','NonlinearLeastSquares','Lower',[0,0],'Upper', Inf,max(cdate)],'StartPoint',[1 1]);
ft = fittype('a*(x-b)^n','problem','n','options',fo);
[curve2,gof2] = fit(xdata,ydata,ft,'problem',2)

回答您的附注

您可以使用residual analysis来检查合适的质量。