【问题标题】:Matlab error with nlinfit使用 nlinfit 的 Matlab 错误
【发布时间】:2013-04-04 05:25:30
【问题描述】:

我正在尝试获得以下方程的非线性最小二乘拟合:

y = 1 / (1 + a (ln(duration)^b))

我希望拟合的数据如下所示,我尝试使用 nlinfit 函数来解决它...

x = [1.99000000000000;3.01000000000000;4.01000000000000;5.09000000000000;5.77000000000000;6.85000000000000;7.72000000000000;8.87000000000000;9.56000000000000;];
y = [1;1;0.800000000000000;0.730000000000000;0.470000000000000;0.230000000000000;0.270000000000000;0.100000000000000;0.100000000000000;];

plot(x,y,'o','linestyle','none');

p(1) = 1;
p(2) = 1;

fun = @(p,x) 1 / (1 + p(1).*(log(x).^p(2)));

myfit = nlinfit(x,y,fun,p);

我的问题似乎在于为 nlinfit 函数定义第四个必需的输入(上例中的“p”)。文档没有明确解释需要什么才能工作,并且我无法根据收到的错误消息解决问题:

???在 128 MODELFUN 使用 ==> nlinfit 时出错,应返回与 Y 长度相同的拟合值向量。

==> 在 14 处拟合时出错 myfit = nlinfit(x,y,fun,p);

我尝试将 p 设置为 repmat(1,9,1) 和 repmat(1,1,9),但这些似乎都不能解决我的问题。任何帮助将不胜感激!

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我相信你忘记了在函数中按元素删除的点:

    fun = @(p,x) 1 ./ (1 + p(1).*(log(x).^p(2)));
                   ^
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      相关资源
      最近更新 更多