• 基于MATLAB的多项式数据拟合方法研究-毕业论文


    摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识。接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识。介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立。具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了MATLAB的具体构造和曲线拟合工具。最后就是利用MATLAB中的plotfit函数对测量到的数据进行多项式拟合,并给出多项式曲线拟合图形,并对测试的结果进行总结,得出多项式曲线拟合的最佳拟合方法。

     https://www.cnblogs.com/caicairui/p/9225761.html

    关键词:多项式,曲线拟合,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.

     

    Keywordspolynomial,Curve fitting,MATLAB,The measurement data

    目 录

    第一章绪论......................................................... 1

    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

      

     

     

     

     

    第一章  绪论

    1.1  多项式数据拟合研究背景及目的

    在实际的工程测量以及做科学研究时,常常会得出一对数据。而当我们研究这些数据时,很难直接得到他们复合的函数,这时我们就要设法去寻找最佳的曲线去尽量的逼近所给的数据点。这些通过数学当然可以解决,但是计算过程太过麻烦。基于此人们提出了基于MATLAB的多项式数据拟合的理论,MATLAB内置非常丰富的函数库以及非常方便使用的曲线拟合工具箱,只需要使用者提供已经有的数据,然后使用MATLAB中的数据拟合工具箱就能简单的完成数据拟合的目的。数据拟合出的多项式函数所画出的曲线逼近所给的数据点在坐标上的位置。这样得出的多项式能够反映出工程和科学研究领域上的规律变化,从而得出大致的物理规律和工程等现象的内在规律。多项式数据拟合的基本原理是:针对所测的数据,在MATLAB中表示出来之后,而在MATLAB中内置了polyfit函数,它可以根据你想拟合的阶次来尽量的逼近所给的数据点,而不同的阶次也有不同的效果,一般的话阶次越高,拟合曲线的振荡也就越大,这就给数据拟合提供了很大的方便。也因为上述所说的原因,在一定程度上,多项式曲线拟合有一定的通用性。在上述的基础上,通过MATLAB的polt函数,能够对曲线进行仿真,然后我们可以通过分析它所给出的图形界面,直观地看出哪一个阶次的多项式更逼近所给的数据点,然后进行分析验证。

    1.2  国内多项式数据拟合发展方向

    在通过近期的学习中以及看了大量的相关书籍后进行分析,基于MATLAB的多项式数据拟合被用在很多实际的工程测量数据、物理实验以及科学研究等一些领域的测试数据分析。研究者们非常希望通过研究这些数据来得出这些数据满足的一般趋势,从而得到非常靠谱的内在规律,从而达到预测和分析的目的。基于MATLAB的数据拟合有很多种方法比如:最小二乘法、多项式法、圆拟合等,我们这里使用的基于MATLAB的多项式数据拟合,因为它可以改变多项式的次数,从而来达到更加逼近测试数据的目的,所以这种方法具有通用性的效果。但是现在由于实际问题的复杂性,数据拟合还有很好的发展空间。在一些常见的情况下,依据许多孤立的数据非常困难直接确定它符合哪种既定函数,然而多项式数据拟合由于能够挑选合适拟合的次数从而达到数据拟合的精度要求,因而具有通用性。因为是通过观察拟合曲线和测试数据点的关系来确定多项式函数,所以多项式拟合问题可以归结为函数逼近问题。本质上它是由具体的测试数据找到一般规律,可以说这种方法已经趋于成熟。可以预见它在数据拟合领域必定会有大的发展。随着计算机的广泛应用,利用MATLAB进行多项式数据拟合已经成为了不可缺的步骤。

    1.3  本课题研究的内容

    由于多项式数据拟合是现在所有拟合方法中通用的方法,所以本次设计也研究了很多,将从以下几个方面研究多项式数据拟合:

    (1)首先阐述了多项式数据拟合的研究背景以及它的目的。然后讨论了多项式曲线拟合在国内的应用和它以后的发展方向。

    (2)讨论了数据曲线拟合的原理。首先提出了拟合模型的概念,它的内容就是在未进行数据拟合之前先进行数学的估算先找出大体的适合该组数据的拟合函数,这里我是通过MATLAB内置的cftool函数来拟合出多项式曲线,来观察为以后的精确数据拟合做下好好的准备。接下来时介绍了多项式曲线拟合的原理,这里讲解了多项式的组成,以及它在数学上的原理。与此同时也提出了polyfit、polyval的概念。最后就是对MATLAB内置的拟合函数poly进行了介绍,这部分比较重要,它是拟合出曲线的关键,它的用法也很多,在相关章节有详细的讲解。

    (3)第三章是对MATLAB软件应用的介绍。这个部分是在MATLAB中进行数据拟合的基础,如果连这部分都没搞的很清楚,那么后面的拟合也会非常的艰难,所以此部分是非常重要的。首先对MATLAB做了一个简要的概述,介绍一下MATLAB的用途,以及它的发展。后面介绍了MATLAB的优点,介绍了它在数据处理以及在工程上、科学研究上的优势,对比了一下发现MATLAB是非常强大,而且对于使用者是非常方便的,同时它也是非常利于操作者去使用它完成目的的。接下来就是介绍怎么去使用MATLAB,有非常多的细节值得我们去学习,在此次毕业论文中使用最多,也是最基础的就是矩阵了。它贯穿在整个论文的使用,书写中,所有的数据操作都是基于此。当然也有一些其他的操作,在本地方就不做详细的阐述了,在相关的章节都有详细的讲解。最后就是举了一个简单的例子,来说明曲线拟合在MATLAB中的应用,以及它在数据拟合工具箱中拟合出的图形。

    (4)最后是使用MATLAB做了一个实际的应用。由于要有数据去实验,所以我这里是从国家数据统计网上摘取了国民收入近10年来的数据,这里摘取的数据不是很多,但是已经够我在本次论文中的应用了。通过对这组数据进行多项式数据拟合,找出最适合的多项式函数,可以预测未来几年的数据变化,也可以分析这10年来数据的变化,从而得出一个相对比较和的分析。

    第二章  数据曲线拟合

    2.1  拟合模型

    由于实际工程中测量出的数据,都是很难找出规律的,所以就换个角度先观察找出数据之间的简单关系从而建立一个模型,从而能使自己对未知的数据有个大体的了解。像这样先组件的模型称为拟合模型。它的优点就是能够使用以前学习的高数的知识来很近似地表达所测数据之间存在的关系。它实际上也就是数据拟合的精度和数学表示式简化程度的一个折中。这个折中的方案,取决于你所测量的数据和实际工作中的需要。当自己建立一个数学模型后,就容易去拟合了,因为通过实验发现拟合的阶次越高,曲线的动荡越大,当有了一个模型之后,就可以在模型阶次附近来拟合曲线,这可以节省很多时间同时还可以增加拟合的精确度。例如,有些简单的数据点可以用一次或者二次多项式拟合出来的,就可以利用数学上的公式计算,先简单的估计出这些多项式的系数,然后再在MATLAB工具箱中进行精确的数据拟合。

    2.2  多项式曲线拟合原理

    在实际工程以及自己的实验数据统计中,进行数据拟合的时候应该选适当的拟合数学上的公式。在一般的情况下,都应该先根据已经提供的数据自己先画出曲线图,然后再分析这些数据点在坐标上的位置再根据画出的曲线图来判断选择合适的拟合数学公式。

    在实际工程以及自己的实验数据统计中,对于那些复杂的测量数据我们无法直接使用 来表示两组数据之间的关系的时候,这时我们就希望通过某些科学计算来找到近似的表达式 来表示,而且我们总是希望 越简单越好。这样,人们就提出了数据拟合的概念,数据拟合不要求我们所构造的函数在坐标上通过所有的数据点,只是要求我们尽可能的去逼近它,这样就能很好的反应出数据点之间的一般关系。

    如果现在有两组数据 以及 它们间存在着函数关系 ,想用一个表达式 接近于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

    2.3  polyfit、polyval、plot函数

     

     

    说明: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——用指定的标识符填充颜色

    标记大小-指定标识符的大小

    注意,以上四个属性适用于当前坐标系中的所有曲线。

     

    第三章  MATLAB

    3.1  MATLAB概述

    它是一款作用于科学计算领域的数学软件,其软件有交互式的特点,它的运算单元不要具备具体制定的矩阵位数,它是根据IEEE标准计算的。MATLAB主要包括数值计算和符号计算函数,以及绘图函数和编程语言函数。它利用矩阵作为数据运算的基本单元,使MATLAB中的矩阵运算变得非常高效。,它还提供了丰富的内置函数供人们使用,非常的方便快捷。同时MATLAB的绘图能力也是很强的,可以实现各种图形的制作。除了上述说的之外,MATLAB也是一门编程语言,它具备大部分编程语言的特性,而且比其他的编程语言要容易,并且效率更高,但是它的缺点也很明显,便利的内置功能导致了它编译的速度很慢,而且不能脱离MATLAB客户端,这就很不方便了。最后,MATLAB还内置了很多可以直接使用的工具箱,这也是MATLAB的核心功能,为很多计算节省了很多力气。MATLAB曲线拟合完成的方法有两种:函数的形式以及图形界面,这在后面的论文中会有大量的介绍。

    3.2  MATLAB的优点

    MATLAB重要的组件同时也是最方便使用的是它的工具箱其中大多数都具有图形界面。人电脑交互操作,容易学习无障碍,它还包括一个具有相对完整的调优的在线查询和帮助系统尝试系统,可以直接运行而不编译,尤其可以提供及时的误差和误差原因析取,方便简洁。MATLAB是一种用于控制语句、关系函数、数据结构、输入输出和面向对象编程的矩阵/数组语言。员工可以同时在命令窗口中声明语句。输入并执行命令。您还可以运行预编程的M文件。MATLAB具有多种数学运算功能,几乎涉及到所有的工程问题。它可以通过实时的优化和容错来调整,而不是底层的编程语言,这样可以大大减少编程工作量。它有一个非常方便的可视化函数,它可以用图形来表示向量和矩阵。它包括二维和三维可视化、图像处理、动画和渲染。将灯光添加到图形中,颜色和四维数据等。对于有图形处理需求的用户,您可以得到最多伟大的满意度。已经为大多数用户可以访问的领域开发了一组强大的模块和工具包下次使用时,不需要用户自己编写代码,特别适合初学者。除了日常工作此外,熟练还可以实现系统仿真,图形缺失部分的修复工作。它有一个程序扩展系统和特殊的应用程序子例程,这两个子例程都专门用于某种学科并提出了神经网络建模、模糊逻辑分析、信号降噪处理、模糊控

    制系统等应用系统设计、小波分析和工程应用系统仿真。

    3.3  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里面单独的调用执行。

    3.4  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 导出拟合图像

    3.5 多项式数据拟合的MATLAB实现

    多项式曲线拟合出来上面的方法之外,就是先使用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次拟合是最逼近原数据点的。这样的分析为以后的应用提供了理论基础,更加利于后面的实验的进行,同时也积累了很多的拟合经验。

     

     

     

     

     

     

     

    第四章  多项式数据拟合的应用

    4.1  获取数据

    此次获取的数据是从中华人民共和国国家统计网站上获取的近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

    4.2  使用数据拟合工具箱获取数据模型

    通过使用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用多项式拟合曲线拟合出较多阶次的多项式图形,再来观察哪个阶次的多项式是最逼近数据点。这种做法给我们提供了一个大概的多项式模型,这在之前的文章中就有提到过,通过得出这个多项式模型,在这里给我们提供了一种理论依据,为以后的曲线拟合打下基础。

    4.3  进行多项式曲线拟合

    在这里我们使用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次拟合的震荡太大了,没有在数据附近拟合出曲线,很显然它是不适合这组数据的拟合的。而7、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)

  • 相关阅读:
    Java集合
    插入排序
    修改button的可点击区域
    这就是工作
    Cocos2dx使用TextField实现输入框
    SVN解决本地版本控制与服务器版本冲突问题
    ParallaxNode视差节点实现远景近景的不同层次移动
    人生最重要的三个领域——健康、财富和爱
    什么是开发框架-- (转载)
    C++函数模版的简单使用
  • 原文地址:https://www.cnblogs.com/sggggr/p/14243653.html
Copyright © 2020-2023  润新知