【问题标题】:nlinfit Dimension Errornlinfit 尺寸错误
【发布时间】:2016-01-11 05:51:06
【问题描述】:

我在 matlab 中使用非线性拟合工具。 我不断收到以下错误:

使用 nlinfit 时出错(第 210 行) MODELFUN 必须是返回与 Y (1×100) 大小相同的拟合值向量的函数。您提供的模型函数返回 1×2 的结果。 大小不匹配的一个常见原因是在函数中使用矩阵运算符(、/、^)而不是相应的元素运算符(.、./、.^)。

我发现这个question 与我的非常相似,但我仍然遇到同样的错误。我尝试在控制台上计算 myfun,同时使用向量作为输入,这为我提供了正确尺寸的输出。如果有人能指出错误,那将是非常有帮助的。

% Defining the function
myfun = @(t,b)exp(t.*b(1)+b(2));
[y_a] = arrayfun(myfun,x_a);
% Using nonlinear least square minimization
beta0 = [1 1];
nlinfit(x,y,myfun, beta0)

提前谢谢...:)

编辑:发现这是有效的。 g = fittype('exp(k*x + a)'); [fit1,gof,fitinfo] = fit(x',y',g,'StartPoint',[1 1]);

【问题讨论】:

    标签: matlab non-linear-regression


    【解决方案1】:

    nlinfit 中使用的函数将参数向量作为其第一个参数,然后是独立数据向量。你想要的,

    myfun = @(b,t)exp(t.*b(1)+b(2));

    请注意,在这种情况下,您也可以只使用 * 而不是 .*

    【讨论】:

    • xy 的尺寸是多少,当myfun 的输入正确排序时,您会收到什么错误消息?
    • 感谢您的评论,我已经尝试过了。我试过类似的东西。 myfun = @(b,t)exp(t*b(1)); 即使是那个简单的函数也给了我同样的错误。还尝试了 lsqcurvefit,得到了非常相同的错误。终于设法通过使用简单的拟合函数来解决它。 g = fittype('exp(k*x + a)'); [fit1,gof,fitinfo] = fit(x',y',g,'StartPoint',[1 1]); 不太确定问题出在哪里,但任何见解都会很酷!
    • x = (1x100) 和 y = (1x100) 的尺寸。我什至尝试将它们转换为向量,但没有得到任何结果。
    • 奇怪,x=1:100;y=x+randn(size(x));nlinfit(x,y,myfun,[0 0]) 工作正常。
    • 感谢您的评论:尝试更改它,但得到相同的消息 MODELFUN 必须是一个函数,它返回与 Y(1×100)大小相同的拟合值向量。您提供的模型函数返回 1×2 的结果。大小不匹配的一个常见原因是在函数中使用矩阵运算符(、/、^)而不是相应的元素运算符(.、./、.^)。 我不是我安装的matlab版本肯定有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多