基于matlab的数值逼近仿真设计与实现_第1页
基于matlab的数值逼近仿真设计与实现_第2页
基于matlab的数值逼近仿真设计与实现_第3页
基于matlab的数值逼近仿真设计与实现_第4页
基于matlab的数值逼近仿真设计与实现_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Matlab的数值逼近算法仿真设计与实现摘要:数值计算方法是计算机及相关专业的重要基础理论之一,是程序设计和软件开发的基础。Matlab是当前最为优秀的科学计算软件之一,也是许多科学领域中分析、应用和开发的基本工具。经过多年的发展,Matlab已经成为一种功能全面的软件,几乎可以解决科学计算中的所有问题。由于其编写简单,代码效率高,Matlab广泛应用于计算机通信、信号处理、数值计算等领域。Matlab是一种面向科学与工程计算的高级语言,它提供了强大的矩阵处理和绘图功能,给出了一个融合计算、可视化和程序设计的交互环境,操作简便。本设计以Matlab为编程语言和开发环境,对数值逼近算法进行编程实现,并进行图形化描述。所有结果表明,采用不同的逼近方法,利用Matlab编程可以简单、有效地实现函数逼近。关键词:Matlab;函数逼近;拉格朗日插值;曲线拟合DesignandRealizationofnumericalApproximationalgorithmbasedonMatlabAbstract:Numericalcalculationmethodisabasictheoryofprofessionalcomputerandrelated,itisabasicofprogrammingandsoftwaredevelopment.Matlabisoneofthemostoutstandingscientificcalculationsoftware,butalsoismanyscienceanalysis,applicationanddevelopmentofthebasictools.Afteryearsofdevelopment,Matlabhasbecomefullyfunctionalsoftware;itcansolvealmostallproblemsinscientificcomputing.Duetoitssimplepreparation,highefficiency,Matlabiswidelyappliedinthecomputercommunication,signalprocessing,numericalcalculationandotherareas.Matlabisorientedtoscienceandengineeringcalculationofhigh-levellanguage;itprovidesstrongmatrixprocessinganddrawingfunctions,givesafusioncalculation,visualizationandtheprogramdesignoftheinteractiveenvironment,simpleoperation.ThedesignuseMatlabasprogramminglanguageanddevelopmentenvironment,thenumericalapproximationalgorithmforprogramming,andagraphicaldescription.Alltheresultsshowthat,usingdifferentapproximationmethods,theuseofMatlabprogrammingcanbesimple,effectiverealizationoffunctionapproximation.Keywords:Matlab,functionapproximation,Lagrangeinterpolation,curvefitting目录第1章绪论 11.1背景 11.1.1Matlab的发展 11.1.2数值逼近 21.1.3研究意义 31.2论文结构 3第2章MATLAB简介 42.1基本功能 42.2基本应用 52.3系统结构 62.3.1MATLAB开发环境 62.3.2MATLAB数学函数库 72.3.3MATLAB语言 72.3.4MATLAB图形处理系统 72.3.5MATLAB应用程序接口 72.4特点与优势 82.4.1特点 82.4.2优势 8第3章数值逼近 123.1数值拟合 123.1.1直线拟合 133.1.2曲线拟合 153.1.3多项式拟合 153.2插值逼近 163.2.1定义与发展 163.2.2主要内涵 163.2.3基本类型 17第4章基于matlab的数值逼近程序设计 194.1分段插值 194.1.1定义 194.1.2分段插值计算 204.1.3基于matlab分段插值实现 204.1.4小结 214.2拉格朗日插值 214.2.1线性插值 214.2.2二次朗格拉日插值 234.2.3n次拉格朗日插值 244.2.4拉格朗日计算 264.2.5基于matlab的拉格朗日程序设计 264.2.6rung(龙格)现象 274.3三次样条插值 294.3.1定义 294.3.2三次样条插值计算 304.3.3基于matlab三次样条插值实现 314.3.4小结 324.4拟合 334.4.1定义 334.4.2基于matlab的拟合的实现 334.4.4小结 354.5各类逼近方式解决实际问题 35第5章基于matlab的数值逼近程序测试 385.1插值逼近程序测试 385.2拟合程序测试 415.3各种逼近应用 42结论 45致谢 46参考文献 47第1章绪论在工程分析和科学研究中,常需要根据一些测试数据求得自变量和因变量的近似函数关系式.来完成其他设计计算。这就要求用简单的函数(z)近似地代替函数厂(z),这种近似代替称为函数逼近,它是计算数学中最基本的概念和方法之一,在图像处理、逆向工程以及测试数据的处理等领域应用得相当广泛。函数逼近的方法包括插值、拟合与逼近,这些算法可以通过C,C++以及Fortran等语言编程实现.但是计算过程都比较复杂。Matlab是一种面向科学与工程计算的高级语言,它提供了强大的矩阵处理和绘图功能,给出了一个融合计算、可视化和程序设计的交互环境,操作简便。能高效求解各种复杂工程问题并实现计算结果的可视化。Matlab本身已经包含了一些插值和拟合的函数,能够方便地实现函数逼近。此外,基于Matlab还可以利用神经网络实现任意非线性函数的逼近。这里在介绍上述逼近算法的基础上结合实例阐述了这些方法的具体应用。1.1背景1.1.1Matlab的发展MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。20世纪70年代,美国新墨西哥大学计算机科学系主任CleveMoler为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB。1984年由Little、Moler、SteveBangert合作成立了的MathWorks公司正式把MATLAB推向市场。到20世纪90年代,MATLAB已成为国际控制界的标准计算软件(如表1-1)。表1-1matlab的发展版本建造编号发布时间MATLAB1.0MATLAB2MATLAB3MATLAB3.5MATLAB4MATLAB4.2c……MATLAB6.0MATLAB6.1MATLAB6.5MATLAB6.5.1MATLAB6.5.2MATLAB7(本设计使用)MATLAB7.0.1MATLAB7.0.4……MATLAB7.10MATLAB7.11MATLAB7.12MATLAB7.13MATLAB7.14没有编号没有编号没有编号没有编号没有编号R7……R12R12.1R13R13SP1R13SP2R14R14SP1R14SP2……R2010aR2010bR2011aR2011bR2012a1984198619871990199219941996-1999200020012001200320032004200420052005-2009.9.42010.3.52010.9.32011.4.82011.9.12012.3.11.1.2数值逼近有效使用数字计算机求数学问题近似解的方法与过程,以及由相关理论构成的学科。数值计算主要研究如何利用计算机更好的解决各种数学问题,包括连续系统离散化和离散形方程的求解,并考虑误差、收敛性和稳定性等问题。从数学类型分,数值运算的研究领域包括数值逼近、数值微分和数值积分、数值代数、最优化方法、常微分方程数值解法、积分方程数值解法、偏微分方程数值解法、计算几何、计算概率统计等。随着计算机的广泛应用和发展,许多计算领域的问题,如计算物理、计算化学、计算经济学等都可归结为数值计算问题。泛指数学计算问题的近似解法。狭义的理解则专指对函数的逼近,即对于给定的较广泛的函数类F中的函数ƒ=ƒ(x),从较小的子类H中寻求在某种意义下ƒ的一个近似函数h(x),以便于计算和处理。∏.Л.切比雪夫和K.(T.W.)外尔斯特拉斯曾于19世纪中后期做了奠基性工作。函数逼近的主要内容有,对于某些特定的被逼近函数类F与逼近函数类H,讨论逼近的可能性,最佳逼近的存在性、特征、惟一性、误差估计以及算法等。它是现代数值分析的基本组成部分,除自身具有独立学科分支的意义外,还可用于构造数值积分、求函数零点、解微分方程和积分方程的近似方法。1.1.3研究意义数值逼近的方法包括插值、拟合与逼近等,这些算法其实可以通过C,C++以及Fortran等语言编程实现.不过用C,C++以及Fortran等实现语言编写相对于Matlab更为复杂从而使程序易错,而Matlab在语言环境来说更为简单,并且在内部程序中自带相当多得函数,是程序的设计变得更为简单。使用Matlab对所编制的逼近程序进行绘图,让得到的结果在图形中进行展示,是我们看到的结果更为清楚明白。论文结构本文共包括五个章节的内容,内容安排如下:第一章:绪论,本章主要介绍了论文的主要研究工作具体是什么、研究背景概述以及简单描述文的整体结构安排。

