2015-12-12 33 views
2

在matlab中使用fit函数时,它返回的是我在代码中指定的起始值。fit()使用自定义fittype()返回指定的起点值

所以说在fit函数参数我给fit(... 'start', [2.9 10000] ...),返回值将是

... = 2.9 (some 95% confidence value) 

... = 10000 (some 95% confidence value) 

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

我使用拟合函数是否错误?有什么方法可以从matlab中获得精确的拟合参数吗?

另外,就像一个侧面说明,但它有可能得到某种特征(如R^2价值),其特征是多么适合?

谢谢!

编辑: 以下是我对拟合函数:

myfitopt = fitoptions( '方法', 'NonlinearLeastSquares', '启动',[13.5 * 10^3,1.31×10^4] ); %选项

myfittype = fittype('4 * K 温度的β/(M *((2 * PI)^ 4×(F^2-V_0^2)^ 2 +(2 * PI ˚F β')'','独立','f','问题',{'k','m','Temp'},'系数',{'beta','v_0'},'options 'myfitopt)

myfit =拟合(频率',p,myfittype, '问题',{k_B,质量,温度})%发挥作用的与β-的起始值和V_0

这是回访:

myfittype =

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)) 

myfit =

General model: 
myfit(f) = 4*k*Temp*beta/(m*((2*pi)^4*(f^2-v_0^2)^2+(2*pi*f*beta)^2)) 
Coefficients (with 95% confidence bounds): 
    beta = 1.35e+04 (-4.909e+09, 4.909e+09) 
    v_0 = 1.31e+04 (-3.802e+08, 3.802e+08) 
Problem parameters: 
    k = 1.381e-23 
    m = 1.176e-12 
    Temp =  295.5 

其中β和V_0只是我输入为初始值有非常大的误差范围。为什么代码不改变这些系数以适应数据?

谢谢!

+0

您的问题需要更多的细节。你在'fit'函数中使用的模型是什么?数据的形状如何,你可以在问题中发表一个阴谋吗? – NKN

回答

1

由于您提供的信息很少,因此很难为您提供某种解决方案。但是,我会尽可能以最简单的方式解释适合的过程。

当曲线/曲面拟合打交道,你应该考虑三个重要步骤:

1.选择例如模型

以下数据选择poly2模型是正确的。 enter image description here

但是你可以有种类不同的选择,如:

​​3210

检查每一个其他细节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功能。检查fitfitoptionshere上的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) 

为您解答侧面说明

你可以使用检查质量适合。