打印稿数值实验课程指导书2008_第1页
打印稿数值实验课程指导书2008_第2页
打印稿数值实验课程指导书2008_第3页
打印稿数值实验课程指导书2008_第4页
打印稿数值实验课程指导书2008_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、数值分析实验指导书数值分析课程 实验指导书太原科技大学应用科学学院数学系- 37 -目 录前 言 1第一部分 数值实验报告格式1第二部分 数值实验报告范例2第三部分 数值实验 6 数值实验一 6 数值实验二8 数值实验三10 数值实验四12 数值实验五13 数值实验六16 数值实验七17第四部分 MATLAB入门19前 言该实验指导书是数值分析课程的配套数值实验教材。数值分析是理工科大学本科生与硕士研究生的必修课程,学习本课程的最终目的,是用计算机解决科学和工程实际中的数值计算问题,因此熟练地在计算机上实现算法是必备的基本技能。数值实验是数值分析课程中不可缺少的部分,利用计算机进行数值实验,以

2、消化巩固所学的内容,增加对算法的可靠性、收敛性、稳定性及效率的感性认识,体会和重视算法在计算机上实验时可能出现的问题。学生通过选择算法、编写程序、分析数值结果、写数值实验报告等环节的综合训练,逐步掌握数值实验的方法和技巧,获得各方面的数值计算经验,培养学生运用所学算法解决实际问题和进行理论分析的能力。该实验指导书由王希云、刘素梅、王欣洁、李晓峰等老师编写。第一部分 数值实验报告格式一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下:一、实验名称实验者可根据报告形式

3、需要适当写出。二、实验目的及要求首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出。三、算法描述(实验原理与基础理论)数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出。四、实验内容实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备。五、程序流程图画出程序实现过程的流程图,以便更好的对程序执行的过程有清楚的认识,在程序调试过程中更容易发现问题。六、实验结果实验结果应包括实验的原始数据、中间结果及实验的最终

4、结果,复杂的结果可以用表格形式列出,较为简单的结果可以与实验结果分析合并出现。七、实验结果分析(对算法的理解与分析,包括改进与建议)实验结果分析是数值实验的重要环节,只有对实验结果认真分析,才能对实验目的、实验方法进一步理解,对实验的重要性充分认识,明确数值分析的实用范围及其优缺点。第二部分 数值实验报告范例为了更好地做好数值实验并写出规范的数值实验报告,下面给出一简单范例供读者参考。数值实验报告一、实验名称误差传播与算法稳定性二、实验目的1理解数值计算稳定性的概念。2了解数值计算方法的必要性。3体会数值计算的收敛性与收敛速度。三、实验内容计算,四、算法描述 由 ,知 则 可得递推关系 1 ,

5、 2 , 下面分别以1,2递推关系求解 方案1 , 当时,1.1 , 递推公式为 (1) 方案2 , 当时, 则 即取递推初值 递推公式为 (2)取递推公式(1)中的初值 ,得 取递推公式(2)中的初值 ,得 五、程序流程图由于实验方案明显、简单,实现步骤及流程图省略。六、实验结果计算结果如下:n0123456789100.0953100.0469000.0310000.0233330.0166670.033333-0.1666671.8095240.0953100.0468980.0310180.0231530.0184650.0153530.0131380.0114810.0101880.

6、0092320.008678七、实验结果分析由递推公式(1)知当时,应当为精确解,递推公式的每一步都没有误差的取舍,但计算结果 ,出现负值。由此看出,当较大时,用递推公式(1)中的近似是不正确的。主要原因是初值不是精确值,设有误差,由递推公式(1)知 则有误差随的增大而迅速增加,增加到的倍。由此可见,递推公式计算的误差不仅取决于初值的误差,公式的精确性,还依赖于误差的传递即递推计算的稳定性。由递推公式(2)知 ,为估计值,并不精确,有,而由 得 误差随递推公式逐步缩小。综上所述,在递推计算中,数值计算方法是非常重要的,误差估计、误差传播及递推计算的稳定性都会直接影响递推结果。第三部分 数值实验

