摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题作了一个完整的认识。接下来对拟合模型,多项式数学原理进行了详细的讲解,经过对文献的阅读以及本身的知识积累对原理有了一个系统的认识。介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的创建。具体记录了多项式曲线拟合的具体步骤,在创建理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了MATLAB的具体构造和曲线拟合工具。最后就是利用MATLAB中的plotfit函数对测量到的数据进行多项式拟合,并给出多项式曲线拟合图形,并对测试的结果进行总结,得出多项式曲线拟合的最佳拟合方法。git
关键词:多项式,曲线拟合,MATLAB,测量数据编程
Research on polynomial data fitting method based on MATLAB数组
Abstract网络
This paper first introduces the background of polynomial data fitting and gives a complete understanding of the whole subject. Then, the fitting model and the mathematical principle of polynomial are explained in detail, and a systematic understanding of the principle is gained through the reading of literature and the accumulation of knowledge. Introduce the basic theory of polynomial curve fitting of polynomial data fitting principle for all aspects of the theory, but also elaborated the basic principle of curve fitting and polynomial curve fitting model. Specific records the specific steps polynomial curve fitting, on the basis of the established theory of polynomial curve method of MATLAB to realize the study, using MATLAB R2016a platform on the measured data of polynomial fitting data, the special structure of MATLAB is introduced and the curve fitting tool. Finally is plotfit function in MATLAB to polynomial fitting of measured data, graphics and polynomial curve fitting is given, and summarizes the results of the test, the optimum fitting of polynomial curve fitting method.数据结构
Keywords:polynomial,Curve fitting,MATLAB,The measurement data编程语言
目 录编辑器
第一章绪论......................................................... 1ide
1.1 多项式数据拟合研究背景及目的............................... 1函数
1.2 国内多项式数据拟合发展方向................................. 1工具
1.3 本课题研究的内容........................................... 2
第二章数据曲线拟合................................................. 3
2.1 拟合模型................................................... 3
2.2 多项式曲线拟合原理......................................... 3
2.3 polyfit、polyval、plot函数................................ 4
第三章 MATLAB.................................................... 10
3.1 MATLAB概述............................................... 10
3.2 MATLAB的优势............................................. 10
3.3 MATLAB运行简介........................................... 11
3.4 MATLAB曲线拟合工具箱简介................................. 12
3.5 多项式数据拟合的MATLAB实现................................ 16
第四章多项式数据拟合的应用........................................ 19
4.1 获取数据.................................................. 19
4.2 使用数据拟合工具箱获取数据模型............................ 19
4.3 进行多项式曲线拟合........................................ 20
结束语............................................................ 23
致谢.............................................................. 24
参考文献.......................................................... 25
在实际的工程测量以及作科学研究时,经常会得出一对数据。而当咱们研究这些数据时,很难直接获得他们复合的函数,这时咱们就要设法去寻找最佳的曲线去尽可能的逼近所给的数据点。这些经过数学固然能够解决,可是计算过程太过麻烦。基于此人们提出了基于MATLAB的多项式数据拟合的理论,MATLAB内置很是丰富的函数库以及很是方便使用的曲线拟合工具箱,只须要使用者提供已经有的数据,而后使用MATLAB中的数据拟合工具箱就能简单的完成数据拟合的目的。数据拟合出的多项式函数所画出的曲线逼近所给的数据点在坐标上的位置。这样得出的多项式可以反映出工程和科学研究领域上的规律变化,从而得出大体的物理规律和工程等现象的内在规律。多项式数据拟合的基本原理是:针对所测的数据,在MATLAB中表示出来以后,而在MATLAB中内置了polyfit函数,它能够根据你想拟合的阶次来尽可能的逼近所给的数据点,而不一样的阶次也有不一样的效果,通常的话阶次越高,拟合曲线的振荡也就越大,这就给数据拟合提供了很大的方便。也由于上述所说的缘由,在必定程度上,多项式曲线拟合有必定的通用性。在上述的基础上,经过MATLAB的polt函数,可以对曲线进行仿真,而后咱们能够经过分析它所给出的图形界面,直观地看出哪个阶次的多项式更逼近所给的数据点,而后进行分析验证。
在经过近期的学习中以及看了大量的相关书籍后进行分析,基于MATLAB的多项式数据拟合被用在不少实际的工程测量数据、物理实验以及科学研究等一些领域的测试数据分析。研究者们很是但愿经过研究这些数据来得出这些数据知足的通常趋势,从而获得很是靠谱的内在规律,从而达到预测和分析的目的。基于MATLAB的数据拟合有不少种方法好比:最小二乘法、多项式法、圆拟合等,咱们这里使用的基于MATLAB的多项式数据拟合,由于它能够改变多项式的次数,从而来达到更加逼近测试数据的目的,因此这种方法具备通用性的效果。可是如今因为实际问题的复杂性,数据拟合还有很好的发展空间。在一些常见的状况下,依据许多孤立的数据很是困难直接肯定它符合哪一种既定函数,然而多项式数据拟合因为可以挑选合适拟合的次数从而达到数据拟合的精度要求,于是具备通用性。由于是经过观察拟合曲线和测试数据点的关系来肯定多项式函数,因此多项式拟合问题能够归结为函数逼近问题。本质上它是由具体的测试数据找到通常规律,能够说这种方法已经趋于成熟。能够预见它在数据拟合领域一定会有大的发展。随着计算机的普遍应用,利用MATLAB进行多项式数据拟合已经成为了避免可缺的步骤。
因为多项式数据拟合是如今全部拟合方法中通用的方法,因此本次设计也研究了不少,将从如下几个方面研究多项式数据拟合:
(1)首先阐述了多项式数据拟合的研究背景以及它的目的。而后讨论了多项式曲线拟合在国内的应用和它之后的发展方向。
(2)讨论了数据曲线拟合的原理。首先提出了拟合模型的概念,它的内容就是在未进行数据拟合以前先进行数学的估算先找出大致的适合该组数据的拟合函数,这里我是经过MATLAB内置的cftool函数来拟合出多项式曲线,来观察为之后的精确数据拟合作下好好的准备。接下来时介绍了多项式曲线拟合的原理,这里讲解了多项式的组成,以及它在数学上的原理。与此同时也提出了polyfit、polyval的概念。最后就是对MATLAB内置的拟合函数poly进行了介绍,这部分比较重要,它是拟合出曲线的关键,它的用法也不少,在相关章节有详细的讲解。
(3)第三章是对MATLAB软件应用的介绍。这个部分是在MATLAB中进行数据拟合的基础,若是连这部分都没搞的很清楚,那么后面的拟合也会很是的艰难,因此此部分是很是重要的。首先对MATLAB作了一个简要的概述,介绍一下MATLAB的用途,以及它的发展。后面介绍了MATLAB的优势,介绍了它在数据处理以及在工程上、科学研究上的优点,对比了一下发现MATLAB是很是强大,并且对于使用者是很是方便的,同时它也是很是利于操做者去使用它完成目的的。接下来就是介绍怎么去使用MATLAB,有很是多的细节值得咱们去学习,在这次毕业论文中使用最多,也是最基础的就是矩阵了。它贯穿在整个论文的使用,书写中,全部的数据操做都是基于此。固然也有一些其余的操做,在本地方就不作详细的阐述了,在相关的章节都有详细的讲解。最后就是举了一个简单的例子,来讲明曲线拟合在MATLAB中的应用,以及它在数据拟合工具箱中拟合出的图形。
(4)最后是使用MATLAB作了一个实际的应用。因为要有数据去实验,因此我这里是从国家数据统计网上摘取了国民收入近10年来的数据,这里摘取的数据不是不少,可是已经够我在本次论文中的应用了。经过对这组数据进行多项式数据拟合,找出最适合的多项式函数,能够预测将来几年的数据变化,也能够分析这10年来数据的变化,从而得出一个相对比较和的分析。
因为实际工程中测量出的数据,都是很难找出规律的,因此就换个角度先观察找出数据之间的简单关系从而创建一个模型,从而能使本身对未知的数据有个大致的了解。像这样先组件的模型称为拟合模型。它的优势就是可以使用之前学习的高数的知识来很近似地表达所测数据之间存在的关系。它实际上也就是数据拟合的精度和数学表示式简化程度的一个折中。这个折中的方案,取决于你所测量的数据和实际工做中的须要。当本身创建一个数学模型后,就容易去拟合了,由于经过实验发现拟合的阶次越高,曲线的动荡越大,当有了一个模型以后,就能够在模型阶次附近来拟合曲线,这能够节省不少时间同时还能够增长拟合的精确度。例如,有些简单的数据点能够用一次或者二次多项式拟合出来的,就能够利用数学上的公式计算,先简单的估计出这些多项式的系数,而后再在MATLAB工具箱中进行精确的数据拟合。
在实际工程以及本身的实验数据统计中,进行数据拟合的时候应该选适当的拟合数学上的公式。在通常的状况下,都应该先根据已经提供的数据本身先画出曲线图,而后再分析这些数据点在坐标上的位置再根据画出的曲线图来判断选择合适的拟合数学公式。
在实际工程以及本身的实验数据统计中,对于那些复杂的测量数据咱们没法直接使用 来表示两组数据之间的关系的时候,这时咱们就但愿经过某些科学计算来找到近似的表达式 来表示,并且咱们老是但愿 越简单越好。这样,人们就提出了数据拟合的概念,数据拟合不要求咱们所构造的函数在坐标上经过全部的数据点,只是要求咱们尽量的去逼近它,这样就能很好的反应出数据点之间的通常关系。
若是如今有两组数据 以及 它们间存在着函数关系 ,想用一个表达式 接近于F(x)而且代替它,那么这个函数 取n次多项式就能够。
多项式曲线拟合要求函数的值与平方值之间的平方误差最小,这使得函数很是接近所得到的测试数据,所以下面的方程达到最小值:
这种让误差最小的方法最适合用于此,这是每一个数据分析者所但愿的事情,同时也能准确的反应出所测数据之间的大致趋势。
利用多项式进行数据拟合时,事实上是求一个系数向量,系数向量是一组多项式系数。在Matlab中,利用多项式拟合函数求多项式的系数,而后利用多项式函数计算函数逼近。polyfit的格式能够表述以下:
多项式函数用于评价代数多项式,能够表示以下:
若是x是某一个值时,那么上述公式就是求在该点的值;若是x是向量或者矩阵时,那么就对向量或者矩阵中的每一个值求多项式的值。
为了加深对此的理解,这里作了一个简单的练习,以下:
多项式 ,取 和一个2*3矩阵为自变量计算该多项式的值。程序以下:
>> A=[1,6,0,0,-8]; %4次多项式系数
>> x=1.1; %取自变量为一数值
>> y1=polyval(A,x)
y1 =
1.4501
>> x=[1,1.2,-1;2,-1.8,1.4] %给出一个矩阵x
x =
1.0000 1.2000 -1.0000
2.0000 -1.8000 1.4000
>> y2=polyval(A,x) %分别计算矩阵x中各元素为自变量的多项式之值
y2 =
-1.0000 4.4416 -13.0000
56.0000 -32.4944 12.3056
说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p,x必须是单调的。矩阵s用于生成预测值的偏差估计。
多项式曲线求值函数:
调用格式:
说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值。
使用polyfit函数的选项输出s得出偏差估计Y DELTA。它假设polyfit函数数据输入的偏差是独立正态的,而且方差为常数。则Y DELTA将至少包含50%的预测值。有以下数据:
表1:实例数据
T |
1900 |
1910 |
1920 |
1930 |
1940 |
1950 |
1960 |
1970 |
1980 |
1990 |
2000 |
Y |
76 |
92 |
106 |
123 |
132 |
151 |
179 |
203 |
227 |
250 |
281 |
y与t的经验公式为 ,代码以下:
clear;
clf; %清除当前窗口
clc;
t = 1900:10:2000; %时间t
y = [76 92 106 123 132 151 179 203 227 250 281]; %人口y
plot(t,y,'k*');
hold on;
% figure; %从新开一个图
p1 = polyfit(t,y,2);
plot(t, polyval(p1, t));
axis([1900 2000 0 300]); %图像xy轴范围
disp(char(['y=',poly2str(p1,'t')],['a=',num2str(p1(1)),'b=',num2str(p1(2)),' c=',num2str(p1(3))]));
结果以下:
y= 0.0094289 t^2 - 34.7482 t + 32061.5711
a=0.0094289 b=-34.7482 c=32061.5711
图1 上实例拟合图形
y与t的经验公式为 ,演示代码以下:
clear;
clf; %清除当前窗口
clc;
t = 1900:10:2000; %时间t
y = [76 92 106 123 132 151 179 203 227 250 281]; %人口y
yy = log(y); %指数基尼必需的线性化变形
p2 = polyfit(t,yy,1);
b = p2(1);
a = exp(p2(2));
y2 = a * exp(b*t); %指数拟合函数式
plot(t,y,'rp',t,y2,'k-');
grid off;
xlabel('时间t');
ylabel('人口数(百万)');
title('人口数据');
图2 人口变化拟合图形
讲解plot函数概念以前首先要了解它的语法结构,下面就列出它的语法:
plot(Y)
plot(X1,Y1,)
plot(X1,Y1,LineSpec,)
plot(’PropertyName’,PropertyValue,…)
plot(axes_handle,)
图2若是y是m×n的数组,取m做为x坐标,y中的每一个列元素做为y坐标,画n曲线。若是y是n的1或1,则1∶n是水平坐标,y是坐标表。若是Y是复杂的,图(Y)等于图(实(Y),IMAG(Y))。在其余状况下,坐标数据的虚拟部分被忽略。
情节(X1,Y1,m)。若是x和y都是数组,并按列绘制坐标数据,则它们必须具备相同的大小;若是X和Y中的一个是向量,另外一个是数组,那么相同大小的X和Y对应于许多曲线;若是其中一个X和Y是标量,另外一个是矢量,那么咱们将画一个点沿着垂直的X轴或Y轴是离散的。
图(X1,Y1,LeNEXEC)经过参数LeNEXEC指定曲线的曲线属性,其中包括线条、标记和颜色。绘图函数支持任意图形组的同时绘制。plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2)此时彻底等效于
plot(X1,Y1,LineSpec1)
hlod all
plot(X2,Y2,LineSpec2)
MATLAB中提供的线型属性有:
图3 plot函数线型属性
须要注意的是,当在LineSpec中设置曲线、标识符和颜色的三个属性时,控制序列不受限制,能够省略或部分省略。那就是R。*‘,’,‘R**-R’的形式是等价的,使用红线链接各个节点,每一个节点使用“*”标记。
“PrimeType”,PrimeType设置由情节建立的全部曲线句柄对象的属性。附录中显示了行对象属性和属性值。有关具体设置,请参考如下示例。固然,SET/GET也能够用于设置。
情节指定坐标系统,该坐标系在AxeStHead坐标系中绘制,在未指定时默认为GCA。返回由图建立的全部曲线句柄对象的句柄。每一个曲线对应于一个句柄,若是有n个曲线,h是n乘1个数组。
注意,当同时绘制多个曲线时,若是没有指定曲线属性,则在当前坐标系中按顺序使用ColorOrder和LineStyleOrder两个属性。
默认状况下,MATLAB会在每次调用plot函数时自动将ColorOrder和LineStyleOrder重置为DefaultAxesColorOrder和DefaultAxesLineStyleOrder。咱们能够自定义默认的属性,直到MATLAB关闭。Matlab将在下一次启动时将默认的属性重置为工厂设置(工厂)。集(0,‘DefaultAxesColorOrder’,‘r b g | | | k’,……DefaultAxesLineStyleOrder ',' 。
使用hold all命令能够防止在调用plot函数时自动替换ColorOrder和LineStyleOrder属性。相反,它能够被循环利用。请注意,只保留了屡次绘制的图形(至关于NextPlot),但不能阻止属性重置。此外,咱们能够经过如下四个属性设置标识符的颜色和大小。线宽-指定的行宽。
MarkerEdgeColor——指定标识符的边缘颜色。
MarkerFaceColor——用指定的标识符填充颜色
标记大小-指定标识符的大小
注意,以上四个属性适用于当前坐标系中的全部曲线。
它是一款做用于科学计算领域的数学软件,其软件有交互式的特色,它的运算单元不要具有具体制定的矩阵位数,它是根据IEEE标准计算的。MATLAB主要包括数值计算和符号计算函数,以及绘图函数和编程语言函数。它利用矩阵做为数据运算的基本单元,使MATLAB中的矩阵运算变得很是高效。,它还提供了丰富的内置函数供人们使用,很是的方便快捷。同时MATLAB的绘图能力也是很强的,能够实现各类图形的制做。除了上述说的以外,MATLAB也是一门编程语言,它具有大部分编程语言的特性,并且比其余的编程语言要容易,而且效率更高,可是它的缺点也很明显,便利的内置功能致使了它编译的速度很慢,并且不能脱离MATLAB客户端,这就很不方便了。最后,MATLAB还内置了不少能够直接使用的工具箱,这也是MATLAB的核心功能,为不少计算节省了不少力气。MATLAB曲线拟合完成的方法有两种:函数的形式以及图形界面,这在后面的论文中会有大量的介绍。
MATLAB重要的组件同时也是最方便使用的是它的工具箱其中大多数都具备图形界面。人电脑交互操做,容易学习无障碍,它还包括一个具备相对完整的调优的在线查询和帮助系统尝试系统,能够直接运行而不编译,尤为能够提供及时的偏差和偏差缘由析取,方便简洁。MATLAB是一种用于控制语句、关系函数、数据结构、输入输出和面向对象编程的矩阵/数组语言。员工能够同时在命令窗口中声明语句。输入并执行命令。您还能够运行预编程的M文件。MATLAB具备多种数学运算功能,几乎涉及到全部的工程问题。它能够经过实时的优化和容错来调整,而不是底层的编程语言,这样能够大大减小编程工做量。它有一个很是方便的可视化函数,它能够用图形来表示向量和矩阵。它包括二维和三维可视化、图像处理、动画和渲染。将灯光添加到图形中,颜色和四维数据等。对于有图形处理需求的用户,您能够获得最多伟大的满意度。已经为大多数用户能够访问的领域开发了一组强大的模块和工具包下次使用时,不须要用户本身编写代码,特别适合初学者。除了平常工做此外,熟练还能够实现系统仿真,图形缺失部分的修复工做。它有一个程序扩展系统和特殊的应用程序子例程,这两个子例程都专门用于某种学科并提出了神经网络建模、模糊逻辑分析、信号降噪处理、模糊控
制系统等应用系统设计、小波分析和工程应用系统仿真。
这里主要介绍在完成毕业设计时所用到的有关MATLAB的知识。首先进行的就是对MATLAB界面的认识,在作实验的过程当中用到的最多的就是MATLAB的命令行窗口,能够在里面输入咱们要输入的数据,而且利用MATLAB内置的函数来对咱们输入的数据进行分析。在命令窗口“>>”以后输入咱们想要输入的数据或者是命令,当咱们按下Enter键以后,MATLAB就会解释咱们输入的指令。在进行试验的过程当中,输入的指令都是以向量的形式传达给MATLAB终端,而在MATLAB中向量的表示都是以以下的形式存在:
如上所示,这样的形式是表示一维向量,逗号是用来把这些值分隔开来。若是想要表示多维向量的话,就要在中间加入号,如输入一个2*2的向量,在MATLAB中演示以下:
>> x=[1,2;3,4]
x =
1 2
3 4
>> x=[1,2;3,4];
由上能够看出一个2*2向量已经被表示出来。但是下面的却没有显示结果,这就要提到“;”的做用了,它在MATLAB中,放在一段指令的后面的意思是不显示这段指令所要呈现的效果。
在进行论文书写时,同时在操做MATLAB的过程当中,也要用到“:”它的做用很大,能够节省不少时间,主要的功能就是建立一组数据,而且能够指定从一个值都另外一个值同时还能够在中间加入想要的间隔数,示例以下:
>> x=1:5
x =
1 2 3 4 5
>> x=1:0.5:5
x =
1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000
图4 在MATLAB中应用代码截图
除了以上所说的在命令窗口中的操做,还有一个比较重要的就是MATLAB的工做区,这里记录着全部的变量和结果的内存空间,它和命令窗口同样,不只存在于MATLAB内部,并且能够在MATLAB主界面中能够直接看到。
同时咱们在进行实验的过程当中,当调用到某些函数的时候也会自动的跳出MATLAB图形工具箱,这样就使咱们可以直观地看到数据曲线拟合直接的关系,同时也更利于咱们对数据结果进行分析。
同时为了方便咱们平时编写程序,我通常都是在MATLAB的编辑器中进行编辑,它运行时会保存一个.m文件。同理MATLAB程序能够用两种方式来执行,那就是命令行模式和m文件方式。m文件又分为独立的m文件以及函数m文件。独立的m文件由命令描述行写成以后存储,那么就能够在MATLAB里面单独的调用执行。
MATLAB 软件自带了一个功能很强大的拟合工具箱cftool,它的使用很是的方便并且实现不少类型的线性、非线性曲线拟合。我是在MATLAB R2016a中来演示这工具箱的使用,为后面的仿真作好准备。首先介绍一下,我在MATLAB中调用曲线拟合用的方式是直接在命令行中输入cftool,固然也有其余的方法,这里就不讨论了。下面经过一个实例来加深对此的了解。
首先,在MATLAB输入两个向量,一个是你想要的X坐标的数据,另外一个是Y坐标的数据,输入假设被称为向量X和Y向量,能够看到这两个向量的两个向量,以确保两个向量的元素的数量是一致的,若是不一致。语言没法装入工具箱。例如,输入如下数据:
图5 MATLAB主界面
接下来在命令行中输入“cftool”来开启曲线拟合工具箱,效果以下:
图6 cftool拟合界面
图7 拟合界面选取数据位置
下面介绍曲线拟合cftool中能够选取的函数,这个在上面的界面中选取
图8 拟合界面选取拟合函数
对于拟合或回归类型,每种类型对应的拟合或回归是:
Custom Equations 用户自定义函数
Expotential e指数函数
Fourier 傅立叶函数,含有三角函数
Gaussian 正态分布函数,高斯函数
Interpolant 插值函数,含有线性函数,移动平均等类型的拟合
Polynomial 多项式函数
Power 幂函数
Rational 有理函数
Smooth Spline (光滑插值或者光滑拟合,不太清楚)
Sum of sin functions 正弦函数类
Weibull 威布尔函数
拟合后的结果信息。这将显示在“拟合”对话框的“结果”文本框中。拟合的主要统计信息是通常sin1模型:(函数形式)系数(含95%可信区间)(拟合常数在95%置信区间)
拟合度高:(统计结果)
上交所:(方差)
平方:(决定系数,不知道怎么作)
调整平方:(修正后的断定系数不知道如何修正)。
RMSE:(标准误差)
举个例子:
Linear model Poly4:
Coefficients (with 95% confidence bounds):
p1 = -0.26 (-8.731, 8.211)
p2 = 1.704 (-57.78, 61.19)
p3 = -3.168 (-146.7, 140.4)
p4 = 3.943 (-133.2, 141)
p5 = 0.35 (-41.52, 42.22)
Goodness of fit:
SSE: 0.1429
R-square: 0.9959
Adjusted R-square: 0.9796
RMSE: 0.378
换句话说,若是你想导出这个拟合图像,它是曲线在拟合工具窗口的File菜单下选择Print to Figure,此时弹出一个新的图像。窗口是要导出的图像,它在这个图窗口的File菜单中从新选择export。选择正确的格式(一般是JPEG),选择正确的路径并单击OK。的图片它能够用于像Word这样的编辑环境。要修改图像的性质,例如数据点的大小和颜色,只需单击对象上的右按钮。几乎有可能找到它。此外,程序用于拟合曲线。 n 为选取的方法 进行曲线拟合后计算所获得得值能够将拟合曲线与源曲线画出来:
legend('ydata','fit');
图9 导出拟合图像
多项式曲线拟合出来上面的方法以外,就是先使用polyfit函数求出多项式的系数,而后应用poly拟合出曲线图。直接拟合出你想要的阶次多项式,根据图形来调整多项式的次数让拟合出来的图形劲量的逼近所给的数据点,下面举个例子来讲明此种方法的实现,数据以下:
表二 举例数据
X |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Y |
9.4 |
4.3 |
1.1 |
0.6 |
0.07 |
0.3 |
0.5 |
1.6 |
3.4 |
程序以下:
>> x=1:9;
>> y=[9.4,4.3,1.1,0.6,0.07,0.3,0.5,1.6,3.4];
>> p2=polyfit(x,y,2);
>> p3=polyfit(x,y,3);
>> p4=polyfit(x,y,4);
>> x1=1:0.5:9;
>> y2=polyval(p2,x1);
>> y3=polyval(p3,x1);
>> y4=polyval(p4,x1);
>> plot(x,y,'rp',x1,y2,'--'.x1,y3,'k-.',x1,y4)
图10 代码在MATLAB界面中的截图
拟合图以下:
图11 plot拟合图形
在上面的图中,五角星表明拟合点,(- - -)表明的是二次拟合,(-.-.-)表明的是三次拟合,(----)表明的是四次拟合。经过这次拟合出图分析,阶次越高拟合曲线的震荡就会越大,并且对于这次拟合的数据来看,就这三个阶次的拟合结果,
4次拟合是最逼近原数据点的。这样的分析为之后的应用提供了理论基础,更加利于后面的实验的进行,同时也积累了不少的拟合经验。
这次获取的数据是从中华人民共和国国家统计网站上获取的近10年来的国民总收入指数,国家在此方面进行了公示,以便咱们认识到国家的发展。国民总收入指数,反应了我国居民的生活水平,同时也可以揭示近些年来国家的发展,以及人民的生活水平。经过使用MATLAB多项式曲线拟合来分析这些数据从而获得近些年国民总收入指数的变化趋势,同时也可以得出中国国民总输入指数的将来变化,以此来作以此研究。这次目的也是为了更加深刻的研究基于MATLAB的多项式数据拟合,在实际方面的应用。一方面可以锻炼本身的实际动手能力,同时也为之后的工做打下坚实的基础。为了方便咱们研究如下的表示用7表明2007年其余的以此类推,如下是从国家统计网站上摘取的数据:
表3 国民总收入指数
X |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
Y |
114.7 |
110.1 |
108.5 |
110.3 |
109.0 |
108.6 |
107.1 |
108.3 |
106.4 |
106.7 |
经过使用MTALAB的内置曲线拟合工具箱,可以使咱们先对数据有个大致的认识,为后面的数据拟合作好一个大概的预测。它的使用方法,就是输入咱们获得的数据,而后利用“cftool”引出曲线拟合的工具箱,可以显示出图形 界面,以便咱们观察,分析。
代码以下:
>> x=[7,8,9,10,11,12,13,14,15,16];
>> y=[114.7,110.1,108.5,110.3,109.0,108.6,107.1,108.3,106.4,106.7];
>> cftool
cftool使用多项式曲线拟合出的图形以下:
图11 cftool拟合图形界面
上图选用的是9次多项式,同时也经过本身的观察和分析得出,9次多项式拟合出的图形是比较逼近原数据点的。这个结论只是一个大概的预测,具体的还用在MATLAB用多项式拟合曲线拟合出较多阶次的多项式图形,再来观察哪一个阶次的多项式是最逼近数据点。这种作法给咱们提供了一个大概的多项式模型,这在以前的文章中就有提到过,经过得出这个多项式模型,在这里给咱们提供了一种理论依据,为之后的曲线拟合打下基础。
在这里咱们使用polyfit函数得出指定阶次多项式,而后再利用polyval拟合出得出的多项式的曲线图形,让这些图形显示在同一个坐标中,而后观察这些图形的规律以及找出最接近曲线的拟合曲线。
代码以下:
>> x=[7,8,9,10,11,12,13,14,15,16]; %年份的矩阵数据,7表明的是2017年,其余以此类推
>> y=[114.7,110.1,108.5,110.3,109.0,108.6,107.1,108.3,106.4,106.7];
>> p7=polyfit(x,y,7);
>> p8=polyfit(x,y,8);
>> p9=polyfit(x,y,9);
>> x1=7:0.5:16;
>> y7=polyval(p7,x1);
>> y8=polyval(p8,x1);
>> y9=polyval(p9,x1);
>>plot(x,y,'rp',x1,y7,'k--',x1,y8,'c*-',x1,y9)
图 12 保存.m文件界面
图 13 plot函数拟合界面
上图中的五角星表明的被测数据的点分布,(- - -)黑色的曲线表明的是二次拟合,(*--)蓝色的曲线表明的是8次拟合,其中没有特殊曲线表明的是9次拟合。
从上图中的结果能够看出9次拟合的震荡太大了,没有在数据附近拟合出曲线,很显然它是不适合这组数据的拟合的。而七、8次拟合曲线从上图上看是差很少的,为了计算的方便咱们就选择7次拟合是对这组数据最好的拟合。从上面的这图中,也能够看出多项式曲线拟合的基本规律,那就是阶次越高它的拟合曲线震荡就越大,而曲线也不是拟合曲线通过全部数据点就能够的,也要分析这组数据的分布状况,而后结合图形和数据点的分布,找出最好的拟合阶次,找到最佳的拟合曲线。
经过本次的基于MATLAB的多项式数据拟合方法研究毕业设计,我学到了不少理论知识,尤为是对多项式进行了大量的理论学习,翻阅了大量了数学方面关于多项式的解释,了解了多项式的生成以及原理。同时也详细的学习了MATLAB的使用,以及MTALAB中不少内置的函数和工具箱。以及最后拟合出来的曲线也是我本身比较满意的。
就理论方面,我以为是我此次作毕业设计所缺乏的东西,因此我借阅了大量的图书,以及在网上面查看了大量的文献,最终把本身所须要的总结下来,这让我了解到了大量的知识。主要了解的就是多项式的数学表达以及多项式的原理,尤为是计算多项式偏差这一块我之前都没有接触过,经过此次的毕业论文有了一个深入的了解。
就硬件方面的话就是更加的了解了MATLAB的使用,本身也看了不少这方面的图书,同时也进行了大量的动手实验。其中最令我映像深入的就是plot的使用,一开始仍是没能成功拟合出曲线,再进行了大量的排错以后,找出了问题的来源就是对plot使用不是很熟,因此在本篇文章中进行了详细的说明。还有一些像ployfit、polyval、cftool的原理以及使用也在学习的过程当中掌握。
最后想要说的是,在经过本身大量的学习以及动手实践以后可以作出一次完整的数据拟合实验是很是有成就感的。我不会利用MATLAB的知识只是在这次论文的学习中,在之后的生活工做中我也会使用它去完成不少任务。
[1]彭芳麟,梁颖,刘振兴.在计算物理基础课中用MATLAB培养学生的编程能力[J].大学物理.2013(09)
[2]唐冲,惠辉辉.基于Matlab的高斯曲线拟合求解[J].计算机与数字工程.2013(08)
[3]江海东,费岳军,应岳.使用MATLAB拟合工具箱进行潮汐调和分析[J].海洋技术.2012(03)
[4]赵宝贵. Matlab在数据拟合中的应用[J].科技广场, 2007, 1:145-146.
[5]宋晓霞.基于MATLAB的通用数据拟合方法[J]. 山西大同大学学报(天然科学版),2014,30(4):1-6.
[6]常锦才等.基于正交多项式的数据拟合方法[J].河北理工大学学报(天然科 学 版), 2011, 33(4): 80-84.
[7]白晓煊.基于Matlab的雷达试验数据拟合[J].信息技术.2011(11)
[8]王海鹏,赵莉,王殿生,潘圆圆,孟祥鹏.基于MATLAB的均匀设计实验数据多元非线性最小二乘拟合[J].化学工程与装备. 2010(09)
[9]欧阳明松,徐连民.基于MATLAB的试验数据拟合[J].南昌工程学院学报.2010(04)
[10]胡庆婉.使用MATLAB曲线拟合工具箱作曲线拟合[J].电脑知识与技术.2010(21)
[11]丁士海,韩之俊.基于数据拟合的非线性方法及Matlab解决方案[J].统计与决策.2009(08)
[12]周后卿,徐幼专.MATLAB在《复变函数与积分变换》中的应用[J].电脑知识与技术. 2018(04)
[13]欧阳明松,徐连民.基于MATLAB的试验数据拟合[J].南昌工程学院学报. 2010(04)
[14]CRafael,RG Woods,《Digital Image Using MATLAB》[J]2004,21(84):197-199
[15]RC Gonzalez,RE Woods,SL Eddins,[J]Prentice Hall press,2007
[16]K.C.Toh,M.J.Todd,R.H.TutuncuOptimizationMethodsandSoftware,1999,11(1-4):545-581
[17]J Lofberg,IEEE International Symposium,2005,41(3):284-289
[18]KC Toh,Mj Todd,R H T,Optimization Methods softwares,1999,11(1-4)