Yot*_*tam 3 matlab curve-fitting
我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)
目标函数是
Y = 1/(kappa*X.^a)
Run Code Online (Sandbox Code Playgroud)
我正在使用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)
Run Code Online (Sandbox Code Playgroud)
我得到的结果rsquare
大约是-450,与测量的方向相同..如何提高Matlab的拟合技巧?
编辑:
我删除了.^-1
fit命令.这改善了行为,但并不完全正确.如果我将model1设置为:
model1 = fittype('1/(kappa*x.^pow)');
Run Code Online (Sandbox Code Playgroud)
适合不好.如果我将它设置为:
model1 = fittype('kappa*x.^pow');
Run Code Online (Sandbox Code Playgroud)
拟合是好的(kappa是一个非常小的数字,而pow是负的).
我也正常化了Y
,我得到了一个合理的结果
你应该更换
[fit1,gof1] = fit(X,Y.^-1,model1,opt1)
Run Code Online (Sandbox Code Playgroud)
通过
[fit1,gof1] = fit(X,Y,model1,opt1)
Run Code Online (Sandbox Code Playgroud)
你的初始条件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)
Run Code Online (Sandbox Code Playgroud)
拟合的结果是
>> 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)
Run Code Online (Sandbox Code Playgroud)