(一)polyfit曲线拟合 函数 用法以及例子
转自:https://blog.csdn.net/It_BeeCoder/article/details/78779385
在运行MATLAB编程进行数据的处理过程当中,我们常常用到matlab曲线拟合,但是工具箱由于需要人工交互,得到的拟合结果,需要人工的去提取,再输入,所以,工具箱拟合结果十分不适合调用,以及继续下面的操作,所以我们需要用到matlab曲线拟合函数,并且以最常用的多项式拟合函数为例作为matlab曲线拟合例子,进行详细介绍。
matlab曲线拟合
-
数据准备:
关于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函数进行画图,肉眼观察拟合程度的那种笨方法,我们不推荐,这里也不赘述。
END
matlab曲线拟合结果调用及显示
-
大家可能有疑问,我们拟合完函数之后得到的是拟合多项式的系数,我们应该如何调用?如何查看我们拟合的多项式是什么形式呢?下面我们就接着上面的内容进行介绍。
-
拟合多项式的显示:
在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()的第一个参数为多项式的系数,第二个参数为要计算的自变量值。可以是向量或者矩阵。
以下转自:https://blog.csdn.net/cs_zlg/article/details/8516628
(二)matlab的polyfit命令,可以理解为“polynomial fitting”,用于数据的多项式拟合。
常用的几种命令格式:
1.P = POLYFIT(X,Y,N)
功能:在最小二乘法意义之上,求解Y关于X的最佳的N次多项式函数。返回值P为N+1维参数向量p(1),p(2)….所得的多项式为P(1)*X^N + P(2)*X^(N-1) +…+ P(N)*X + P(N+1)
2.[P,S] = POLYFIT(X,Y,N)
功能:(1)P的意义同1,是参数矩阵。S是规模为1×1的结构数组,包括R(系数矩阵的QR分解的上三角阵),df(自由度),normr(拟合误差平方和的算术平方根)
注意:
1. 使用polyfit命令进行多项式拟合时要注意的是,向量X(其中元素作为自变量)中不重复的元素个数m,和拟合阶数k需要满足m>=k+1.简单分析:k阶拟 合需要确定k+1个未知参数(如1阶拟合y = ax + b需要确定a和b两个参数),故而至少需要k+1个方程,故而需要至少k+1个不同的已知数对(x,y),由于函数中x只能对应一个y,故而需要至少k+1个不同的x。
以上只是帮助理解的粗略分析,仅供参考。
2. polyfit只适合于形如y = a[k]*x^k + a[k-1]*x^(k-1) + …. + a[1]*x + a[0]的完全的一元多项式的数据拟合。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34138.html