第二章:MATLAB简介,本章主要介绍了MATLAB的基本功能与基本的应用,并且简述了MATLAB开发环境、语言等系统机构,特点与优势.第三章:数值逼近,本章主要对数值逼近的方法进行了讲述——曲线拟合,插值逼近。

第四章:基于matlab的数值逼近程序设计,本章首先介绍了各种插值与拟合的定义,并对各种算法进行举例计算,最后在本章进行了各个算法基于matlab的设计与仿真。第五章:基于matlab的数值逼近算法系统测试及分析,本章主要对基于matlab的数值逼近算法的实际运行过程进行了测试。

第2章MATLAB简介MATLAB是矩阵实验室(MatrixLaboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。2.1基本功能MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用(如图2-1)。图2-1Matlab7开发工作界面2.2基本应用Matlab产品族可以用来进行以下各种工作:1)数值分析2)数值和符号计算3)工程与科学绘图4)控制系统的设计与仿真5)数字图像处理技术6)数字信号处理技术7)通讯系统设计与仿真8)财务与金融工程9)管理与调度优化计算(运筹学)MATLAB的应用范围非常广,包括信号和图像处理、通讯(如图2-2)、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。图2-2MATLAB在通讯系统设计与仿真的应用2.3系统结构MATLAB系统由MATAB开发环境、MATLAB数学函数库、MATLAB语言、MATLAB图形处理系统和MATLAB应用程序接口(API)五大部分构成。2.3.1MATLAB开发环境MATLAB开发环境是一套方便用户使用的MATLAB函数和文件工具集,其中许多工具是图形化用户接口。它是一个集成的用户工作空间,允许用户输入输出数据,并提供了M文件的集成编译和调试环境,包括MATLAB桌面、命令窗口、M文件编辑调试器、MATLAB工作空间和在线帮助文档。图2-3MATLAB开发环境2.3.2MATLAB数学函数库MATLAB数学函数库包括了大量的计算算法。从基本算法如加法、正弦,到复杂算法如矩阵求逆、快速傅里叶变换等。2.3.3MATLAB语言MATLAB语言是一种高级的基于矩阵/数组的语言,它有程序流控制、函数、数据结构、输入/输出和面向对象编程等特色。2.3.4MATLAB图形处理系统图形处理系统使得MATLAB能方便的图形化显示向量和矩阵,而且能对图形添加标注和打印。它包括强大的二维三维图形函数、图像处理和动画显示等函数。2.3.5MATLAB应用程序接口MATLAB应用程序接口(API)是一个使MATLAB语言能与C、Fortran等其它高级编程语言进行交互的函数库。该函数库的函数通过调用动态链接库(DLL)实现与MATLAB文件的数据交换,其主要功能包括在MATLAB中调用C和Fortran程序,以及在MATLAB与其它应用程序间建立客户、服务器关系。2.4特点与优势2.4.1特点高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;具有完备的图形处理功能,实现计算结果和编程的可视化;友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等),为用户提供了大量方便实用的处理工具。2.4.2优势1.友好的工作平台编程环境MATLAB由一系列工具组成。这些工具方便用户使用MATLAB的函数和文件,析。其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分。2.简单易用的程序语言Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。强大的科学计算机数据处理能力MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵(如图2-4(a))、特征向量(如图2-4(b))、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。(a)矩阵乘法运算(b)特征向量运算图2-4矩阵运算与特征向量运算出色的图形处理功能MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印(如图2-5)。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。图2-5图形处理功能5.应用广泛的模块集合工具箱MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。6.实用的程序接口和发布平台新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。允许用户编写可以和MATLAB进行交互的C或C++语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。