7、本部分列出了七个数值实验类型,每个数值实验都应在计算机上实现或演示,由实验者独立编程实现。要求:(1) 用MATLAB语言或其他算法语言编程,使之尽量具有通用性。(2) 上机前充分准备,复习有关算法,画出程序流程图。(3) 完成实验后写出实验报告。(4) 编程语言的种类、运行环境及程序清单以附录形式给出。以下分别列出七个数值实验的内容。数值实验一1 误差传播与算法稳定性实验目的:体会稳定性在选择算法中的地位。误差扩张的算法是不稳定的,是我们所不期望的;误差衰竭的算法是稳定的,是我们努力寻求的,这是贯穿本课程的目标。实验内容:计算 算法一: ,算法二: ,实验要求:(1) 分别用算法一、算法二采

8、用6位有效数字计算,请判断哪种算法能给出更精确的结果。(2) 请从理论上证明你实验得出的结果,解释实验的结果。设算法一中的计算误差为,由递推计算到的误差为;算法二中的计算误差为,由向前递推计算到()的误差为。如果在上述两种算法中都假定后面的计算不再引入其他误差,试给出与的关系和与关系。(3) 算法一中通常会很小,当n增大时,的变化趋势如何?算法二中通常相对比较大,当n减小时,误差又是如何传播的?即比较两个算法,当某一步产生误差后,该误差对后面的影响是衰减还是扩张的。(4) 通过理论分析与计算实验,针对两个算法的稳定性,给出你的结论。2 不同方案收敛速度的比较实验目的:通过实验体会数值计算中算法

9、选择的重要地位。实验内容:三种求2的算法比较。方案一:利用级数, 设 ,则方案二:对上述,按生成新数列,则方案三:利用级数 设,则实验要求:分别用三种方案求出的近似值,要求,观察比较三种计算方案的收敛速度。在MATLAB命令窗口输入log(2)求解,并与三种方案计算的结果进行比较。数值实验二1. 解线性方程组的列主元素高斯消去法和LU分解法实验目的:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。实验内容:解下列两个线性方程组(1) (2) 实验要求:(1) 用你熟悉的算法语言编写程序用列主元高斯消去法和LU分解求解上述

10、两个方程组,输出Ax=b中矩阵A及向量b, A=LU分解的L及U,detA及解向量x.(2) 将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x及detA,并与(1)中结果比较。(3) 将方程组(2)中的2.099999改为2.1,5.900001改为5.9,用列主元高斯消去法求解变换后的方程组,输出解向量x及detA,并与(1)中的结果比较。(4)用MATLAB的内部函数inv求出系数矩阵的逆矩阵,再输入命令x=inv(A)*b,即可求出上述各个方程组的解,并与列主元高斯消去法和LU分解法求出的解进行比较,

11、体会选主元的方法具有良好的数值稳定性。用MATLAB的内部函数det求出系数行列式的值,并与(1)、(2)、(3)中输出的系数行列式的值进行比较。2. 研究解线性方程组迭代法收敛速度实验目的:认识迭代法收敛的含义以及迭代法初值和方程组系数矩阵性质对收敛速度的影响。实验内容:用迭代法求解,其中为五对角矩阵实验要求:(1)选取不同的初始向量X及右端向量b,给定迭代误差要求,用Jacobi迭代法和Gauss-Seidel迭代法求解,观察得到的序列是否收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。(2)用SOR迭代法求上述方程组的解,松驰系数取的不同值,在时停止迭代,记录迭代次数,分析计算结

