赞
踩
数据准备:
关于MATLAB曲线拟合,我写了一系列的经验,为了相互统一,采用下面的数据:
x=[0 0.3000 0.6000 0.9000 1.2000 1.5000 1.8000 2.1000 2.4000 2.7000 3.0000]
y=[2.0000 2.3780 3.9440 7.3460 13.2320 22.2500 35.0480 52.2740 74.5760 102.6020 137.0000]
由函数y=4*x^3+3*x^2+2 产生。
函数命令拟合:
MATLAB为我们提供了多项式拟合函数命令polyfit,下面我们就用这个函数命令进行拟合。
在MATLAB主窗口中输入
y1=polyfit(x,y,3),回车
我们会看到下面结果:
y1 =
4.0000 3.0000 0.0000 2.0000
函数的说明:
y1=polyfit(x,y,N),这里函数polyfit第一个参数传递的是拟合数据的自变量,第二个参数是因变量,第三个参数是拟合多项式的阶数,这个由我们给定。如下图。我们可以给定不同的N,运用不同的多项式进行拟合。
输出结果:
在上面的例子中我们看到输出的结果是:
y1 =
4.0000 3.0000 0.0000 2.0000
对照原始的函数y=4*x^3+3*x^2+2 ,我们可以看到,y1其实输出的是拟合函数的系数,并且由高次到低次由左到右输出。
多项式阶数N的确定:
这里有些人可能会有问题了,我们事先不知道要拟合的数据是几阶的,那么我们如何判断我们给定的拟合阶数N最终为多少呢?
阶数确定方法一:
这种方法是最常用的确定方法,一般情况下,我们拟合函数的目的,就是为了调用,所以在用函数拟合之前会用matlab曲线拟合工具箱进行拟合函数阶数的确定,由其确定拟合的阶数,然后我们用这个函数命令在其他地方进行十分方便地调用,这是最常用的做法。我们往往拟合的是多个同类型的数据,所以确定好一组样本的次数之后,就可以对其他数据用同样的N进行拟合。
阶数确定方法二:
这种方法方法可以取代用cftool进行判断的过程,具体实现代码如下:
for i=1:5
y2=polyfit(x,y,i);
Y=polyval(y2,x);%计算拟合函数在x处的值。
if sum((Y-y).^2)<0.1
c=i
break;
end
end
运行以上程序,结果如下:
c=3
假设我们的误差平方和精度范围为0.1,那么通过以上程序,我们可以看到用3阶函数拟合,就可以达到精度要求。在多项式进行拟合的时候这个值我们在程序执行的过程中就直接可以调用。
说明:至于说用plot函数进行画图,肉眼观察拟合程度的那种笨方法,我们不推荐,这里也不赘述。
大家可能有疑问,我们拟合完函数之后得到的是拟合多项式的系数,我们应该如何调用?如何查看我们拟合的多项式是什么形式呢?下面我们就接着上面的内容进行介绍。
拟合多项式的显示:
在MATLAB主窗口中输入
syms x f(x)
f(x)=poly2sym(y2,x)
我们会看到输出如下结果:
f(x) =
4*x^3 + 3*x^2 + (5822273280258613*x)/1267650600228229401496703205376 + 2
这就是我们拟合出来的多项式。
这里我们看到一次项的系数并不是0,这里5822273280258613/1267650600228229401496703205376=4.5930e-15,这个数量级我们完全可以忽略,认为是0。
拟合结果的调用:
在MATLAB主窗口中输入如下命令:
TEST=polyval(y2,x)
我们可以看到如下结果,如下图。
函数polyval()的第一个参数为多项式的系数,第二个参数为要计算的自变量值。可以是向量或者矩阵。
转自:http://jingyan.baidu.com/article/9c69d48f409c6013c9024e8c.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。