第3章数值逼近实际问题中碰到的函数是各种各样的。有的表达很复杂,有的甚至不给出数学的表达式,而只是给出了一些离散数据——譬如某些点的函数值和导数值。面对这种情况,一个很自然的想法就是构造某个简单函数作为考察的函数的近似。如果要求近似函数去给定的离散数据,则称之为的逼近函数。泛指数学计算问题的近似解法。狭义的理解则专指对函数的逼近,即对于给定的较广泛的函数类F中的函数ƒ=ƒ(x),从较小的子类H中寻求在某种意义下ƒ的一个近似函数h(x),以便于计算和处理。函数逼近的主要内容有,对于某些特定的被逼近函数类F与逼近函数类H,讨论逼近的可能性,最佳逼近的存在性、特征、惟一性、误差估计以及算法等。它是现代数值分析的基本组成部分,除自身具有独立学科分支的意义外,还可用于构造数值积分、求函数零点、解微分方程和积分方程的近似方法。3.1数值拟合所谓拟合是指已知某函数的若干离散函数值{f1,f2,…,fn},通过调整该函数中若干待定系数f(λ1,λ2,…,λn),使得该函数与已知点集的差别(最小二乘意义)最小。如果待定函数是线性,就叫线性拟合或者线性回归(主要在统计中),否则叫作非线性拟合或者非线性回归。表达式也可以是分段函数,这种情况下叫作样条拟合。一组观测结果的数字统计与相应数值组的吻合。形象的说,拟合就是把平面上一系列的点,用一条光滑的曲线连接起来.因为这条曲线有无数种可能,从而有各种拟合方法.拟合的曲线一般可以用函数表示.根据这个函数的不同有不同的拟合名字。插值法是一种用简单函数近似代替较复杂函数的方法,它的近似标准是在插值点处的误差为零。但有时,我们不要求具体某些点的误差为零,而是要求考虑整体的误差限制。对了达到这一目的,就需要引入拟合的方法,所以数据拟合与插值相比:(1)数据拟合--不要求近似函数过所有的数据点,而要求它反映原函数整体的变化趋势。(2)插值法--在节点处取函数值。实际给出的数据,总有观测误差的,而所求的插值函数要通过所有的节点,这样就会保留全部观测误差的影响,如果不是要求近似函数过所有的数据点,而是要求它反映原函数整的变化趋势,那么就可以用数据拟合的方法得到更简单活用的近似函数。在前面所讨论的各种插值方法中,始假设数据点是精确的,准确的,不可修改的,所要求出的插值曲线必须通过每一个数据点。但在实际工作中由于各随机因素的干扰,所得到的数据往往不同程度存在着误差。因此,插值方法只能适用那些误差可以忽略不记的情况,当误差较大而不能忽略时,又如何通过这些观测数据确定其内在的变化规律呢?本节所介绍的曲线拟合就是解决这一问题的主要方法之一。3.1.1直线拟合由给定的一组测定的离散数据(),求自变量和因变量的近似表达式的方法。影响因变量只有一个自变量的数据拟合方法就是直线拟合。直线拟合最常用的近似标准是最小二乘原理,它也是流行的数据处理方法之一。直线拟合步骤如下:(1)做出给定数据的散点图(近似一条直线)。(2)设拟合函数为:然后,这里得到的和可能不相同,记它们的差为:称之为误差。在原始数据给定以后,误差只依赖于的选取,因此,可以把误差的大小作为衡量的选取是否优良的主要标志。最小二乘法便是确定“最佳”参数的方法,也就是要误差的平方和达到最小。(3)写出误差和表达式:要选择而使得函数最小,可以用数学分析中求极值的方法,即先分别对求偏导,再使偏导等于零,就可得到所谓的正规方程组。(4)正规方程组:,;整理:(5)求解正规方程组,得。(6)确定的具体表达式。例如4-4:已知观测数据如表3-1所示,求它的拟合曲线。xi12345yi44.5688.5表3-1观测数据解:根据所给数据,在直角坐标下画出数据点,从图3-1中可以看出,各点在一条直线附近,故可取线性函数作为拟合曲线图3-1坐标数据点附近做直线令将数据带入公式得,解得。因此而得所求拟合曲线为3.1.2曲线拟合设有一组数据对()求连续变量的一个函数,它在处误差为,使总体误差按某种算法达到最小.常用的三种准则是:(1)使得误差的最大的绝对值为最小,即;(2)使误差的绝对值和最小,即;(3)使误差的平方和为最小,即;由于准测(1)、(2)含有绝对值不便于处理,通常采用准测(3),并称基于准则(3)来选取拟合曲线的方法,为曲线拟合的最小二乘法。3.1.3多项式拟合一般而言,所求得的拟合函数可以使不同的函数,其中最简单的是多项式,此时称为多项式拟合,具体定义如下:设有给定的数据(),假设其拟合函数形式为,求系数,使得;取最小值.称m次多项式为m次最小二乘拟合多项式(或m次最小平方逼近多项式)。特别地,当m=1时,称为线性最小二乘拟合。容易看出是系数的m+1元二次多项式(二次型),所以可以用多元函数求极值的方法求其最小值和最小值。将对求偏导数得到驻点方程组:,即将方程整理,得到:3.2插值逼近3.2.1定义与发展定义:在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。插值:用来填充图像变换时像素之间的空隙。发展:早在6世纪,中国的刘焯已将等距二次插值用于天文计算。17世纪之后,I.牛顿,J.-L.拉格朗日分别讨论了等距和非等距的一般插值公式。在近代,插值法仍然是数据处理和编制函数表的常用工具,又是数值积分、数值微分、非线性方程求根和微分方程数值解法的重要基础,许多求解计算公式都是以插值为基础导出的。3.2.2主要内涵插值问题的提法是:假定区间[a,b]上的实质函数f(x)在该区间上n+1个互不相同点x0,x1……xn处的值是f(x0),……f(xn),要求估算f(x)在[a,b]中某点x*的值。基本思路是,找到一个函数P(x),在x0,x1……xn的节点上与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)称为被插值函数,x0,x1,……xn称为插值结(节)点,Φ(C0,C1,……Cn)称为插值函数类,上面等式称为插值条件,Φ(C0,……Cn)中满足上式的函数称为插值函数,R(x)=f(x)-P(x)称为插值余项。当估算点属于包含x0,x1……xn的最小闭区间时,相应的插值称为内插,否则称为外插。3.2.3基本类型1.多项式插值这是最常见的一种函数插值。在一般插值问题中,若选取Φ为n次多项式类,由插值条件可以唯一确定一个n次插值多项式满足上述条件。从几何上看可以理解为:已知平面上n+1个不同点,要寻找一条n次多项式曲线通过这些点。插值多项式一般有两种常见的表达形式,一个是拉格朗日插值多项式,另一个是牛顿插值多项式。埃尔米特插值对于函数f(x),常常不仅知道它在一些点的函数值,而且还知道它在这些点的导数值。这时的插值函数P(x),自然不仅要求在这些点等于f(x)的函数值,而且要求P(x)的导数在这些点也等于f(x)的导数值。这就是埃尔米特插值问题,也称带导数的插值问题。从几何上看,这种插值要寻求的多项式曲线不仅要通过平面上的已知点组,而且在这些点(或者其中一部分)与原曲线“密切”,即它们有相同的斜率。可见埃尔米特插值多项式比起一般多项式插值有较高的光滑逼近要求。分段插值与样条插值为了避免高次插值可能出现的大幅度波动现象,在实际应用中通常采用分段低次插值来提高近似程度,比如可用分段线性插值或分段三次埃尔米特插值来逼近已知函数,但它们的总体光滑性较差。为了克服这一缺点,一种全局化的分段插值方法——三次样条插值成为比较理想的工具。4.三角函数插值当被插函数是以2π为周期的函数时,通常用n阶三角多项式作为插值函数,并通过高斯三角插值表出。5.辛克插值在抽样信号中我们以使用辛克插值,它可以由样品值完美地重建原始信号。著名的抽样定理表述,对于正确的抽样信号s(t),原始信号可以由抽样值sk进行重建,其公式为:这里sk代表在时间tk=t0+k*T时的抽样值,T是抽样时间,它的倒数1/T叫做抽样频率。此公式表示,已知在规则分布的区间中的抽样值sk,我们就可以根据辛克函数先测出抽样值,然后将它们相加,这样计算出任意时间t上的值。matlab中使用插值函数

