[已答复] 利用nlinfit求非线性模型,老显示错误 求救大神

[复制链接]
大鹏l李 发表于 2021-11-17 20:05:23
  function yhat=hougen(b,x);yhat=(b(1)*x(2)-x(3)/b(5))./(1+b(2)*x(1)+b(3)*x(2)+b(4)*x(3));
end
x1=[470 285 470 470 470 100 470 100 100 100 100 285 285]';
x2=[300 80 300 80 80 190 80 190 300 300 80 300 190]';
x3=[10 10 120 120 10 10 65 65 54 120 120 10 120]';
X=[x1 x2 x3];
y=[8.55 3.79 4.82 0.02 2.75 14.39 2.54 4.35 13.00 8.5 0.05 11.32 3.13]';
beta=[-0.5 -0.3 0 0.2 0.4];
nlinfit(X,y,'hougen',beta);
nlintool(X,y,'hougen',beta,0.01);


为什么一直显示错误啊
错误使用 nlinfit (第 219 行)
MODELFUN 必须为函数,它返回大小与 Y (13-by-1)相同的拟合值向量。您提供的模型函数返回结果 1-by-1。

大小不匹配的常见原因之一是在函数中使用矩阵运算符(*、/、^),而不是对应的元素运算符(.*、./、.^)。


6 条回复


WarnerChang 发表于 2021-11-17 20:28:59
x1=[470 285 470 470 470 100 470 100 100 100 100 285 285]';
x2=[300 80 300 80 80 190 80 190 300 300 80 300 190]';
x3=[10 10 120 120 10 10 65 65 54 120 120 10 120]';
X=[x1 x2 x3];
y=[8.55 3.79 4.82 0.02 2.75 14.39 2.54 4.35 13.00 8.5 0.05 11.32 3.13]';
beta=[-0.5 -0.3 0 0.2 0.4];
nlinfit(X,y,'hougen',beta);
nlintool(X,y,'hougen',beta,0.01);
function yhat=hougen(b,x);yhat=(b(1).*x(2)-x(3)./b(5))./(1+b(2).*x(1)+b(3).*x(2)+b(4).*x(3));
end

shihe 发表于 2021-11-18 09:09:27
上面代码得到的结果时一个局部最优解吧,全局最优解如下:
  1. Root of Mean Square Error (RMSE): 0.965163455794218
  2. Sum of Squared Residual: 12.1100264532083
  3. Correlation Coef. (R): 0.978122603745868
  4. R-Square: 0.956723827958596

  5. Parameter        Best Estimate
  6. ----------        -------------
  7. b1        0.214233374530917
  8. b2        0.0120877343928647
  9. b3        0.00148273363547649
  10. b4        0.0348759788701179
  11. b5        8.32371761559893
复制代码

WarnerChang 发表于 2021-11-18 11:12:29
shihe 发表于 2021-11-18 09:09
上面代码得到的结果时一个局部最优解吧,全局最优解如下:

你是怎么判断它是局部还是全局最优解的呢?望大佬赐教,哈哈

shihe 发表于 2021-11-18 19:13:32
WarnerChang 发表于 2021-11-18 11:12
你是怎么判断它是局部还是全局最优解的呢?望大佬赐教,哈哈

理论上目前应该是很难判断的,只能实践,由计算结果比较去判断,如果能得到比上面更好的结果,那就说明上面的也是个局部解。

WarnerChang 发表于 2021-11-18 19:47:46
shihe 发表于 2021-11-18 19:13
理论上目前应该是很难判断的,只能实践,由计算结果比较去判断,如果能得到比上面更好的结果,那就说明上 ...

噢噢,谢啦

大鹏l李 发表于 2021-11-20 17:55:54
WarnerChang 发表于 2021-11-17 20:28
x1=[470 285 470 470 470 100 470 100 100 100 100 285 285]';
x2=[300 80 300 80 80 190 80 190 300 300 8 ...

谢谢 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表