12、果与松驰系数的关系并得出你的结论。(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵,再输入命令x=inv(A)*b,即可求出上述各个方程组的解,并与上述方法求出的解进行比较。3病态线性方程组的求解 实验目的:通过实验体会病态线性方程组的性态,了解求解病态线性方程组的方法。实验内容:考虑方程组的求解,其中系数矩阵为Hilbert阵, 这是一个著名的病态问题。通过首先给定解(例如取各个分量均为1)再计算出右端的办法给出确定的问题。实验要求: (1) 选择问题的维数为6,分别用列主元Gauss消去法、Jacobi迭代法、Gauss-Seidel迭代法和SOR迭代法求解方程组,其各自的结果如何

13、?将计算结果与问题的解比较,结论如何?(2) 逐步增大问题的维数,仍然用上述方法来解它们,计算的结果如何?计算的结果说明了什么?分析产生结果的原因。(3) 讨论病态方程组的解法,并求解维数为6、10、100的上述方程组。数值实验三1 矩阵特征值的求法实验目的:通过实验进一步熟悉掌握求矩阵特征值的各种方法的使用与比较。实验内容:给定矩阵 实验要求: (1) 分别用幂法、反幂法、雅可比方法编写程序求矩阵A、B、C的按模最大特征值、按模最小特征值、全部特征值(要求误差10)。(2) 用MATLAB的内部函数eig求矩阵A、B、C的全部特征值,并与(1)的结果比较。2 用QR算法求矩阵的特征值实验目的

14、:通过实验进一步熟悉掌握求矩阵特征值的QR方法及原理。实验内容:给定矩阵 , 实验要求:(1) 根据QR算法原理编写程序求矩阵及矩阵的全部特征值(要求误差10)。(2) 直接用MATLAB的内部函数eig求矩阵及矩阵的全部特征值,并与(1)的结果比较。数值实验四1迭代函数对收敛性的影响实验目的:初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,知道当迭代函数满足什么条件时,迭代法收敛。实验内容:用简单迭代法求方程 的根。方案一: 化为等价方程 方案二: 化为等价方程 实验要求:(1)分别对方案一、方案二取初值,迭代10次,观察其计算值,并加以分析。(2)用MATLAB内部函

15、数solve直接求出方程的所有根,并与(1)的结果进行比较。2. 初值的选取对迭代法的影响实验目的:通过具体的数值实验,体会选取不同的初值对同一迭代法的影响。实验内容:用牛顿迭代法求方程 在=1.5附近的根。实验要求:(1)对牛顿迭代公式: ,编写程序进行实验,分别取,迭代10次,观察比较其计算值,并分析原因。(2)用MATLAB内部函数solve直接求出方程的所有根,并与(1)的结果进行比较。3 收敛性与收敛速度的比较实验目的:通过用不同迭代法解同一非线性方程,比较各种方法的收敛性与收敛速度。实验内容:求解非线性方程 的根,准确到10。实验要求:(1) 用你自己设计的一种线性收敛的迭代法求方

16、程的根,然后用斯蒂芬森加速迭代计算。输出迭代初值、各次迭代值及迭代次数。(2)用牛顿迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)的结果比较。(3)用MATLAB内部函数solve直接求出方程的所有根,并与(1)、(2)的结果进行比较。数值实验五1 观察直接利用拉格朗日插值多项式的病态性实验目的:如果直接利用插值多项式的定义,即确定系数,就必须解方程该方程的系数矩阵为范德蒙(Vandermonde)矩阵,它是严重病态的,因此这种方法不能使用。本实验的目的是观察这种病态性。实验内容:取不同的n ,并在0,1区间上取n个等分点,计算上述系数矩阵A的条件数,画出(cond(A))随

17、着n变化的图形。(可利用MATLAB的内部函数cond(A)求出矩阵的条件数,当n取不同的值时,可分别用内部函数plot画出所要求的图形)。2 龙格现象的发生、防止,插值效果的比较实验目的:观察拉格朗日插值的龙格(Runge)现象,探索避免此现象发生的方法,比较插值效果。实验内容:对区间-5,5作10等分,并给出以下三个函数:(1) (2) (3)分别对上述函数计算点上的值,作出插值函数的图形并与的图形比较。实验要求:(1) 编写程序对上述函数作拉格朗日插值,并在MATLAB中用内部函数plot利用插值点绘制函数的图形。(2) 编写程序对上述函数作分段线性插值,并在MATLAB中用内部函数pl

18、ot利用插值点绘制函数的图形。(3) 编写程序对上述函数作三次样条插值,并在MATLAB中用内部函数plot利用插值点绘制函数的图形。(4) 在MATLAB中用内部函数ezplot可直接绘制出以上函数的图形,并与作出的插值函数的图形进行比较。3 牛顿插值法实验目的:学会牛顿插值法,并应用算法于实际问题。实验内容:给定函数 ,已知: 实验要求:(1)用牛顿插值法求4次Newton插值多项式在2.15处的值,以此作为函数的近似值。在MATLAB中用内部函数ezplot绘制出4次Newton插值多项式的函数图形。(2) 在MATLAB中用内部函数ezplot可直接绘制出以上函数的图形,并与作出的4次

19、Newton插值多项式的图形进行比较。4 拟合方式实验实验目的:学会用最小二乘法求拟合数据的多项式,并应用算法于实际问题。实验内容:给定数据点如下:00506070809101175196219244271300实验要求:(1) 编写程序用最小二乘法求拟合数据的多项式,并求平方误差,作出离散函数和拟合函数的图形。(2) 用MATLAB的内部函数polyfit求解上面最小二乘法曲线拟合多项式的系数及平方误差,并用MATLAB的内部函数plot作出其图形,并与(1)的结果进行比较。5. 以正交多项式为基底,作最小二乘多项式拟合。实验目的:探索改善最小二乘多项式的数值不稳定性的可能。实验内容:(1)

