在 Matlab 中拟合自定义方程

问题描述

我想拟合这个方程来找到变量的值,特别是'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

解决方法

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

初试:

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

enter image description here

二审:

如果我们只保持指定的 T 值不变,并优化两个参数 c 和 a ,RMSE 得到改善,但曲线的形状仍然不好:

enter image description here

第三次试用:

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

enter image description here

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

仅供参考(可能没有用):

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

enter image description here