第4章基于matlab的数值逼近程序设计4.1分段插值我们用高次插值多项式是不妥当的,从数值计算上可解释为高次插值多项式的计算会带来舍入误差的增大,从而引起计算失真。因此,实践上作插值时一般只用一次、二次最多用三次插值多项式。那么如何提高插值精度呢?采用分段插值是一种办法。分段线性插值方法在速度和误差之间取得了比较好的均很,其插值函数具有连续性,但在已知数据点的斜率一般不会改变,因此不是光滑的。分段线性插值方法是matlab一维插值默认的方法。4.1.1定义设f(x)是定义在[a,b]上的函数,在[a,b]上节点a=x0<x1<x2<…<xn-1<xn=b,的函数值为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,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.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小结实际上,上面介绍的分段低次插值,虽然具有计算简便,收敛性有保证,数值稳定性又好且易在计算机上实现等优点,但它却不能保证整条曲线的光滑性,从而不能满足某些工程技术上的要求,从六十年代开始,首先由于航空、造船等工程设计的需要而发展起来的样条插值(spline)方法,既保留了分段低次插值的各种优点,又提高了插值函数的光滑性,在许多领域显得越来越广泛的应用。4.2拉格朗日插值4.2.1线性插值给定两个插值点其中,怎样做通过这两点的一次插值函数?过两点作一条直线,这条直线就是通过这两点的一次多项式插值函数,简称线性插值(如图4-2)。图4-2拉格朗日线性插值在初等数学中,可用两点式、点斜式或截距式构造通过两点的一条直线。下面先用待定系数法构造插值直线。设直线方程为,将分别代入直线方程得:当时,因,所以方程组有解,而且解是唯一的。这也表明,平面上两个点,有且仅有一条直线通过。用待定系数法构造插值多项式的方法简单直观,容易看到解的存在性和惟一性,但要解一个方程组才能得到插值函数的系数,因工作量较大和不便向高阶推广,故这种构造方法通常不宜采用。当时,若用两点式表示这条直线,则有:;这种形式称为拉格朗日插值多项式。记;,称为插值基函数,计算,的值,易见在拉格朗日插值多项式中可将看做两条直线,的叠加,并可看到两个插值点的作用和地位都是平等的。拉格朗日插值多项式型式免除了解方程组的计算,易于向高次插值多项式型式推广。4.2.2二次朗格拉日插值给定三个插值点,,其中互不相等,怎样构造函数的二次的(抛物线)插值多项式?平面上的三个点能确定一条次曲线,如图4-3所示。图4-3三个插值点的二次插值仿造线性插值的拉格朗日插值,即用插值基函数的方法构造插值多项式。设:每个基函数是一个二次函数,对来说,要求是它的零点,因此可设:同理,也相对应的形式,得:将代入,得:;同理将代入得到和的值,以及和的表达式。也容易验证:4.2.3n次拉格朗日插值给定平面上两个互不相同的插值点,,有且仅有一条通过这两点的直线;给定平面上三个互不相同的插值点,,有且仅有一条通过这三个点的二次曲线;给定平面上,个互不相同的插值点,,互不相同是指互不相等,是否有且仅有一条不高于次的插值多项式曲线,如果曲线存在,那么如何简单地作出这条次插值多项式曲线?分析:次多项式,它完全由个系数决定。若曲线通过给定平面上个互不相同的插值点,,则应满足,事实上一个插值点就是一个插值条件。将,依次代入中得到线性方程组:方程组的系数行列式是范德蒙(Vandermonde)行列式:当互异时,,所以方程组的解存在且惟一。通过求解方程组得到插值多项式,因其计算量太大而不可取,仿照线性以及二次插值多项式的拉格朗日形式,我们可构造次拉格朗日插值多项式。对于个互不相同的插值节点,由次插值多项式的惟一性,可对每个插值节点作出相应的次插值基函数。要求是的零点,因此可设由=将代入,得到作其组合:那么不高于次且满足,故就是关于插值点的插值多项式,这种插值形式称为拉格朗日插值多项式。称为关于节点的拉格朗日基函数。4.2.4拉格朗日计算例4-2给出下列插值节点数据,做三次拉格朗日插值多项式,并计算f(0.6)。xi-2.000.001.002.00f(xi)17.001.002.0017.00解:拉格朗日插值基函数为:同理可得:得到:4.2.5基于matlab的拉格朗日程序设计由于拉格朗日在matlab中没有进行函数定义,所以进行拉格朗日较其他程序的编写稍微复杂。1)在工作空间建立Folder文件夹;2)建立M文件定义lagrange函数:%%lagrange.mfunctionf=lagrange(x,fx,inx)n=length(x);m=length(inx);fori=1:mz=inx(i);s=0.0fork=1:np=1.0;forj=1:nifj~=kp=p*(z-x(j))/(x(k)-x(j));endends=s+p*fx(k);endf(i)=s;end3)建立执行m文件:x=[-2.000.001.002.00];y=[17.001.002.0017.00]x0=[-2:4/3:2];y0=lagrange(x,y,x0);x1=0.6;y1=lagrange(x,y,x1)figuresubplot(1,2,1)plot(x,y,'o',x0,y0,'--r')legend('原曲线','三次拉格朗日插值')title('例题')4.2.6rung(龙格)现象并不是插值多项式的次数越高,插值效果就越好,精度也不一定是随次数的提高而升高,这种现象在上个世纪初由Runge发现,故称runge现象图4-4不同次数的lagerange插值多项式的比较图Runge现象在matlab中体现:1)建立文件名为lagrange1.m的函数functioncy=lagrange(x,y,n,cx)m=length(cx);cy=zeros(m,1);fork=1:n+1t=ones(m,1);forj=1:n+1ifj~=kt=t.*(cx-x(j))./(x(k)-x(j));endendcy=cy+y(k).*t;end2)体现runge现象:fori=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])holdont=-5:0.0001:5;y=1./(1+t.^2);plot(t,y,'r')end4.3三次样条插值4.3.1定义设区间[a,b]上给定一个节点划分a=x0<x1<……<xn-1<xn=b如果存在正整数k使得[a,b]上的分段函数s(x)满足如下两条: (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,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三次样条插值程序设计:建立文件example2.m编写基于matlab三次样条插值程序:%%%%定义原数据点%%x=[1245];y=[1342];%%%%分别对两个区间进行三次样条插值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小结鉴于高次插值不收敛又不稳定的特点,低次插值既具有收敛性又具有稳定性,因此低次值更具有实用价值,但是低次插值的光滑性较差,比如分段线性插值多项式在插值区间中仅具有连续性,在插值节点处有棱角,一阶导数不存在;分段三次Hermite插值多项式在插值区间中仅具有一阶导数即一阶光滑性但不具备二阶光滑性,不能满足某些实际应用比如汽车、轮船、飞机等的外形中流线形设计。样条是在二十世纪初期经常用于图样设计的一种富有弹性的细长条,多个样条互相弯曲连接后沿其边缘画出的曲线就是三次样条曲线。后来数学上对其进行了抽象,定义了m次样条函数,并成为数值逼近的重要研究分枝,进一步扩大了样条函数的应用范围。4.4拟合4.4.1定义推求一个解析函数y=f(x)使其通过或近似通过有限序列的资料点(xi,yi),通常用多项式函数通过最小二乘法求得此拟合函数。曲线直线化是曲线拟合的重要手段之一。对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按最小二乘法原理求出变换后变量的直线方程,在实际工作中常利用此直线方程绘制资料的标准工作曲线,同时根据需要可将此直线方程还原为曲线方程,实现对资料的曲线拟合。4.4.2基于matlab的拟合的实现直线拟合:1)建立文件example3.m2)编写直线拟合程序。x=[12345];y=[44.5688.5]a1=polyfit(x,y,1)y1=polyval(a1,x);%%%%%%%%%%%%%%%%%拟合结束%%%开始构图对比%%%%%%%%%%%%%%%%%%%%figureholdonplot(x,y,'.r',x,y1,'-b');legend('原曲线','n=1');title('多项式曲线1次拟合');曲线拟合:1)建立文件a.m2)编写多项式曲线拟合程序%%%%%%%%%%%%%%%%%%对多项式y=1/(1+25*x^2)进行多项式曲线拟合%分别进行1次,4次,8次,10次拟合%%%%%%%%%%%%%x=-1:0.001:1;y=(1+25*x.^2).^-1%%%%%%%%%%%%%%%%%进行1次拟合%%%%%%%%%%%%%%%%%a1=polyfit(x,y,1)y1=polyval(a1,x);%%%%%%%%%%%%%%%%%进行4次拟合%%%%%%%%%%%%%%%%%a2=polyfit(x,y,4)y2=polyval(a2,x);%%%%%%%%%%%%%%%%%进行8次拟合%%%%%%%%%%%%%%%%%a3=polyfit(x,y,8)y3=polyval(a3,x);%%%%%%%%%%%%%%%%%进行10次拟合%%%%%%%%%%%%%%%%%a4=polyfit(x,y,10)y4=polyval(a4,x);%%%%%%%%%%%%%%%%%%拟合结束%%%开始构图对比%%%%%%%%%%%%%%%%%%%%figureholdonsubplot(2,2,1);plot(x,y,'.r',x,y1,'-b');legend('原曲线','n=1');title('多项式曲线1次拟合');subplot(2,2,2);plot(x,y,'.r',x,y2,'-b');legend('原曲线','n=4');title('多项式曲线4次拟合');subplot(2,2,3);plot(x,y,'.r',x,y3,'-b');legend('原曲线','n=8');title('多项式曲线8次拟合');subplot(2,2,4);plot(x,y,'.r',x,y4,'-b');legend('原曲线','n=10');title('多项式曲线10次拟合');4.4.4小结1)利用Matlab曲线拟合,可以快速从采样数据逼近待测函数或曲线,将使用者从复杂,繁琐的底层编程中解放出来,给采样数据的处理和加工提供了方便,提高了工作效率。2)大多数CAD软件都只有直线,圆弧绘画功能,对于复杂的非圆弧曲线绘制,一般采用描点式进行人工拟合。精度难以保证。而Matlab曲线拟合能够快速精确地绘制出复杂的非圆曲线。3)曲线拟合较其他方式更为平滑。4.5各类逼近方式解决实际问题机翼下轮廓参数及加工要求:一直机翼下的轮廓上的数据如下:机翼长(x)035791112131415机翼宽(y)01.21.72.02.12.01.81.21.41.6机床加工时,需要x每加0.2时的Y值,试设计出具有光滑度的机翼下轮廓线并画出图形x=[035791112131415];y=[11.21.72.02.12.01.81.21.41.6];%%%原始数据点%%%x0=[0:0.2:15];y0=interp1(x,y,x0)%%%进行分段插值y1=interp1(x,y,x0,'spline')%%%%%进行三次样条插值a2=polyfit(x,y,2)y2=polyval(a2,x0)%%%%%%%进行2次曲线拟合%%a3=polyfit(x,y,6)y3=polyval(a3,x0);%%%进行6次曲线拟合%%%y4=lagrange(x,y,x0);%%%%进行拉格朗日插值%%%%%%%%%进行绘图%%%subplot(2,3,1);plot(x,y,'.r',x0,y0,'-b');legend('原曲线','分段插值');subplot(2,3,2);plot(x,y,'.r',x0,y1,'-b');legend('原曲线','三次样条插值');subplot(2,3,3);plot(x,y,'.r',x0,y2,'-b');legend('原曲线','2次曲线拟合');subplot(2,3,4);plot(x,y,'.r',x0,y3,'-b');legend('原曲线','6次曲线拟合');subplot(2,3,5);plot(x,y,'.r',x0,y4,'-b');legend('原曲线','拉格朗日插值');24小时内每两小时检测一次气温数据如下。时间024681012141618202224气温129910182428272520181513试设计出气温走势图,并且计算出中午一点的温度。x=0:2:24;y=[129910182428272520181513];x1=13;y1=interp1(x,y,x1)y2=interp1(x,y,x1,'pchip')y3=interp1(x,y,x1,'spline')x2=0:1/3600:24;y4=interp1(x,y,x2);y5=interp1(x,y,x2,'pchip');y6=interp1(x,y,x2,'spline');figuresubplot(2,2,1);plot(x,y,'o',x2,y4,'-');title('24小时天气变化');legend('原曲线','分段线性插值曲线');subplot(2,2,2);plot(x,y,'o',x2,y5,'-');title('24小时天气变化');legend('原曲线','三次Hermite插值曲线');subplot(2,2,3);plot(x,y,'o',x2,y6,'-');title('24小时天气变化');legend('原曲线','三次样条插值曲线');

第5章基于matlab的数值逼近程序测试程序测试是系统开发过程中一个重要的环节,当程序正常运行后,就可以保证程序对数值进行正确以及快速的运算,并同时解决实际的问题。测试的目的是发现软件的错误和问题,及时恰当的进行纠正和完善。5.1插值逼近程序测试1.分段线性插值:设(-1≤x≤1),将[-1,1]10等份并进行分段线性插值(如图5-1)。图5-1分段线性插值曲线图用分段线性插值近似计算f(-0.96)(如图5-2)。图5-2f(-0.96)结果2.拉格朗日插值:给出下列插值节点数据xi-2.000.001.002.00f(xi)17.001.002.0017.00做出原数据点以及做三次拉格朗日插值(如图5-3)。图5-3拉格朗日插值图并且计算出f(0.6)的值(如图5-4)。图5-4f(0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论