博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Matlab 曲线拟合
阅读量:7026 次
发布时间:2019-06-28

本文共 1367 字,大约阅读时间需要 4 分钟。

在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为拟合数据点。另外在实验中还加了一个随机噪声。 
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); 
此外,高斯曲线的拟合也可以通过转化为多项式拟合的方法实现,先将被拟合数据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) 
但是这种方法似乎只在没有噪声干扰时效果较好,如果存在噪声的干扰的话,那么这个估计不是最佳的(因为对数运算使不同区间的噪声影响不同),右图为加了噪声之后的情况. 
                  
更多曲线拟合 Matlab源码: 

posted on
2015-05-14 23:31 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/eyeandroid/p/4504822.html

你可能感兴趣的文章
yum 本地源 配置
查看>>
只是留个记录好复制
查看>>
如何设置“系统偏好设置”的快捷键
查看>>
脚本test
查看>>
用ntpdate从时间服务器更新时间[Centos时间同步]
查看>>
第二天,仔细学习了下:common.inc.php(Discuz6.1.0核心文件)02
查看>>
手工kill掉VNC进程的故障处理
查看>>
python编程练习-字符串移位练习题
查看>>
python---list列表、元组
查看>>
LOG_ARCHIVE_CONFIG
查看>>
oracle 11gR2启用对sys用户操作行为的审计
查看>>
ActionScript3.0 AIR 透明背景+拖动功能
查看>>
C# winform combobox控件中子项加删除按钮(原创)
查看>>
我的友情链接
查看>>
网络工程师眼中的docker
查看>>
十八般武艺之Nginx踩坑总结
查看>>
为什么有人说组装机质量不好
查看>>
本地自旋锁与信号量/多服务台自旋队列-spin wait风格的信号量
查看>>
理想是自欺欺人的好东西
查看>>
我的友情链接
查看>>