matlab 曲线拟合小记

在matlab中经常需要对数据进行曲线拟合,如最常见的多项式拟合,一般可以通过cftool调用曲线拟合工具(curve fit tool),通过图形界面可以很方便的进行曲线拟合,但是有些时候也会遇到不方便用图形工具。因此这里简单的记下两种常用的拟合方法。

1 多项式拟合(polyfit和polyval)

polyfit可以对数据进行拟合(自定义用几次多项式),返回相应的参数,然后用polyval生成拟合后的数据点,下面的例子中我们对抛物线y=3x2+6x+5进行拟合。

复制代码
x = -5:0.1:5;
y = 3*x.^2+6*x + 5 + randn(size(x));
p = polyfit(x,y,2);
yy = polyval(p,x); 
plot(x,y,'.');
hold on;
plot(x,yy,'r','LineWidth',2)
复制代码

polyfit(x,y,2)中x表示自变量,y表示因变量,2表示用二次曲线(抛物线)进行拟合,得到的p其实是对应的参数估计值,yy为拟合数据点。另外在实验中还加了一个随机噪声。结果如图:

image

2 高斯函数的曲线拟合

高斯曲线也是很常要拟合的曲线,这里介绍一种直接用代码使用cftool拟合工具的方法,这种方法可以对许多自定义的函数进行拟合(例如用来做多项式拟合,但是这种方法要麻烦很多,远没有前一种方法多项式拟合方便)。下面的是一个简单的例子,其中还可以进行更复杂的设置,具体请help fit和fittype.

复制代码
f = fittype('a*exp(-((x-b)/c)^2)');
x = -10:0.2:10;
y = 5*exp(-((x)/4).^2)+randn(size(x))*0.1;
plot(x,y,'.')
[cfun,gof] = fit(x(:),y(:),f);
yy = cfun.a*exp(-((x-cfun.b)/cfun.c).^2);
hold on;plot(x,yy,'r','LineWidth',2);
复制代码

结果如下图:

image

此外,高斯曲线的拟合也可以通过转化为多项式拟合的方法实现,先将被拟合数据y取对数,然后用多项式拟合求出对应的参数。代码如下:

复制代码
x = -10:0.2:10;
y = 5*exp(-((x)/4).^2);
lny = log(y);
p = polyfit(x,lny,2);
gauss.c = sqrt(-1/p(1));
gauss.b = -p(2)/2/p(1);
gauss.a = exp(p(3)-p(1)*gauss.b^2);
yy = gauss.a*exp(-((x-gauss.b)/gauss.c).^2);
plot(x,y,'.');
hold on;
plot(x,yy,'r','LineWidth',2)
复制代码

结果如图所示,但是这种方法似乎只在没有噪声干扰时效果较好,如果存在噪声的干扰的话,那么这个估计不是最佳的(因为对数运算使不同区间的噪声影响不同),右图为加了噪声之后的情况.

image                image

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB曲线工具箱(cftool)是一个用于进行曲线的工具。通过该工具箱,用户可以选择不同类型的曲线,如指数逼近、傅立叶逼近、高斯逼近、插值逼近、线性、多项式逼近、幂逼近、有理数逼近、平滑逼近、正弦曲线逼近和Weibull逼近等。\[1\]\[2\] 使用MATLAB曲线工具箱,用户可以加载数据并选择适的曲线类型进行结果可以进行分析,并可以输出参数。如果只想显示图像,可以选择“文件”->“Print to figure”;如果想导出后的曲线数据,可以选择“文件”->“Generate Code”,生成代码后可以自行修改函数名并保存,然后就可以调用了。例如,如果想导出五次多项式Polynomial逼近的结果,可以查看生成代码的信息,其中fitresult是函数的输出,可以通过fitresult.p1得到p1的系数,其他系数也可以类似地得到。如果想导出后的曲线数据,只需要将横坐标传给fitresult即可。\[2\]\[3\] 总之,MATLAB曲线工具箱提供了丰富的曲线类型和功能,可以帮助用户进行曲线分析。 #### 引用[.reference_title] - *1* *2* *3* [MATLAB曲线工具箱(cftool)介绍(完结)](https://blog.csdn.net/didi_ya/article/details/119042304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值