1、基于Matlab的数值逼近算法仿真设计与实现摘 要:数值计算方法是计算机及相关专业的重要基础理论之一,是程序设计和软件开发的基础。Matlab是当前最为优秀的科学计算软件之一,也是许多科学领域中分析、应用和开发的基本工具。经过多年的发展,Matlab已经成为一种功能全面的软件,几乎可以解决科学计算中的所有问题。由于其编写简单,代码效率高,Matlab广泛应用于计算机通信、信号处理、数值计算等领域。Matlab是一种面向科学与工程计算的高级语言,它提供了强大的矩阵处理和绘图功能,给出了一个融合计算、可视化和程序设计的交互环境,操作简便。本设计以Matlab为编程语言和开发环境,对数值逼近算法进行
2、编程实现,并进行图形化描述。所有结果表明,采用不同的逼近方法,利用Matlab编程可以简单、有效地实现函数逼近。关键词:Matlab; 函数逼近; 拉格朗日插值; 曲线拟合Abstract:目 录第1章 绪 论1 1.1 背景1 1.1.1 Matlab的发展1 1.1.2 数值逼近2 1.1.3 研究意义3 1.2 论文结构3第2章 MATLAB简介4 2.1 基本功能4 2.2 基本应用5 2.3 系统结构6 2.3.1 MATLAB开发环境6 2.3.2 MATLAB数学函数库7 2.3.3 MATLAB语言7 2.3.4 MATLAB图形处理系统7 2.3.5 MATLAB应用程序接口
3、7 2.4 特点与优势8 2.4.1 特点8 2.4.2 优势8第3章 数值逼近12 3.1 数值拟合12 3.1.1 直线拟合13 3.1.2 曲线拟合15 3.1.3 多项式拟合15 3.2 插值逼近16 3.2.1 定义与发展16 3.2.2 主要内涵16 3.2.3 基本类型17第4章 基于matlab的数值逼近程序设计19 4.1 分段插值19 4.1.1 定义19 4.1.2 分段插值计算20 4.1.3 基于matlab分段插值实现20 4.1.4 小结21 4.2 拉格朗日插值21 4.2.1 线性插值21 4.2.2 二次朗格拉日插值23 4.2.3 n次拉格朗日插值24 4
4、.2.4 拉格朗日计算26 4.2.5 基于matlab的拉格朗日程序设计26 4.2.6 rung(龙格)现象27 4.3 三次样条插值29 4.3.1 定义29 4.3.2 三次样条插值计算30 4.3.3 基于matlab三次样条插值实现31 4.3.4 小结32 4.4 拟合33 4.4.1 定义33 4.4.2 基于matlab的拟合的实现33 4.4.4 小结35 4.5各类逼近方式解决实际问题35第5章 基于matlab的数值逼近程序测试38 5.1 插值逼近程序测试38 5.2 拟合程序测试41 5.3 各种逼近应用42结 论45致 谢46参考文献47第1章 绪 论在工程分析和
5、科学研究中,常需要根据一些测试数据求得自变量和因变量的近似函数关系式来完成其他设计计算。这就要求用简单的函数(z)近似地代替函数厂(z),这种近似代替称为函数逼近,它是计算数学中最基本的概念和方法之一,在图像处理、逆向工程以及测试数据的处理等领域应用得相当广泛。函数逼近的方法包括插值、拟合与逼近,这些算法可以通过C,C+以及Fortran等语言编程实现但是计算过程都比较复杂。Matlab是一种面向科学与工程计算的高级语言,它提供了强大的矩阵处理和绘图功能,给出了一个融合计算、可视化和程序设计的交互环境,操作简便。能高效求解各种复杂工程问题并实现计算结果的可视化。Matlab本身已经包含了一些插
6、值和拟合的函数,能够方便地实现函数逼近。此外,基于Matlab还可以利用神经网络实现任意非线性函数的逼近。这里在介绍上述逼近算法的基础上结合实例阐述了这些方法的具体应用。1.1 背景1.1.1 Matlab的发展MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代
7、表了当今国际科学计算软件的先进水平。20世纪70年代,美国新墨西哥大学计算机科学系主任Cleve Moler为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB。1984年由Little、Moler、Steve Bangert合作成立了的MathWorks公司正式把MATLAB推向市场。到20世纪90年代,MATLAB已成为国际控制界的标准计算软件(如表1-1)。表1-1 matlab的发展版本建造编号发布时间MATLAB 1.0MATLAB 2MATLAB 3MATLAB 3.5MATLAB 4MATLAB 4.2cMATLAB 6.0MATLAB 6.1MATLAB 6.5MA
8、TLAB 6.5.1MATLAB 6.5.2MATLAB 7(本设计使用)MATLAB 7.0.1MATLAB 7.0.4MATLAB 7.10MATLAB 7.11MATLAB 7.12MATLAB 7.13MATLAB 7.14没有编号没有编号没有编号没有编号没有编号R7R12R12.1R13R13SP1R13SP2R14R14SP1R14SP2R2010aR2010bR2011aR2011bR2012a1984198619871990199219941996-1999200020012001200320032004200420052005-2009.9.42010.3.52010.9.3
9、2011.4.82011.9.12012.3.11.1.2 数值逼近有效使用数字计算机求数学问题近似解的方法与过程,以及由相关理论构成的学科。数值计算主要研究如何利用计算机更好的解决各种数学问题,包括连续系统离散化和离散形方程的求解,并考虑误差、收敛性和稳定性等问题。从数学类型分,数值运算的研究领域包括数值逼近、数值微分和数值积分、数值代数、最优化方法、常微分方程数值解法、积分方程数值解法、偏微分方程数值解法、计算几何、计算概率统计等。随着计算机的广泛应用和发展,许多计算领域的问题,如计算物理、计算化学、计算经济学等都可归结为数值计算问题。1.1.3 研究意义数值逼近的方法包括插值、拟合与逼近
10、等,这些算法其实可以通过C,C+以及Fortran等语言编程实现不过用C,C+以及Fortran等实现语言编写相对于Matlab更为复杂从而使程序易错,而Matlab在语言环境来说更为简单,并且在内部程序中自带相当多得函数,是程序的设计变得更为简单。使用Matlab对所编制的逼近程序进行绘图,让得到的结果在图形中进行展示,是我们看到的结果更为清楚明白。1.2 论文结构本文共包括五个章节的内容,内容安排如下:第一章:绪论,本章主要介绍了论文的主要研究工作具体是什么、研究背景概述以及简单描述文的整体结构安排。第二章:MATLAB简介,本章主要介绍了MATLAB的基本功能与基本的应用,并且简述了MA
11、TLAB开发环境、语言等系统机构,特点与优势.第三章:数值逼近,本章主要对数值逼近的方法进行了讲述曲线拟合,插值逼近。第四章:基于matlab的数值逼近程序设计,本章首先介绍了各种插值与拟合的定义,并对各种算法进行举例计算,最后在本章进行了各个算法基于matlab的设计与仿真。第五章:基于matlab的数值逼近算法系统测试及分析,本章主要对基于matlab的数值逼近算法的实际运行过程进行了测试。第2章 MATLAB简介MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算
12、语言和交互式环境,主要包括MATLAB和Simulink两大部分。2.1 基本功能MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,
13、使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C+,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用(如图2-1)。图2-1 Matlab7开发工作界面2.2 基本应用Matlab产品族可以用来进行以下各种工作:1)数值分析2)数值和符号计算3)工程与科学绘图4)控制系统的设计与仿真5)数字图像处理技术6)数字信号处理技术7)通讯系统设计与仿真8)财务与金融工程9)管理与调度优化计算(运筹学)MATLAB 的应用范围非常广,包
14、括信号和图像处理、通讯(如图2-2)、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB 函数集)扩展了MATLAB 环境,以解决这些应用领域内特定类型的问题。图2-2 MATLAB在通讯系统设计与仿真的应用2.3 系统结构MATLAB系统由MATAB开发环境、MATLAB数学函数库、MATLAB语言、MATLAB图形处理系统和MATLAB应用程序接口(API)五大部分构成。2.3.1 MATLAB开发环境MATLAB开发环境是一套方便用户使用的MATLAB函数和文件工具集,其中许多工具是图形化用户接口。它是一个集成的 用户工作空间,
15、允许用户输入输出数据,并提供了M文件的集成编译和调试环境,包括MATLAB桌面、命令窗口、M文件编辑调试器、MATLAB工作空间和在线帮助文档。图2-3 MATLAB开发环境2.3.2 MATLAB数学函数库MATLAB数学函数库包括了大量的计算算法。从基本算法如加法、正弦,到复杂算法如矩阵求逆、快速傅里叶变换等。2.3.3 MATLAB语言MATLAB语言是一种高级的基于矩阵/数组的语言,它有程序流控制、函数、数据结构、输入/输出和面向对象编程等特色。2.3.4 MATLAB图形处理系统图形处理系统使得MATLAB能方便的图形化显示向量和矩阵,而且能对图形添加标注和打印。它包括强大的二维三维
16、图形函数、图像处理和动画显示等函数。2.3.5 MATLAB应用程序接口MATLAB应用程序接口(API)是一个使MATLAB语言能与C、Fortran等其它高级编程语言进行交互的函数库。该函数库的函数通过调用动态链接库(DLL)实现与MATLAB文件的数据交换,其主要功能包括在MATLAB中调用C和Fortran程序,以及在MATLAB与其它应用程序间建立客户、服务器关系。2.4 特点与优势2.4.1 特点1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;2) 具有完备的图形处理功能,实现计算结果和编程的可视化;3) 友好的用户界面及接近数学表达式的自然化语言,使学
17、者易于学习和掌握;4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。2.4.2 优势1. 友好的工作平台编程环境MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,析。其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方
18、便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分。2. 简单易用的程序语言Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。新版本的MATLAB语言是基于最为流行的C+语言基础上的,因此语法特征与C+语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MAT
19、LAB能够深入到科学研究及工程计算各个领域的重要原因。3. 强大的科学计算机数据处理能力MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C+ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵(如图2-4(a)、特征向量(如图2-4(b)、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求
20、解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。 (a)矩阵乘法运算 (b)特征向量运算图2-4 矩阵运算与特征向量运算4. 出色的图形处理功能MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印(如图2-5)。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如
21、二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。图2-5 图形处理功能5.应用广泛的模块集合工具箱MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需
22、要自己编写代码。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。6.实用的程序接口和发布平台新版本的MATLAB可以利用MATLAB编译器和C/C+数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C+
23、代码。允许用户编写可以和MATLAB进行交互的C或C+语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。第3章 数值逼近3.1 数值拟合所谓拟合是指已知某函数的若干离散函数值f1,f2,fn,通过调整该函数中若干待定系数f(1, 2,n),使得该函数与已知点集的差别(最小二乘意义)最小。如果待定函数是
24、线性,就叫线性拟合或者线性回归(主要在统计中),否则叫作非线性拟合或者非线性回归。表达式也可以是分段函数,这种情况下叫作样条拟合。 一组观测结果的数字统计与相应数值组的吻合。形象的说,拟合就是把平面上一系列的点,用一条光滑的曲线连接起来.因为这条曲线有无数种可能,从而有各种拟合方法.拟合的曲线一般可以用函数表示.根据这个函数的不同有不同的拟合名字。插值法是一种用简单函数近似代替较复杂函数的方法,它的近似标准是在插值点处的误差为零。但有时,我们不要求具体某些点的误差为零,而是要求考虑整体的误差限制。对了达到这一目的,就需要引入拟合的方法,所以数据拟合与插值相比:(1)数据拟合-不要求近似 函数过
25、所有的数据点,而要求它反映原函数整体的变化趋势。(2)插值法-在节点处取函数值。实际给出的数据,总有观测误差的,而所求的插值函数要通过所有的节点,这样就会保留全部观测误差的影响,如果不是要求近似函数过所有的数据点,而是要求它反映原函数整的变化趋势,那么就可以用数据拟合的方法得到更简单活用的近似函数。在前面所讨论的各种插值方法中,始假设数据点是精确的,准确的,不可修改的,所要求出的插值曲线必须通过每一个数据点。但在实际工作中由于各随机因素的干扰,所得到的数据往往不同程度存在着误差。因此,插值方法只能适用那些误差可以忽略不记的情况,当误差较大而不能忽略时,又如何通过这些观测数据确定其内在的变化规律
26、呢?本节所介绍的曲线拟合就是解决这一问题的主要方法之一。 3.1.1 直线拟合由给定的一组测定的离散数据(),求自变量和因变量的近似表达式的方法。影响因变量只有一个自变量的数据拟合方法就是直线拟合。直线拟合最常用的近似标准是最小二乘原理,它也是流行的数据处理方法之一。直线拟合步骤如下:(1) 做出给定数据的散点图(近似一条直线)。(2) 设拟合函数为:然后,这里得到的和可能不相同,记它们的差为:称之为误差。在原始数据给定以后,误差只依赖于的选取,因此,可以把误差的大小作为衡量的选取是否优良的主要标志。最小二乘法便是确定“最佳” 参数的方法,也就是要误差的平方和达到最小。(3) 写出误差和表达式
27、:要选择而使得函数最小,可以用数学分析中求极值的方法,即先分别对求偏导,再使偏导等于零,就可得到所谓的正规方程组。(4) 正规方程组:,;整理:(5) 求解正规方程组,得。(6) 确定的具体表达式。例如4-4:已知观测数据如表3-1所示,求它的拟合曲线。xi12345yi44.5688.5表3-1 观测数据解:根据所给数据,在直角坐标下画出数据点,从图3-1中可以看出,各点在一条直线附近,故可取线性函数作为拟合曲线图3-1 坐标数据点附近做直线令将数据带入公式得,解得。因此而得所求拟合曲线为3.1.2 曲线拟合设有一组数据对()求连续变量的一个函数,它在处误差为,使总体误差按某种算法达到最小常
28、用的三种准则是:1 ;(2)使误差的绝对值和最小,即 ;(3)使误差的平方和为最小,即 ;由于准测(1)、(2)含有绝对值不便于处理,通常采用准测(3),并称基于准则(3)来选取拟合曲线的方法,为曲线拟合的最小二乘法。3.1.3 多项式拟合一般而言,所求得的拟合函数可以使不同的函数,其中最简单的是多项式,此时称为多项式拟合,具体定义如下:设有给定的数据(),假设其拟合函数形式为,求系数 ,使得;取最小值称m次多项式为m次最小二乘拟合多项式(或m次最小平方逼近多项式)。特别地,当m=1时,称为线性最小二乘拟合。容易看出是系数的m+1元二次多项式(二次型),所以可以用多元函数求极值的方法求其最小值
29、和最小值。将对求偏导数得到驻点方程组:,即将方程整理,得到:3.2 插值逼近3.2.1 定义与发展定义:在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。插值:用来填充图像变换时像素之间的空隙。发展:早在6世纪,中国的刘焯已将等距二次插值用于天文计算。 17世纪之后,I.牛顿,J.-L.拉格朗日分别讨论了等距和非等距的一般插值公式。在近代,插值法仍然是数据处理和编制函数表的常用工具,又是数值积分、数值微分、非线性方程求根和微分方程数值解法的重要基础,许多求解计算公式都是以
30、插值为基础导出的。3.2.2 主要内涵插值问题的提法是:假定区间a,b上的实质函数f(x)在该区间上 n+1个互不相同点x0,x1xn 处的值是f (x0),f(xn),要求估算f(x)在a,b中某点x*的值。基本思路是,找到一个函数P(x),在x0,x1xn 的节点上与f(x)函数值相同(有时,甚至一阶导数值也相同),用P(x*)的值作为函数f(x*)的近似。 其通常的做法是:在事先选定的一个由简单函数构成的有n+1个参数C0,C1,Cn的函数类(C0,C1,Cn)中求出满足条件P(xi)=f(xi)(i=0,1, n)的函数P(x),并以P()作为f()的估值。此处f(x)称为被插值函数,
31、x0,x1,xn称为插值结(节)点,(C0,C1,Cn)称为插值函数类,上面等式称为插值条件,(C0,Cn)中满足上式的函数称为插值函数,R(x)= f(x)P(x)称为插值余项。当估算点属于包含x0,x1xn的最小闭区间时,相应的插值称为内插,否则称为外插。3.2.3 基本类型1.多项式插值这是最常见的一种函数插值。在一般插值问题中,若选取为n次多项式类,由插值条件可以唯一确定一个n次插值多项式满足上述条件。从几何上看可以理解为:已知平面上n+1个不同点,要寻找一条n次多项式曲线通过这些点。插值多项式一般有两种常见的表达形式,一个是拉格朗日插值多项式,另一个是牛顿插值多项式。2. 埃尔米特插
32、值对于函数f(x),常常不仅知道它在一些点的函数值,而且还知道它在这些点的导数值。这时的插值函数P(x),自然不仅要求在这些点等于f(x)的函数值,而且要求P(x)的导数在这些点也等于f(x)的导数值。这就是埃尔米特插值问题,也称带导数的插值问题。从几何上看,这种插值要寻求的多项式曲线不仅要通过平面上的已知点组,而且在这些点(或者其中一部分)与原曲线“密切”,即它们有相同的斜率。可见埃尔米特插值多项式比起一般多项式插值有较高的光滑逼近要求。3. 分段插值与样条插值为了避免高次插值可能出现的大幅度波动现象,在实际应用中通常采用分段低次插值来提高近似程度,比如可用分段线性插值或分段三次埃尔米特插值
33、来逼近已知函数,但它们的总体光滑性较差。为了克服这一缺点,一种全局化的分段插值方法三次样条插值成为比较理想的工具。 4. 三角函数插值当被插函数是以2为周期的函数时,通常用n阶三角多项式作为插值函数,并通过高斯三角插值表出。5. 辛克插值在抽样信号中我们以使用辛克插值,它可以由样品值完美地重建原始信号。著名的抽样定理表述,对于正确的抽样信号s(t),原始信号可以由抽样值sk进行重建,其公式为: 这里sk代表在时间tk=t0+k*T时的抽样值,T是抽样时间,它的倒数1/T叫做抽样频率。此公式表示,已知在规则分布的区间中的抽样值sk,我们就可以根据辛克函数先测出抽样值,然后将它们相加,这样计算出任
34、意时间t上的值。matlab中使用插值函数第4章 基于matlab的数值逼近程序设计4.1 分段插值我们用高次插值多项式是不妥当的,从数值计算上可解释为高次插值多项式的计算会带来舍入误差的增大,从而引起计算失真。因此,实践上作插值时一般只用一次、二次最多用三次插值多项式。那么如何提高插值精度呢?采用分段插值是一种办法。分段线性插值方法在速度和误差之间取得了比较好的均很,其插值函数具有连续性,但在已知数据点的斜率一般不会改变,因此不是光滑的。分段线性插值方法是matlab一维插值默认的方法。4.1.1 定义设f(x)是定义在a,b上的函数,在a,b上节点a= x0 x1x2xn-1xn=b,的函
35、数值为 y0 , y1 ,y2 ,yn-1 ,yn,若函数j(x)满足条件(1) j(x)在区间a , b上连续;(2) j(x)在每个子区间xi , xi+1(i=0,1,2,n-1)上是次数为m的多项式;则称j(x)是f(x)在a ,b上的分段m次插值多项式,m=1称为分段线性插值;m=2称为分段抛物线插值。由定义, j(x)在每个子区间xi , xi+1(i=0,1,2,n-1)上是一次插值多项式;图4-1 分段线性插值曲线图4.1.2 分段插值计算例4-1:设(-1 x 1);将-1,1 10 等份,用分段线性插值近似计算f(-0.96)。解:插值节点为xi=-1+ i/5 (i=0,
36、1,10),h=1/5因为 -0.96-1,-0.8,取此区间为线性插值区间,其上的插值函数为所以f(-0.96) j(-0.96)=0.042534.1.3 基于matlab分段插值实现Matlab分段插值命令:interp1功能:一维数据插值。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。格式:yi=interp1(x,y,xi) 其中x,y为原始数据点,xi,yi为插值点。由上面的例题基于matlab分段插值程序设计:(1)在工作空间建立名为example1.m的m文件。(2)在m文件中进行程序设计:%对原数据点进行定义x=-1:0.
37、2:1;y=(1+25*x.2).-1%对插值点进行定义x0=-1:2/10:1;y0=(1+25*x0.2).-1y1=interp1(x,y,x0);%进行分段插值%x1=-0.96;%计算f(-0.96)%y2=(1+25*x1.2).-1y2=interp1(x,y,x0)figure%画出分段插值图形%plot(x0,y0,o,x0,y1,-b);legend(原曲线,分段线性插值曲线);4.1.4 小结实际上,上面介绍的分段低次插值,虽然具有计算简便,收敛性有保证,数值稳定性又好且易在计算机上实现等优点,但它却不能保证整条曲线的光滑性,从而不能满足某些工程技术上的要求,从六十年代开
38、始,首先由于航空、造船等工程设计的需要而发展起来的样条插值(spline)方法,既保留了分段低次插值的各种优点,又提高了插值函数的光滑性,在许多领域显得越来越广泛的应用。4.2 拉格朗日插值4.2.1 线性插值图4-2 拉格朗日线性插值;4.2.2 二次朗格拉日插值;4.2.3 n次拉格朗日插值=4.2.4 拉格朗日计算fxif(xi)同理可得:得到:4.2.5 基于matlab的拉格朗日程序设计由于拉格朗日在matlab中没有进行函数定义,所以进行拉格朗日较其他程序的编写稍微复杂。1)在工作空间建立Folder文件夹;2)建立M文件定义lagrange函数:%lagrange.mfuncti
39、on f=lagrange(x,fx,inx)n=length(x);m=length(inx);for i=1:m z=inx(i); s=0.0 for k=1:n p=1.0; for j=1:n if j=k p=p*(z-x(j)/(x(k)-x(j); end end s=s+p*fx(k); end f(i)=s;end3)建立执行m文件:x=-2.00 0.00 1.00 2.00;y=17.00 1.00 2.00 17.00x0=-2:4 /3:2;y0=lagrange(x,y,x0);x1=0.6;y1=lagrange(x,y,x1)figuresubplot(1,2
40、,1)plot(x,y,o,x0,y0,-r)legend(原曲线,三次拉格朗日插值)title(例题)4.2.6 rung(龙格)现象并不是插值多项式的次数越高,插值效果就越好,精度也不一定是随次数的提高而升高,这种现象在上个世纪初由Runge发现,故称runge现象图4-4 不同次数的lagerange插值多项式的比较图Runge现象在matlab中体现:1)建立文件名为lagrange1.m的函数function cy=lagrange(x,y,n,cx)m=length(cx);cy=zeros(m,1);for k=1:n+1 t=ones(m,1); for j=1:n+1 if
41、j=k t=t.*(cx-x(j)./(x(k)-x(j); end end cy=cy+y(k).*t;end2)体现runge现象:for i=1:18x=-5:10/i:5;y=1./(1+x.2);cx=-5:0.0001:5;cy=lagrange1(x,y,i,cx);subplot(6,3,i)plot(cx,cy)axis(-5,5,-0.5,2)hold ont=-5:0.0001:5;y=1./(1+t.2);plot(t,y,r)end4.3 三次样条插值4.3.1 定义设区间a,b上给定一个节点划分a=x0x1xn-1xn=b如果存在正整数k使得a,b上的分段函数s(x
42、)满足如下两条:(1)在a,b上有直到k-1阶连续导数。(2)在每个小区间xi,xi+1上是次数不大于k的多项式。则称分段函数s(x)是以a,b为节点集的k次样条函数。如果函数f(x)在节点x0,x1,.,xn处的函数值为并且关于这个节点集的三次样条函数s(x)满足插值条件:则称这个三次样条函数s(x)为三次样条插值函数。常见边界条件:转角条件:弯矩条件:周期性条件:可知:设,再由,可得:由可得:其中4.3.2 三次样条插值计算例4-3:根据下表建立f(x)的三次样条插值函数。x1245y=f(x)1342分析:表中所列出的是函数对点,首先要把相应的插值函数求出来,再用matlab来求区间1,
43、5上各点的值。求解过程如下:因自然样条插值函数的边界条件为,这里n=3,故确定m0,m1,m2,m3的方程组形式,其中系数,可按如下步骤进行: ;, ;带入矩阵中得到下面的方程组:,又由公式:可知:4.3.3 基于matlab三次样条插值实现Matlab三次样条插值命令:spline功能:命令interp1调用spline。用于生成一系列用于分段多项式操作的函数。格式:yi=interp1(x,y,xi,spline)或者yy=spline(x,y,xx)由上面的例题基于matlab三次样条插值程序设计:1) 建立文件example2.m2) 编写基于matlab三次样条插值程序:%定义原数据点%x=1 2 4 5;y=1 3 4 2;%分别对两个区间进行三次样条插值xx=1:0.5:4;yy=interp1(x,y,xx,spline)%三次样条插值x0=4:0.5:5;y0=interp1(x,y,x0,spline)%三次样条插值figure%画出图形plot(x,y,o,xx,yy,-b,x0,y0);legend(原曲线,1:4三次样条插值,4,5三次样条插值);4.3.4 小结鉴于高次插值不收敛又不稳定的特点,低次插值既具有收敛性又具有稳定性,因此低次值更具有实用价值,但是低次插值的光滑性较差,比如分段线性插值多项式在插值区间中仅具有