[已答复] 使用fit(x,y,"exp1")拟合出的曲线偏大的问题

[复制链接]
dawnraider 发表于 2022-5-3 21:34:14
我使用fit(x,y,"exp1")拟合一个指数衰减的数据,拟合出的结果与预期不一致
我的代码如下(load的 testdata.mat 文件在附件里)
[/code]
clear
close all
load("testdata.mat")
y = real(y);
f = fit(x,y,'exp1');
gca = plot(x,y,'LineWidth',2);
hold on
plot(f);


运行结果:


可以看到在 x 是  4到11  这个范围时,拟合出的红色曲线偏上了。

exp1指的是 a*exp(b*x) 模型,这里b是负值所以是指数衰减。
请问如何才能让拟合出的曲线稍微偏下一点(也就是b的值更小)?

另外请问MATLAB默认的 startpoint 的选取规则是什么,好像官方上没有具体说明。。。startpoint对指数衰减模型 影响大么?

testdata.mat

20.39 KB, 下载次数: 4

4 条回复


TouAkira 发表于 2022-5-4 18:09:26
你要求的效果既然是关注于“在 x 是  4到11  这个范围时”,那么就不应当提供超出这个范围的数据,否则拟合默认使用全部数据,显然你关注的区间之外两侧的数据会拖后腿。
另外有指定待拟合函数形式的拟合,甚至可以指定各个参数的区间,具体去看优化工具箱的帮助手册。

dawnraider 发表于 2022-5-5 09:42:48
TouAkira 发表于 2022-5-4 18:09
你要求的效果既然是关注于“在 x 是  4到11  这个范围时”,那么就不应当提供超出这个范围的数据,否则拟合 ...

所有的数据都是权重都是等价的,我没办法放弃其他范围的数据。。
我更期望呈现如下图 图1 紫色曲线所示的结果。关于我为何认为拟合的红色曲线偏上是有问题的:我有多组指数衰减的数据(图1 只是其中的一组),利用for循环进行拟合,并记录拟合出的 b 值(指数项的系数),最终绘制 -b 的变化曲线,发现中间出现了跳变(如图2 所示,大概在第230组数据拟合出来出现 -b 的断崖式下降),我观察第230组到第330组数据的拟合结果,发现他们都出现拟合出的红色曲线偏上的问题,之前无跳变的数据(第230组之前)拟合出来是恰好可以穿过的,因此我认为是拟合出的问题导致 -b 的值不正确。

老师,请问
1. 是否有办法人为设定“exp1”模型的某些参数(比如startpoint等)达到紫色曲线的效果(即正确的 -b 的值)?
2. 我期望知道“exp1”模型的具体拟合思路,是否有相关的数学参考文献?



图2

图2

图1

图1

顾世梁 发表于 2022-5-5 12:09:50
模型不当,不可能有好的拟合。

dawnraider 发表于 2022-5-5 17:54:21
顾世梁 发表于 2022-5-5 12:09
模型不当,不可能有好的拟合。

可是这600组数据,只有中间230-330和340-350这些是有问题的,其他组的拟合都很好的呀。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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