【问题标题】:Fitting a custom equation in Matlab在 Matlab 中拟合自定义方程
【发布时间】:2021-09-26 03:09:27
【问题描述】:

我想拟合这个方程来找到变量的值,特别是'c'

a*exp(-x/T) +c*(T*(exp(-x/T)-1)+x)

我确实有 `

的值

a = -45793671; T = 64.3096

由于缺少初始参数,cftool MATLAB 中的 SSE 和 RMSE 误差太大,根本无法拟合数据。 我也尝试了其他方法(线性拟合),但错误率高的问题仍然存在。

有什么方法可以很好地拟合数据,以便找到最准确的 c 值?

for x: 
 0
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20

`

for y:
-45793671
-87174030
-124726368
-165435857
-211887711
-255565545
-295927582
-332434440
-365137627
-383107046
-408000987
-434975682
-465932505
-492048864
-513857005
-543087921
-573111110
-588176196
-607460012
-628445691

【问题讨论】:

    标签: matlab curve-fitting


    【解决方案1】:

    我不认为拟合不好主要是因为缺少初始参数。

    一审:

    如果我们从问题措辞中所述的参数开始:a = -45793671; T = 64.3096 只剩下一个参数 c 需要拟合。结果不满意:

    二审:

    如果我们只保持 T 的指定值不变并优化两个参数 c 和 a ,则 RMSE 有所提高,但曲线的形状仍然不好:

    三审:

    如果我们忘记了两个参数 T,a 的指定值并继续对三个参数 T,c 进行非线性回归,结果会更好:

    但是从物理角度来看,T 的负值可能是不可接受的。这表明函数 y(x)=a * exp(-x/T)+c*(T*(exp(-x/T)-1)+x) 可能不是一个好的模型。您应该检查函数中是否没有拼写错误和/或是否缺少某些术语,以便更好地模拟物理实验。

    仅供参考(可能没用):

    使用更简单的函数可以获得更好的拟合:y(x) = A + B * x + C * x^2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多