20、在-1,1区间上取n=20个等距节点,计算出以相应点上的值作为数据样本,编写程序以1,为基函数作出次的最小二乘多项式,其中,是勒让德多项式。画出随着n变化的曲线,其中A是确定最小二乘多项式系数的矩阵。计算出不同阶最小二乘多项式给出的最小偏差(2) 用MATLAB的内部函数polyfit求解上面最小二乘法曲线拟合多项式的系数,并用MATLAB的内部函数plot作出其图形。数值实验六1. Newton-cotes型求积公式实验目的:学会Newton-cotes型求积公式,并应用该算法于实际问题.实验内容:求定积分 实验要求:选择等分份数,用复化Simpson求积公式求上述定积分的误差不超过的近似值

21、,用MATLAB中的内部函数int求此定积分的准确值,与利用复化Simpson求积公式计算的近似值进行比较。2. Romberg算法实验目的:学会数值求积的Romberg算法,并应用该算法于实际问题.实验内容:求定积分 实验要求:(1)要求程序不断加密对积分区间的等分,自动地控制Romberg算法中的加速收敛过程,直到定积分近似值的误差不超过为止,输出求得的定积分近似值。(2)可用MATLAB中的内部函数int求得此定积分的准确值与Romberg算法计算的近似值进行比较。3. Gauss型求积公式实验目的:学会Gauss型求积公式,并应用该算法于实际问题.实验内容:求定积分 实验要求:(1)把

22、Gauss点的表格存入计算机,以Gauss-Legendre求积公式作为本实验的例子,要求程序可以根据不同的阶数,自动地用阶Gauss-Legendre求积公式计算上述定积分的近似值.体会Gauss型求积公式是具有尽可能高的代数精度的数值求积公式。(2)可用MATLAB中的内部函数int求得此定积分的准确值与Gauss型求积公式求得的值进行比较。数值实验七1. 常微分方程性态和R-K法的稳定性实验目的:学习掌握4阶经典R-K方法,体会参数和步长对问题的影响。实验内容:求解常微分方程初值问题其中。实验要求:(1)对参数取不同的值,取步长,编写程序用4阶经典R-K法计算,将计算结果画图比较,并分析

23、相应的初值问题的性态。(2)取参数为一个绝对值不大的负值和两个不同的步长,一个步长使参数在经典R-K法的稳定域内,另一步长在经典R-K法的稳定域外,分别用R-K法编写程序计算并比较计算结果,取全域等距的10个点上的计算值。(3)用MATLAB中的内部函数dsolve求此常微分方程初值问题的解并与(1)与(2)中的结果进行比较。2. 解初值问题各种方法比较实验目的:掌握了解各种解初值问题的方法,体会步长对问题解的影响。实验内容:给定初值问题其精确解为实验要求:分别按(1)欧拉法,步长;(2)改进的欧拉法,步长;(3)四阶标准龙格-库塔法,步长;编写程序求在节点处的数值解及误差,并比较各方法的优缺

24、点。用MATLAB中的内部函数dsolve求此常微分方程初值问题的解并与上述结果进行比较。3. 认识刚性微分方程实验目的:了解认识刚性微分方程。实验内容:实验要求: 任选一显式方法,编写程序取不同步长求解上述方程。第四部分 MATLAB入门一、MATLAB简介MATLAB全名叫Matrix Laboratory,是矩阵实验室的意思。MATLAB最初是由CleveMoler用Fortran语言设计的,现在的Matlab是由MathWorks公司用C语言开发的。MATLAB容易使用、可以由多种操作系统支持、具有丰富的内部函数、具有强大的图形和符号功能、可以自动选择算法、与其他软件和语言有良好的对接

25、性。MATLAB是适用于科学和工程计算的数学软件系统。1用户界面介绍MATLAB用户界面如图1所示,包括主菜单、主工具栏、命令窗口、命令历史窗口、工作间管理窗口、当前路径窗口、编译窗口、图形窗口、启动按钮、帮助浏览器等。下面简单介绍命令窗口,其他的内容在使用的过程中会逐渐熟悉。命令窗口是用于输入数据,运行MATLAB函数和脚本并显示结果的主要工具之一,命令窗口如图1右边中下区域所示。图1 MATLAB用户界面2常量常量是MATLAB语言预定义的一些变量,在默认的情况下这些变量的值为常数。下面介绍常用的一些常量:pi表示圆周率;realmax表示MATLAB可以表示的最大浮点数,MATLAB可以

