【问题标题】:Curve fitting with Matlab fails miserably用 Matlab 进行曲线拟合惨遭失败
【发布时间】:2012-01-09 22:30:16
【问题描述】:

我正在尝试在命令行中使用 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)

我使用fittypefitoptionsfit如下:

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 进行了标准化,得到了合理的结果

【问题讨论】:

  • fit 中的^-1 吗?

标签: matlab curve-fitting


【解决方案1】:

你应该替换

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

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    相关资源
    最近更新 更多