我正在尝试在命令行中使用fit
在Matlab中拟合曲线。输入数据是:
X =
1
2
4
5
8
9
10
13
Y =
1.0e-04 *
0.1994
0.0733
0.0255
0.0169
0.0077
0.0051
0.0042
0.0027
目标函数是
Y = 1/(kappa*X.^a)
我正在使用fittype
,fitoptions
和fit
,如下所示:
model1 = fittype('1/(kappa*x.^pow)');
opt1 = fitoptions(model1);
opt1.StartPoint = [1e-5 -2];
[fit1,gof1] = fit(X,Y.^-1,model1,opt1)
我得到rsquare
大约-450的结果,这些结果与测量的方向相同。。如何提高Matlab的拟合技能?
修改:
我删除了fit命令中的.^-1
。这改善了行为,但并不完全正确。如果我将model1设置为:
model1 = fittype('1/(kappa*x.^pow)');
合适不好。如果我将它设置为:
model1 = fittype('kappa*x.^pow');
适合度很好(kappa是一个非常小的数字,而pow是负数)。
我也已将Y
标准化,我得到了合理的结果
答案 0 :(得分:6)
你应该替换
[fit1,gof1] = fit(X,Y.^-1,model1,opt1)
通过
[fit1,gof1] = fit(X,Y,model1,opt1)
kappa
的初始条件是1e-5
,如果kappa
在分子中,这是有意义的。
使用模型kappa*x.^pow
,初始条件[1e-5 -2]
,您将得到合适的选择:
X =[1 2 4 5 8 9 10 13]';
Y = 1.0e-04 * [0.1994 0.0733 0.0255 0.0169 0.0077 0.0051 0.0042 0.0027]';
model1 = fittype('kappa*x.^pow');
opt1 = fitoptions(model1);
opt1.StartPoint = [1e-5 -2];
[fit1,gof1] = fit(X,Y,model1,opt1)
plot(fit1, X, Y)
拟合结果是
>> fit1
fit1 =
General model:
fit1(x) = kappa*x.^pow
Coefficients (with 95% confidence bounds):
kappa = 2.044e-05 (1.931e-05, 2.158e-05)
pow = -1.657 (-1.851, -1.464)