26、表示的最大浮点数为 ;Inf表示无穷大,超过MATLAB可以表示的最大浮点数时,系统将视该数为无穷大;realmin表示MATLAB可以表示的最小的正浮点数,MATLAB可以表示的最小正浮点数为 ;eps表示用来判断是否为0的误差限,一般情况下,MATLAB函数的默认误差限为eps,其值为 ;NaN(Not a number)表示不定值,例类似0/0,inf/inf所生成的结果;i或j表示纯虚数单位。3变量变量是MATLAB的基本元素之一,与其他常规设计语言不同的是MATLAB语言不要求对所使用的变量进行事先说明,而且他也不需要指定变量的类型,系统会根据该变量被赋予的值或是对该变量所进行的操作

27、来自动确定变量的类型。在MATLAB语言中,变量的命名有如下规则:(1) 变量名长度不超过31位,超过31位的字符系统将忽略不计;(2) 变量名区分大小写;(3) 变量名必须以字母开头,变量名中可以包含字母、数字或下划线。注:(1) 使用变量不要求事先声明;(2) 也存在变量的作用域问题,一般视为局部变量,仅在其调用的M文件内有效。若要定义全局变量,应加上关键字global,并一般用大写;(3) 如果在对某个变量赋值时,如果该变量已经存在,系统则会自动使用新值来代替该变量的旧值。例如在命令窗口中输入“a=1;a=2”命令,则会得到如下结果:a =24算术运算MATLAB中用“+”、“-”、“*

28、”“/”和“”分别表示算术运算中的加、减、乘、除和乘方。例如:计算256(1/6)*(1/3)(-1/2)+5(1/3)/23ans =4.5782 5数字的输入、运算(1) 对于简单的数字运算,可以直接在命令窗口以惯用的形式输入。(2) 当表达式较复杂或重复次数较多时,可先定义变量,然后由变量表达式计算。(3) 若用户没有对表达式设定变量,则MATLAB自动将当前结果给ans变量。(4) %以后的内容只起注释的作用。(5) 若不想显示中间的结果,可用;结束一行;若想再次察看,只需输入变量名。(6) 乘幂和开方运算分别由和函数sqrt实现。(7) 数据存储和运算都以双精度进行的。6输出格式MA

29、TLAB中数值有多种显示形式。(1) 缺省情况下,若数据为整数,则以整型表示;若为实数,则以保留小数点后的4位浮点数表示。(2) 输出格式可由format控制,该命令只影响在屏幕上的显示结果,不影响在内部的存储和运算。可结合short (4位小数)、long (14位小数)、hex (16进制)、bank( 2进制)、short e (4位小数的指数形式)、long e( 14位小数)、rational(分数形式)。例在命令窗口中输入format long ,则以14位小数显示结果;输入format rational,则以14位小数显示结果。7用MATLAB编程将一个完整的命令集合写入M文件便

30、是一段MATLAB程序,但要注意,编程是在MATLAB的编辑窗口而不是命令窗口。MATLAB还提供了一般程序语言的基本功能。(1) for循环语句for i=1:n for j=1:m A(i,j)=sin(i+j)/(m+n)+B(i,j); endend循环中的步长是可以选择的。如for i=n:-2:n/2 A(i)=sin(i+n);end 即循环控制变量从n开始,步长是-2到n/2结束。(2) while循环语句与计算机的其他高级语言一样,while循环语句要由关系运算和逻辑运算给出的逻辑控制,该语句的一般形式为while(逻辑表达式)(一族可执行语句)endMATLAB中的关系运算

31、有 相等 不等, 小于等于, 大于等于, 大于.而MATLAB提供的逻辑运算有& 与, 或, 非。(3) 条件语句for i=1:n for j=1:m if i=j A(i,j)=1; else if(ij/2) A(i,j)=-1; else A(i,j)=0; end end end注意条件语句是以end结尾的。(4) 内部函数MATLAB提供了丰富的运算函数,只需正确调用其形式就可得到满意的结果,常用的运算函数如表1所示。表1 MATLAB常用函数表函数名函数功能函数名函数功能函数名函数功能sin正弦acosh反双曲余弦diff求导cos余弦atanh反双曲正切int积分tan正切ac

