[已解决] matlab自定义函数最小二乘法数据拟合

[复制链接]
tdc1217 发表于 2021-4-5 11:56:14
本帖最后由 tdc1217 于 2021-4-5 12:15 编辑

f( x) = Aexp( - Bx) sin[(2pi/C)*x*exp( - Dx) + E] + F
自定义函数如图A,B,C,D,E,F为系数
x=[25,30,35,40,55,60,65,70,75,80,105,110,115,120,155,160,165,170,175]
y=[2.63,1.28,1.17,1.05,0.53,1.28,1.84,1.62,1.28,1.28,1.5,1.84,1.17,1.17,1.84,1.73,1.73,1.39,0.35]

需要拟合的数据如上
求教一下大家这个要如何编程

最佳答案


WarnerChang 发表于 2021-4-5 16:49:26
tdc1217 发表于 2021-4-5 15:15
x=[25,30,35,40,55,60,65,70,75,80,105,110,115,120,155,160,165,170,175]'
y=[2.63,1.28,1.17,1.05,0.53 ...

你看看吧
var1=50;
var2=1;
x=[25,30,35,40,55,60,65,70,75,80,105,110,115,120,155,160,165,170,175]'/var1;
y=[2.63,1.28,1.17,1.05,0.53,1.28,1.84,1.62,1.28,1.28,1.5,1.84,1.17,1.17,1.84,1.73,1.73,1.39,0.35]'*var2;
syms t
f=fittype('a*exp(-b*t)*sin((2*pi/c)*t*exp(-d*t)+e)+f','independent','t','coefficients',{'a','b','c','d','e','f'});
cfun=fit(x,y,f,'Normalize','on');
xi=[20:0.1:175]/var1;
yi=cfun(xi);
figure
plot(xi,yi,'b-',x,y,'g*');
title('拟合函数图形');

10 条回复


WarnerChang 发表于 2021-4-5 14:21:57
fittype和fit函数

tdc1217 发表于 2021-4-5 15:15:01

x=[25,30,35,40,55,60,65,70,75,80,105,110,115,120,155,160,165,170,175]'
y=[2.63,1.28,1.17,1.05,0.53,1.28,1.84,1.62,1.28,1.28,1.5,1.84,1.17,1.17,1.84,1.73,1.73,1.39,0.35]'
syms t
f=fittype('a*exp(-b*t)*sin((2*pi/c)*t*exp(-d*t)+e)+f','independent','t','coefficients',{'a','b','c','d','e','f'});
cfun=fit(x,y,f)
xi=20:0.1:175;
yi=cfun(xi);
figure
plot(xi,yi,'b-',x,y,'g*');
title('拟合函数图形');
——————————————————————————
大神,能帮忙修改一下嘛,谢谢!

WarnerChang 发表于 2021-4-5 16:49:26
tdc1217 发表于 2021-4-5 15:15
x=[25,30,35,40,55,60,65,70,75,80,105,110,115,120,155,160,165,170,175]'
y=[2.63,1.28,1.17,1.05,0.53 ...

你看看吧
var1=50;
var2=1;
x=[25,30,35,40,55,60,65,70,75,80,105,110,115,120,155,160,165,170,175]'/var1;
y=[2.63,1.28,1.17,1.05,0.53,1.28,1.84,1.62,1.28,1.28,1.5,1.84,1.17,1.17,1.84,1.73,1.73,1.39,0.35]'*var2;
syms t
f=fittype('a*exp(-b*t)*sin((2*pi/c)*t*exp(-d*t)+e)+f','independent','t','coefficients',{'a','b','c','d','e','f'});
cfun=fit(x,y,f,'Normalize','on');
xi=[20:0.1:175]/var1;
yi=cfun(xi);
figure
plot(xi,yi,'b-',x,y,'g*');
title('拟合函数图形');
回复此楼

tdc1217 发表于 2021-4-6 11:31:24
WarnerChang 发表于 2021-4-5 16:49
你看看吧
var1=50;
var2=1;

非常感谢

tdc1217 发表于 2021-4-6 17:58:21
WarnerChang 发表于 2021-4-5 16:49
你看看吧
var1=50;
var2=1;

再麻烦一下,如何将系数传递出来,查看拟合的结果

WarnerChang 发表于 2021-4-6 19:15:19
tdc1217 发表于 2021-4-6 17:58
再麻烦一下,如何将系数传递出来,查看拟合的结果

在命令行窗口输入:
cfun
就好了

tdc1217 发表于 2021-4-7 11:08:20
WarnerChang 发表于 2021-4-6 19:15
在命令行窗口输入:
cfun
就好了

想问一下:1.拟合出来的系数c只有零点几和理想值四十几出入很大,要如何修改;2.和方差要怎么查询;3.每次拟合的曲线都不一样,而且拟合的出入很大,只有一俩次拟合的效果很好。麻烦了,有空帮忙解答一下.万分感谢!


WarnerChang 发表于 2021-4-7 14:02:17
tdc1217 发表于 2021-4-7 11:08
想问一下:1.拟合出来的系数c只有零点几和理想值四十几出入很大,要如何修改;2.和方差要怎么查询;3.每 ...

1.是因为我定义了两个比例系数!否则你这个模型根本拟合不了
2.方差的话自己计算吧
3.这个问题我目前没有好办法

tdc1217 发表于 2021-4-7 15:05:02
WarnerChang 发表于 2021-4-7 14:02
1.是因为我定义了两个比例系数!否则你这个模型根本拟合不了
2.方差的话自己计算吧
3.这个问题我目前没有 ...

好的,谢谢

mengchenl 发表于 7 天前
mark 一下,感谢分享~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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