【问题标题】:MATLAB curve-fitting with a custom equation使用自定义方程进行 MATLAB 曲线拟合
【发布时间】:2014-04-15 04:34:47
【问题描述】:

我正在研究由两个数组组成的曲线拟合数据:

t: 1, 3, 4, 7, 8, 10

P: 2.1, 4.6, 5.4, 6.1, 6.4, 6.6

两个变量之间的关系由P = mt/(b+t) 给出。我被告知通过将方程曲线拟合到数据点来确定常数 m 和 b。这应该通过写出方程的倒数并使用一阶多项式来完成。这是我的代码:

t = [1 3 4 7 8 10];
P = [2.1 4.6 5.4 6.1 6.4 6.6];

p = polyfit(t, t./P, 1);


m = 1/p(1)
b = p(2)*m

tm = 1:0.01:10;
Pm = (m*tm)./(b+tm);

plot(t,P, 'o', tm, Pm)

书中的答案是m = 9.4157b = 3.4418。上面的代码产生m = 8.4807b = 2.6723。我的错误是什么?任何建议将不胜感激。感谢您的时间。

【问题讨论】:

  • 书里的答案会不会错?我从答案中绘制了mbhold on,plot(tm,(9.4157*tm)./(3.4418+tm),'r');,至少只是目测,我建议您的解决方案更接近合适。
  • 我也想知道。我将按原样保留我的答案。非常感谢您的回复,David_G。

标签: matlab curve-fitting


【解决方案1】:

要跟进@David_G 的评论,您似乎有更好的答案。事实上,如果你在 MATLAB 中通过 Curve Fitting Toolbox 运行数据,你会得到:

General model:
  f(t) = m*t/(b+t)
Coefficients (with 95% confidence bounds):
   b =       2.587  (1.645, 3.528)
   m =       8.448  (7.453, 9.443)

Goodness of fit:
  SSE: 0.1594
  R-square: 0.9888
  Adjusted R-square: 0.986
  RMSE: 0.1996

您的解决方案几乎一样好:

Goodness of fit:
  SSE: 0.1685
  R-square: 0.9881
  Adjusted R-square: 0.9852
  RMSE: 0.2053

而且他们两个都比书中的那个好:

Goodness of fit:
  SSE: 0.404
  R-square: 0.9716
  Adjusted R-square: 0.9645
  RMSE: 0.3178

【讨论】:

  • 非常感谢,胡格诺派。我了解到这本书的作者是如何得出他的结论的,但我很高兴我坚持自己的答案。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多