32、oth反双曲余切dsolve求解微分方程cot余切asech反双曲正割dot向量点乘sec正割acsch反双曲余割cross向量叉乘csc余割pow2以2为底的幂函数fix向零方向舍入asin反正弦exp以e为底的幂函数floor向负方向舍入acos反余弦log自然对数ceil向正方向舍入atan反正切log10以10为底的对数round四舍五入acot反余切log2以2底的对数mod有符号求余asec反正割sqrt平方根rem无符号求余acsc反余割lim求极限sign符号函数asinh反双曲正弦fsolve求非线性方程的根abs绝对值(5) 用户自定义函数MATLAB 允许用户使用M文件定

33、义函数,但必须符合一定的规则。例如下面一段程序存为funsim.mfunction p=funsim(x)% define a simple functionp=sqrt(x)-2*x3+cos(x);所给出的是函数。函数的输出可以多于一个,例如function x1,x2=quadroot(a,b,c)% solve quadratic equation ax2+bx+c=0.ds=sqrt(b*b-4*a*c);x1=(-b+ds)/2/a;x2=(-b-ds)/2/a;将它存为quadroot.m,它给出二次方程的根。用户如此定义的函数可以与MATLAB内部函数同样使用.8. 用MATL

34、AB绘制图形计算的可视化是当今科学与工程计算的主导方向之一,MATLAB提供了许多可以选用的图形功能,简介如下:(1) 二维图形函数plot它是最常用和最简单的绘图命令。例如plot(x,y,);将向量x和y对应元素定义的点一次用实线联接(的维数必须一样);如果x和y为矩阵,则按列依次处理。plot(x1,y1,*, x2,y2,+);将向量x和y对应元素定义的点用星号标出,将向量x2和y2对应元素定义的点用+标出。即MATLAB可以划线或者点,它提供的点和线类型如表2所示。表2 点和线对应符号线符号点符号实线实心圆点.虚线- -加号+点:星号*虚线间点-.空心圆点。叉号另外“fplot”用于

35、化已定义函数在指定范围内的图像,它与“plot”类似但差别在于fplot可以根据函数的性质自适应的选择取值点。目前大部分的硬盘拷贝设备尚不能支持颜色,但彩色的显示已经是十分普及的,所以彩色显示在计算可视化中是十分有益的。颜色在绘图中的使用方法与线形的控制方法一样,常用的颜色有蓝色“b” ,黄色“y”,红色“ r” ,绿色“g”例如 plot(x,y, r) 将x和y对应的元素定义的点依次用红色实线联接。(2) 绘图辅助函数利用这一族函数可以为画出的图像加上标题等内容。title( );在图形的上方显示中所指定的内容;xlabel( ); 将中所指定的内容标在x轴;ylabel( ); 将中所指

36、定的内容标在y轴;grid; 在图上显示虚线格;text(x,y, ); 将中所指定的内容标在由x,y所指定的位置上;gtext( ); 运行到该命令,屏幕光标位置显示符号“+”等待,它将中所指定的内容标在鼠标所指定的位置;axis(x1 xr y1 yr); 其中的4个实数分别定义x和y方向显示的范围;hold on;后面plot 的图将叠加在一起;hold off;解除hold on命令,plot 将先冲去图形窗口已有图形;注意上述辅助函数必须放在相应的“plot”之后。(3) 多窗口绘图函数subplot 该函数的形式为subplot(p,q,r)该命令将图形窗口分成p行q列共计pq个格

37、子上画图,格子是从上到下按行一次记数的。例如考虑Chebeshev多项式,它可以用其递推公式定义如下: 下面的程序将-1,1上的前四个Chebeshev多项式画在一张图上。% see how hold works x=-1:0.05:1; t0=1.0+0*x;t1=x; t2=2*x.*t1-t0;t3=2*x.*t2-t1; plot(x,t0);gtext(T0); title(Chebeshev P); xlabel(x);ylabel(y); hold on plot(x,t1);gtext(T1); plot(x,t2);gtext(T2); plot(x,t3);gtext(T3

38、); 图2 重叠绘制出Chebeshev多项式 hold off 得到的图形将在图形窗口输出如图2所示的图形。如果将上述一段命令在文件编辑窗口中依次录入,并存为shd.m,需要运行该程序时,只要在命令窗口输入命令“shd”即可。而使用subplot则程序为% see how hold works Chebeshev x=-1:0.05:1; t0=1.0+0*x;t1=x; t2=2*x.*t1-t0;t3=2*x.*t2-t1; subplot(2,2,1);plot(x,t0); title(Chebeshev T0); xlabel(x);ylabel(y); subplot(2,2,2

39、);plot(x,t1); title(Chebeshev T1); xlabel(x);ylabel(y); subplot(2,2,3);plot(x,t2); title(Chebeshev T2); xlabel(x);ylabel(y); subplot(2,2,4);plot(x,t3); title(Chebeshev T3); xlabel(x);ylabel(y);得到的图形输出如图3所示。图3 重叠绘制出Chebeshev多项式(4) 三维图形函数三位的立体图形在MATLAB中形成也不难。例如对于函数下面的程序画出该函数在区域上的三维图形。图4 三维图形二、数值分析中的常用

40、命令数值分析主要研究数学问题的数值解,涉及的内容包括代数、微积分、微分方程等。利用MATLAB提供的函数,可以实现以下问题的数值求解。1求解线性方程组 线性方程组的解法很多,主要介绍几种常用的方法。(1) 基于矩阵变换的直接解法 使用或/运算符,可以基于一系列矩阵变换直接求解线性方程组;例如:求解方程组 A=2,1,-5,1;1,-3,0,-6;0,2,-1,2;1,4,-7,6; b=8,9,-5,0; x=abx = 3.0000 -4.0000 -1.0000 1.0000 linsolve(A,b):解线性方程组Ax=b.例如:求解方程组 a=2,1,-5,1;1,-3,0,-6;0,

41、2,-1,2;1,4,-7,6; b=8,9,-5,0; x=linsolve(a,b)x = 3.0000 -4.0000 -1.0000 1.0000(2) 迭代法如Jocabi迭代法、Gauss-Seidel迭代法、SOR(超松弛)迭代法需要根据算法编写相应的M文件来实现。2.求矩阵的特征值和特征向量用eig或eigs函数求矩阵的特征值和特征向量。例如:求矩阵的特征值和特征向量 A=1 2 0;2 5 -1;4 10 -1; b,c=eig(A)b = -0.2440 -0.9107 0.4472 -0.3333 0.3333 0.0000 -0.9107 -0.2440 0.8944c

42、 = 3.7321 0 0 0 0.2679 0 0 0 1.0000其中,b和c矩阵分别为特征向量矩阵和特征值矩阵.3求解一元非线性方程(1) 用fzero函数求求一元非线性方程的零点。该函数的调用格式为:x=fzero(fun,x0):如果x0为标量,则试图寻找函数fun在x0附近的零点。例如:求方程 f=(x)x.3-4*x+5; z=fzero(f,1)z = -2.4567(2) 用roots函数计算多项式的根,该函数的调用格式为:r=roots(c):返回一个列矢量,其元素为多项式c的解。例如:求方程 p=1,0,-4,5; (用行矢量表示多项式) r=roots(p)r = -2

43、.4567 1.2283 + 0.7256i 1.2283 - 0.7256i(3) newton法需要编写M文件来实现。非线性方程组的求解一般采用迭代法求解,主要有不动点迭代法、Newton迭代法和拟Newton迭代法,需要编程实现。4. 插值 (1) 一维线性插值函数的调用格式为: yi=interp1(x,y,xi,method)功能:对一组点(x,y)进行插值,计算xi的值。xi, yi 可以是矩阵。method的取值可以是: Nearest(线性最近项插值) Linear(线性插值,默认值) Spline(三次样条插值) Cubic(三次插值)例如: x=0.4:0.1:0.8; y

44、=-0.916291,-0.693147,-0.510826, -0.356675,-0.223144; interp1(x,y,0.54,cubic)ans = -0.61610990887357 interp1(x,y,0.54 0.54,nearest)ans = -0.69314700000000 -0.69314700000000(2) 二维线性插值函数的调用格式为: zi=interp2(x,y,z,xi,yimethod)功能:对一组点(x,y,z)进行插值,计算(xi, yi )的值。xi, yi 可以是矩阵,method的取值同上。(3) 三维线性插值函数的调用格式为: vi=interp2(x,y,z,v,xi,yi ,zimethod)功能:对一组点(x,y,z,v)进行插值,

温馨提示

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

评论

0/150

提交评论