【精品】MATLAB8.X程序设计及典型应用第四章 数值计算精品ppt课件.ppt

上传人:1595****071 文档编号:86272483 上传时间:2023-04-14 格式:PPT 页数:98 大小:940.50KB
返回 下载 相关 举报
【精品】MATLAB8.X程序设计及典型应用第四章 数值计算精品ppt课件.ppt_第1页
第1页 / 共98页
【精品】MATLAB8.X程序设计及典型应用第四章 数值计算精品ppt课件.ppt_第2页
第2页 / 共98页
点击查看更多>>
资源描述

《【精品】MATLAB8.X程序设计及典型应用第四章 数值计算精品ppt课件.ppt》由会员分享,可在线阅读,更多相关《【精品】MATLAB8.X程序设计及典型应用第四章 数值计算精品ppt课件.ppt(98页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、MATLAB8.X程序设计及典型应用第四章 数值计算第四章 数值计算数值计算在现代科学研究和工程技术领域中应用最为广泛。MATLAB正是凭借其卓越的数值计算功能而称雄一方。现在MATLAB拥有的数值计算功能已经非常强大。本章重点讲述在MATLAB工作环境下解决具体的数值计算问题,包含高等数学、线性代数、数据分析中的很多重要内容:矩阵的计算和分解、多项式运算、函数的零极点、数值微积分等。矩阵的多种运算方法MATLAB实现计算矩阵的秩、特征值及其对应的特征向量利用矩阵操作求解线性方程组利用多项式实现数据点的插值和拟合利用ode()指令求初值问题的常微分方程数值解本章主要内容包括:4.1 矩阵的计算

2、 4.1.1 矩阵的结构变换 1.矩阵转置的MATLAB运算符为单引号“”。A求A的转置,其中A可以是行向量、列向量和矩阵。【例4-1】矩阵转置的MATLAB实例。clear,x1=1;3;5;%31的列向量 y1=x1%转置结果为13的行向量y1=1 3 5 x2=1 2 3;4 5 6;%23的矩阵 y2=x2%转置结果为32的矩阵y2=1 4 2 5 3 6 x3=1-2*i 3+4*i;1-4*i 2+6*i;3-i-5+4*i;%32的复数矩阵 y3=x3%转置结果为23的共轭矩阵y3=1.0000+2.0000i 1.0000+4.0000i 3.0000+1.0000i 3.00

3、00-4.0000i 2.0000-6.0000i -5.0000-4.0000i x3=1-2*i 3+4*i;1-4*i 2+6*i;3-i-5+4*i;%32的复数矩阵 y3=x3.%的点转置结果为23的非共轭矩阵y3=1.0000-2.0000i 1.0000-4.0000i 3.0000-1.0000i 3.0000+4.0000i 2.0000+6.0000i -5.0000+4.0000i4.1.1 矩阵的结构变换 clear,B=1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16B=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

4、 16 flipud(B)%将矩阵B上下方向翻转矩阵ans=13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 fliplr(B)%将矩阵B水平方向翻转ans=4 3 2 1 8 7 6 5 12 11 10 9 16 15 14 13【例4-2】矩阵的结构变换实例。指令rot90()可以完成矩阵逆时针旋转90度。rot90(A,k)矩阵A逆时针翻转k90度。【例4-3】矩阵旋转变换实例。clear,x=1 2;3 4;5 6;A1=rot90(x)%逆时针旋转90度A1=2 4 6 1 3 5 A2=rot90(x,2)%逆时针旋转290度A2=6 5 4 3 2

5、1 A3=rot90(x,3)%逆时针旋转390度A3=5 3 1 6 4 23.旋转MATLAB中提取上三角矩阵的函数为triu(),提取下三角矩阵的函数为tril(),格式如下:triu(X,K)K=0时,提取X的主对角线及以上的元素。K0时,提取矩阵X主对角线上方的第K条对角线以上的元素。K0时,提取矩阵X主对角线上方的第K条对角线以下的元素。K clear,x=magic(3);%创建3阶魔方矩阵 A=triu(x)%提取主对角线上三角矩阵A=8 1 6 0 5 7 0 0 2 B=tril(x)%提取主对角线下三角矩阵B=8 0 0 3 5 0 4 9 2 B1=tril(x,1)%

6、提取主对角线上方第一条对角线下三角矩阵B1=8 1 0 3 5 7 4 9 2【例4-6】提取三角阵指令实例。4.1.2 矩阵分析 矩阵分析是线性代数中关于矩阵运算的重要环节。矩阵分析包括矩阵的秩、矩阵对应的行列式和逆矩阵等运算,MATLAB提供了相应的指令。用户在计算中只需要正确调用这些指令,就可以快速地得到结果。矩阵中线性无关的行数和列数成为矩阵的秩。在MATLAB中求秩函数为rank()。rank的格式为:rank(A)计算矩阵A的秩。【例4-7】求下列矩阵的秩(1)(2)(1)clear,a=1 4 2;6 7 2;5-4-8;R1=rank(a)R1=3(2)b=5 4-2;4 5

7、2;-2 2 8;R2=rank(b)R2=21秩MATLAB还提供了一个化简函数rref(),其格式如下:rref(A)将矩阵A化为行阶梯阵。根据MATLAB的输出结果,用户可以得到矩阵的秩,即行阶梯阵中非零行的行数【例4-8】(续例4-7)行阶梯阵化简函数rref()应用实例。rref(a)%将矩阵a化简为行阶梯阵ans=1 0 0 0 1 0 0 0 1 rref(b)%将矩阵b化简为行阶梯阵ans=1 0 -2 0 1 2 0 0 0由化简结果可知,矩阵a的秩为3,矩阵b的秩为2.。1秩把方阵A看做行列式|A|,对其按照行列式的规则求值,称该值为行列式的值。MATLAB的实现指令为de

8、t(),其格式为:det(A)计算方阵A对应的行列式的值行列式的值为0时,相应的矩阵成为奇异矩阵,否则称为非奇异矩阵(或满秩矩阵)。对于非奇异矩阵A,有与其同型的非奇异矩阵B,使得AB=BA=I,其中I为单位矩阵,则A和B互为逆矩阵。求方阵A逆矩阵的MATLAB函数为inv(),格式为:B=inv(A)求非奇异矩阵A的逆矩阵B2 行列式和逆矩阵 det(a)ans=66 det(b)%计算矩阵对应行列式的值ans=0 inv(a)%矩阵a为非奇异矩阵,存在逆矩阵ans=-0.7273 0.3636 -0.0909 0.8788 -0.2727 0.1515 -0.8939 0.3636 -0.

9、2576 pinv(b)%矩阵b为奇异矩阵,存在伪逆矩阵ans=0.0617 0.0494 -0.0247 0.0494 0.0617 0.0247 -0.0247 0.0247 0.0988【例4-9】(续例4-7)矩阵对应行列式的值、逆矩阵和广义逆矩阵运算实例。对于奇异矩阵,调用MATLAB指令inv()也可以获得计算结果.此时MATLAB会给出警告:Warning:Matrix is close to singular or badly scaled.用户不要将输出矩阵认为是该奇异矩阵的逆矩阵,必须通过逆矩阵定义加以验证。【例4-10】逆矩阵的应用:设 A=,B=,C=,求矩阵X,使满足

10、:。【说明说明】由线性代数可知:,或者 。本题给出两种计算程序,并比较计算结果和耗时。编写文件名为exm4_10的脚本文件:clear,clc,A=1 2 3;2 3 4;3 4 3;B=2,5;4 3;C=1 3;4 0;2 1;%显示利用逆矩阵求解时的耗时tic%开启计时器X1=inv(A)*C*inv(B)toc%结束计时,并输出时间%显示利用矩阵除法求解时的耗时ticX2=AC/Btoc【例4-10】逆矩阵的应用在指令窗中执行exm4_11:X1=-4.7500 4.2500 4.3571 -3.9286 -1.1071 1.1786Elapsed time is 0.000201 s

11、econds.X2=-4.7500 4.2500 4.3571 -3.9286 -1.1071 1.1786Elapsed time is 0.000137 seconds.【例4-10】逆矩阵的应用利用逆矩阵求解方程组时需要两步计算,即求逆矩阵和矩阵乘法,因此较左除法求解方程组速度要慢。程序在不同计算机上执行时耗时不唯一,但时长顺序不会改变。如果矩阵A不是方阵或是奇异矩阵时,该矩阵存在与A的转置矩阵同型的矩阵B,使ABA=A,BAB=B成立,则B称为A的逆,即伪逆矩阵。求伪逆矩阵的MATLAB函数为pinv(),其格式为:B=pinv(A)求矩阵A的伪逆矩阵B【说明】分析:该方程组为欠定方程

12、组,系数矩阵不是方阵,因此只能求其伪逆矩阵。编写文件名为exm4_11的脚本文件:clear,clcA=2 1 7 1;8-3 2 6;b=3 5;X=pinv(A)*b在指令窗中执行exm4_11:X=0.3426 -0.0691 0.3063 0.2400【例例4-11】求方程组的求方程组的 最小范数解。最小范数解。矩阵的迹:矩阵的对角线元素之和,即矩阵的特征值之和。MATLAB中求迹函数是trace(),格式如下:trace(A)求矩阵A的迹。向量种度量形式。使用范数可以测量两个向量或矩阵之间的距离。范数有多种定义形式。MATLAB计算向量或矩阵的范数指令为norm(),格式如下:nor

13、m(A,k)计算向量或矩阵A的k范数:k可以取1、2、Inf、fro,分别为计算矩阵的1-范数、2-范数、无穷大-范数、Frobenius-范数,k缺省时为计算2-范数。3.矩阵的迹和范数 clear,A=8 6-1 1;4 3-1 2;5 3-3 4;3 4-7-2;trace(A)%计算矩阵的迹ans=6 norm(A,1)%计算矩阵的1-范数ans=20 norm(A)%计算矩阵的2-范数ans=14.6918【例例4-12】计算矩阵计算矩阵 的迹和范数。的迹和范数。norm(A,inf)%计算矩阵的无穷大-范数ans=16 norm(A,fro)%计算矩阵的Frobenius-范数an

14、s=16.4012 norm(A(:,2),1)%计算向量的1-范数ans=16【例例4-12】计算矩阵计算矩阵 的迹和范数。的迹和范数。矩阵的条件数是解线性方程组是判断系数矩阵的变化对解的影响程度的一个参数。矩阵的条件数的定义依赖于范数。矩阵的条件数接近1时表示方程为良性的,否则为病态。MATLAB计算矩阵条件数的指令为cond(),格式如下:cond(A,p)计算矩阵A的p范数:p可以取1、2、Inf、fro,分别为计算矩阵的1-范数条件数、2-范数条件数、无穷大-范数条件数、Frobenius-范数条件数,p缺省时为计算2-范数条件数。4.条件数 cond(A,1)%计算矩阵的1-范数条

15、件数ans=108.1720 cond(A)%计算矩阵的2-范数条件数ans=51.7487 cond(A,inf)%计算矩阵的无穷大-范数条件数ans=67.0968 cond(A,fro)%计算矩阵的Frobenius-范数条件数ans=58.0285【例4-13】(续例4-12)计算矩阵A的条件数。4.1.3矩阵的特征值分析 设n阶方阵A,如果数 和n维非零列向量 ,使关系式 成立,则数称为方阵A的特征值,非零向量 称为矩阵A的对应于特征值 的特征向量,MATLAB计算矩阵特征值和特征向量的函数为eig(),格式为:V,D=eig(A)计算矩阵A的特征值D和对应的特征向量V,使得AV=V

16、D。如果函数只有一个输出宗量,则只给出特征值。clear,A=magic(3);%创建3阶魔方矩阵 d=eig(A)d=15.0000 4.8990 -4.8990 V,D=eig(A)V=-0.5774 -0.8131 -0.3416 -0.5774 0.4714 -0.4714 -0.5774 0.3416 0.8131D=15.0000 0 0 0 4.8990 0 0 0 -4.8990【例4-14】计算3阶魔方矩阵的特征值和特征向量。4.1.4 矩阵的分解矩阵分解是线性代数中比较重要的内容,针对不同的分解方法,MATLAB提供了多个关于矩阵分解的函数,具体见表4-1所示。表4-1 矩

17、阵分解函数及其功能表分析:方程组形式为AX=b,A=LU,即LUX=b,由矩阵除法可知X=U(Lb)。clear,clc,A=3 2-1;5 3 0;b=2;7;L,U=lu(A);X=U(Lb)X=1.4000 02.2000【例4-15】利用LU分解法求欠定方程组 的一个特解。4.1.5 线性方程组的求解线性方程组分为齐次方程组和非齐次方程组两类。对于系数矩阵为满秩矩阵的方程组,可以将方程组表述为Ax=b,其解为x=A-1b.MATLAB语句为x=inv(A)*b 或者 x=Ab.【例4-16】解方程组clear,A=2 1-1 1;5 3-1 2;2 3-2 4;3 3-3 2;det(

18、A)%由行列式值是否为零判断A是否存在逆矩阵ans=16 b=2 3 5 3;x=inv(A)*bx=0.5000 -1.0000 -0.50001.5000由执行结果可知,方程组的解为:x1=0.5;x2=-1;x3=-0.5;x4=1.5.该题也可以通过执行语句 x=Ab求得。【例4-16】解方程组齐次线性方程组求解对于系数阵A为奇异阵的齐次线性方程组,可以利用函数rref(A)将系数阵化为行阶梯阵,对照化简结果可以直接写出方程组的解。【例4-17】解方程组对于系数矩阵为非满秩矩阵,即奇异矩阵,MATLAB提供了针对齐次线性方程组和非齐次线性方程组的不同求解函数。MATLAB求解过程如下:

19、clear,A=2 1 1-1;4 2 2-2;1 3 2-4;1 2 2 2;format rat%有理格式输出 x=rref(A)x=1 0 0 -4/3 0 1 0 -6 0 0 1 23/3 0 0 0 0 由执行结果可知,该方程组有无穷多解,其通解为:【例4-17】解方程组MATLAB还提供了函数null()用来求解齐次线性方程组解空间的一组基(即基础解系),格式如下:X=null(A,r)求系数矩阵为A的齐次方程组一组基础解系(即一组基)。r是可选参数:当有r时,输出有理基;当无r时,输出正交规范基。【例4-18】(续例4-17)利用函数null()求解齐次线性方程组示例。x=nu

20、ll(A,r)x=4/3 6 -23/3 1 则方程组的解为 。结果与【例4-14】一致。【例4-17】解方程组【例4-19】利用函数null()求解齐次线性方程组 clear,A=1 2 2 1;2 1-2-2;1-1-4-3;format rat%有理式格式输出 x=null(A,r)%求解空间的有理基x=2 5/3 -2 -4/3 1 0 0 1 则方程组的解为 。非齐次线性方程组可以表述为AX=b,其中A为系数矩阵,其解存在3种可能:(1)无解:系数矩阵A的秩n小于增广阵(A,b)的秩,则方程组无解;(2)唯一解:系数阵A的秩n等于增广阵(A,b)的秩且等于未知变量的个数m(3)无穷多

21、解:系数阵A的秩n等于增广阵(A,b)的秩且小于未知变量的个数m,则方程组有无穷多解。对于情况(3),MATLAB必须要给出该方程的一个特解和对应齐次方程的(n-m)个通解 求解通解用函数null(),特解可以利用矩阵LU分解法求得。2.非齐次线性方程组求解function X=equs(A,b,n)%EQUS Solving the homogeneous or inhomogeneous linear equations%A 方程组的系数矩阵%b 常数项对应的列向量%n 方程组中变量个数%X 线性方程组的解if nargin3 error(输入宗量太多,请重新输入)endB=A,b;%增广

22、矩阵R_A=rank(A);%求系数矩阵的秩R_B=rank(B);%求增广矩阵的秩if R_An|R_Bn error(输入变量个数有误,请重新输入)end编写一个文件名为equs()函数文件:format rat%有理格式显示if R_A=R_B%是否无解 X=Equations have no solution!;elseif R_A=R_B&R_A=n%是否是唯一解 X=Ab;else L,U=lu(A);X=U(Lb);%求特解 C=null(A,r)%求通解endend用户利用该函数文件,可以用来求解任意类型的齐次或者非齐次线性方程组。编写一个文件名为equs()函数文件:在指令窗

23、中执行:clear,A=1 1-3-1;3-1-3 4;1 5-9-8;b=1 4 0;n=4;X=equs(A,b,n)Warning:Rank deficient,rank=2,tol=9.0189e-015.In equs at 23C=3/2 -3/4 3/2 7/4 1 0 0 1 X=0 0 -8/15 3/5 则该方程组的解为:【例4-20】求解方程组 4.2 多项式多项式运算是数学运算中最基本运算方式之一,也是线性代数分析和设计中的重要内容。MATLAB提供了多个函数可以帮助用户完成多项式的运算。4.2.1 多项式的表达和创建MATLAB中将n阶多项式p(x)存储在长度为n+1

24、的行向量p中,行向量p的元素为多项式的系数,并按x的降幂排列。行向量 代表的多项式为:注意:多项式中缺少某个幂次项,则在创建行向量时将该幂次项的系数写为0.【例4-21】创建多项式 p=4,-3,0,0,1,0%三次项、二次项、常数项系数均为0p=4 -3 0 0 1 04.2.2 多项式的运算1.多项式的加法和减法运算多项式加减运算实质上为两个向量的加减运算。如果两个多项式向量长度相同,标准的向量加法和减法是有效的。当两个多项式阶次不同时,必须将较短的(即低阶多项式)向量前面用若干个零填补,使得两个向量长度相同,然后再进行运算。【例4-22】将多项式 与 相加减。a=1-2 0 6;b=0

25、1 2 3;%将低阶多项式对于行向量补零 c=a+b%进行加法运算c=1 -1 2 9 sum=poly2str(c,x)%标准形式输出标准形式输出sum=x3-1 x2+2 x+9 d=a-b%进行减法运算d=1 -3 -2 3 dif=poly2str(d,x)%标准形式输出dif=x3-3 x2-2 x+3【例4-22】将多项式 与 相加减。两个多项式乘法运算实质是两个多项式系数的卷积运算。MATLAB中计算多项式卷积的指令为conv(),其调用格式为:conv(a,b)计算两个多项式的乘积,其中a,b分别为两个多项式的系数向量。多项式除法为乘法的逆运算,MATLAB中的除法运算指令为d

26、econv(),其调用格式为:q,r=deconv(a,b),计算两个多项式的除法,其中a,b为被除数多项式和除数多项式的系数向量,q、r分别为商多项式和余数多项式的系数向量。2.多项式的乘法和除法运算 a=1-2 0 6;b=1 2 3;m=conv(a,b)%进行乘法运算m=1 0 -1 0 12 18 pro=poly2str(m,x)%标准形式输出pro=x5-1 x3+12 x+18【例4-23】(续例4-22)运用函数conv()和deconv()进行多项式运算实例。q,r=deconv(a,b)%进行除法运算q=1 -4r=0 0 5 18 q=poly2str(q,x)%输出商

27、多项式的标准形式q=x-4 r=poly2str(r,x)%输出余多项式的标准形式r=5 x+18【例4-23】(续例4-22)运用函数conv()和deconv()进行多项式运算实例。MATLAB中求多项式全部根的函数为roots(),其格式为:x=roots(p)计算多项式的全部根,并以列向量形式赋给变量x。其中p为多项式的系数向量。【说明】在MATLAB中,多项式和根都表示为向量,其中多项式是行向量,根为列向量。如果已知多项式的根x,可以用函数poly()创建多项式:p=poly(x)由多项式的根向量x创建多项式系数向量p,其中p的第一个元素为1,对应多项式最高阶系数为1。3.多项式求根

28、(1)计算f(x)=0的全部根。(2)由方程f(x)=0的根构造一个多项式g(x),并与f(x)进行对比。p=2 0 3 2-5;x=roots(p)%求方程f(x)=0的根x=0.1414+1.5930i 0.1414-1.5930i -1.1402 0.8573 由结果可知,方程有4个根,其中有两个实根,还有一对共轭复根。g=poly(x)%求多项式g(x)g=1.0000 0.0000 1.5000 1.0000 -2.5000 g=poly2str(g,x)%标准形式输出g=x4+7.7716e-016 x3+1.5 x2+1 x-2.5【例4-24】已知 。计算多项式的值函数为pol

29、yval()和polyvalm(),调用格式如下:y=polyval(P,x)计算多项式的值。如果x为常数,则求多项式P在该点的值。计算表达式为 ;若x为向量或矩阵,则对向量或矩阵中的每个元素求多项式P的值,返回值为与自变量同型的向量或矩阵。y=polyvalm(P,A)以方阵A为自变量求多项式P的值4.多项式求值 clear,clc p=2-3 0 0-5;x1=1.2;x2=1.2 1 5;3-2 9;-1 2/3 4;y1=polyval(p,x1)%计算标量对应的函数值y1=-6.0368 y2=polyval(p,x2)%计算矩阵中各元素对应的函数值y2=1.0e+004*-0.00

30、06 -0.0006 0.0870 0.0076 0.0051 1.0930 0 -0.0005 0.0315 y3=polyvalm(p,x2)%计算矩阵对应的函数值y3=-201.9168 33.2427 838.0000-471.7920 343.4400 606.0000 -53.2960 -18.6133 206.0000【例4-25】polyval()和polyvalm()使用实例:已知 ,分别计算x=1.3和 时的值。执行部分分式展开的函数是residue(),格式为:r,p,k=residue(b,a)b,a=residue(r,p,k)对多项式进行部分分式的展开和其逆运算。a

31、为分式的分母系数向量,b为分式的分子系数向量。p为极点(Pole),r为留数(Residue),k(x)为直项(Direct term)。对于多项式b(x)和不含重根的n阶多项式a(x)之比,满足:如果a(x)有m阶重根,则对应的部分分式可以写成:5.多项式部分分式展开 clear,clc b=2 3-2 6;a=-4 0 5 3;r,p,k=residue(b,a)%进行部分分式展开r=-0.8144 0.0322-1.5573i 0.0322+1.5573ip=1.3445 -0.6723+0.3254i -0.6723-0.3254ik=-0.5000【例4-26】对有理多项式 进行部分

32、分式展开 b1,a1=residue(r,p,k)%进行部分分式逆运算,返回有理多项式形式b1=-0.5000 -0.7500 0.5000 -1.5000a1=1.0000 0.0000 -1.2500 -0.7500【说明】运用逆运算返回的多项式分母系数进行了归一化处理,即将原有理分式分子分母都除以-4即可。【例4-26】对有理多项式 进行部分分式展开4.3多项式插值和拟合 在大量的应用领域中,人们往往需要依据离散的数据点(即测量值)得出一个解析函数的表达式:如果假定这些数据点是完全正确的,要求以某种方式描述数据点之间所分布点的函数表达式,为插值问题;倘若根据这些数据点,用户得到某条光滑曲

33、线,它不需要完全经过这些点,但能最佳拟合数据点,这就是曲线拟合或者回归。4.3.1.多项式拟合 基于离散的数据点,拟合方法不同给出的曲线表达式也不一样。多项式拟合是用一个多项式来逼近这些给定的数据点。拟合的准则是函数在数据点处的误差平方和为最小,即最小二乘多项式拟合.MATLAB实现最小二乘多项式拟合的的函数为polyfit(),调用格式:p=polyfit(x,y,m)根据数据点(x,y),产生一个m阶多项式p。其中x,y是两个等长的向量(x要求按递增或递减次序排列),p是一个长度为m+1的多项式系数行向量。%输入测量数据点clear,clc x=0:.1:1;y=-.460 1.68 3.

34、28 6.18 7.18 7.35 7.66 9.56 9.40 9.30 11.2;p1=polyfit(x,y,1);%线性拟合y1=poly2str(p1,x)%化为标准多项式形式 p2=polyfit(x,y,2);%二阶多项式拟合 y2=poly2str(p2,x)在指令窗中执行文件exm4_27.m,结果为:y1=10.3982 x+1.3764y2=-10.1632 x2+20.5614 x-0.14811【例4-27】多项式拟合实例。编写文件名为exm4_27的脚本文件:图4.1线性拟合直线和10次拟合曲线图【例4-27】多项式拟合实例。拟合曲线能最佳拟合数据,反应数据点中隐藏

35、的内在规律,拟合曲线上的函数值代表实验测量的真值,因此,测量值与拟合线上对应真值的差即为残差。最小二乘原理就是要保证通过拟合直线得到的残差平方和为最小。给定n点数据,其最大拟合阶次为n-1。图4.1给出了最高阶拟合曲线,此时拟合曲线将全部通过数据点,但在左右两边的极值处,曲线出现了大的波纹,此时多项式表达的性质不明显。因此,计算拟合曲线不是阶数越高越好。常见的多项式拟合选择线性拟合,即选择1阶。【说明】4.3.2.多项式插值插值为对数据点之间函数的估值方法,即用户要找到一个解析函数能描述自变量相邻的两个点之间任一位置x处y的值。MATLAB中插值函数有一维、二维和多维。1.一维数值插值一维数值

36、插值函数为interp1()。调用格式如下:y0=interp1(x,y,x0,method)根据数据点(x,y)的值,计算函数在x0处的值y0。x0是一个向量或标量,为即将插值的点;y0是一个与x0等长的插值结果。method是插值方法,可用的方法有:(1)linear 线性插值法,如果没有指定插值方法,MATLAB皆以这种方法进行插值。(2)nearest最邻近插值法。(3)cubic 立方插值法,要求x的值等距离。(4)“spline”分段立方样条插值(SPLINE)注意:所有插值方法均要求x是单调的(单调递增或单调递减),且待插值的数据点横坐标不能超出x给定的范围,否则,插值结果会出现

37、非数(NaN).4.3.2.多项式插值【例4-28】在区间0 5内,取正弦函数曲线上均匀分布的6个数据点作为原始数据。再在该区间上选取均匀分布的21个点作为自变量,利用插值方法分别计算用线性插值、三次样条插值和三次插得到的函数应变量的值,并进行误差比较。x=linspace(0,5,6);y=sin(x);%创建原始数据点 x0=linspace(0,5,21);%待插值点 y0=sin(x0);%精确解 y1=interp1(x,y,x0);%线性插值法 y2=interp1(x,y,x0,spline);%三次样条插值法 y3=interp1(x,y,x0,cubic);%立方插值法 4.

38、3.2.多项式插值%插值结果与精确解之间的残差 err=y1-y0;y2-y0;y3-y0;%不同插值方法带来的残差标准方差 s=std(err(1,:),std(err(2,:),std(err(3,:)s=0.0641 0.0102 0.0522【说明】函数std()计算序列的标准方差,插值残差的标准方差可以衡量数值插值效果:残差的标准方差越大,表明插值误差越大,插值效果越不理想。在四种插值方法中,样条插值和立方插值的效果比较好,而线性插值的效果比较差。4.3.2.多项式插值二维插值函数是interp2(),调用格式如下:Z1=interp2(X,Y,Z,X1,Y1,method)根据数据

39、点(X,Y,Z)的值,计算函数在(X1,Y1)处由相应的插值方法得到的插值结果Z1。其中X、Y是两个向量,分别描述两个参数的采样点,X1、Y1是两个向量或标量,描述欲插值的点。method的取值与一维插值函数相同。X、Y、Z也可以是矩阵形式。X1、Y1的取值范围不能超出X、Y的 给定范围,否则,插值结果会出现非数(NaN)。MATLAB正是利用插值方法实现二维绘图和三维绘图。2.二维数值插值4.4 函数的零点和极值点4.4.1 函数的零点 对于任意函数f(x),它可能存在零点,也可能没有零点;即便存在零点,函数也可能只有一个零点,或者有多个甚至无穷多个零点。对于应用解析方法寻找零点较困难,或者

40、解析方法寻找零点无能为力的情况下,MATLAB提供了找寻函数零点的数值解法。MATLAB中找寻函数零点的数值计算方法为:先猜测一个初始零点或者零点所在的区间,然后通过不断迭代,使得猜测值不断精确化,或区间不断收缩,直至达到预先指定的精度,终止计算输出结果。MATLAB中找寻的函数零点的指令为fzero(),调用格式如下:xx,yy=fzero(fun,x0)计算函数fun在x0附近的零点;x0为初始猜测零点:若x0取标量,该指令将在它两侧寻找一个与之最靠近的零点;x0为区间时,指令将在区间内寻找零点。输出宗量xx、yy分别为零点的横坐标和纵坐标。如果函数只有一个输出宗量,则仅给出零点横坐标。【

41、说明】该函数有不止一个零点,但函数fzero()只能找出一个零点。为了能够有目的的找寻多个零点中的一个,用户可以先借助图形找到初始猜测零点的值。1.一元函数的零点(1)使用内联函数,并计算0.5附近的零点.clear,f=inline(sin(t)2*exp(-0.1*t)-0.5*abs(t)t,y=fzero(f,0.5)%计算0.5附近的零点t=0.5993y=-5.5511e-017为了获得更多的零点信息,建议用户用作图法观察函数零点的分布情况,并借助相关指令来获取多个零点的近似值。【例4-29】求 的零点。(2)作图法观察零点分布。编写文件名为exm4_29的脚本文件:t=linsp

42、ace(-8,8,200);y=(sin(t).2.*exp(-0.1*t)-0.5*abs(t);plot(t,y,t,zeros(size(t)%绘图指令xlabel(t),ylabel(y(t)%添加坐标轴名称在指令窗中输入exm4_29并执行,结果如图4-2所示。图图4.2 函数零点分布观察图函数零点分布观察图 zoom on%执行该指令后,可获得图形的局部放大图 tt,yy=ginput(5);zoom off%利用鼠标获取5个零点猜测值 tt%送出零点猜测初始值tt=-2.0046 -0.5392 -0.0230 0.5853 1.6820图4.3 局部放大和利用鼠标取值(3)利用

43、zoom和ginput指令获取零点的近似值。t4,y4=fzero(f,tt(4)t4=0.5993y4=0【说明】用户可以试试将内联函数用字符串代替求解函数零点,此时的输入宗量必须是x。当用户执行指令ginput()时,鼠标光标将变成十字形,如图4.3所示。用户单击鼠标即可获得图中相应点的坐标,并将其送给工作空间中的变量。(4)求靠近tt(4)的精确零点。MATLAB中函数fsolve()可以用来计算多元函数的零点。调用格式为:x,fval=fsolve(fun,x0)计算函数fun在x0附近的零点。输出宗量x为零点横坐标坐标,fval为零点纵坐标。2.多元函数的零点 x0=2,2,2;x,

44、fval=fsolve(2*x(1)+3*x(2)2+x(1)*x(3),x0)Warning:x=-0.0040 -0.0650 1.1829fval=4.5057e-011或者执行语句“fsolve(2*x(1)+3*x(2)2+x(1)*x(3),2 2 2)”即可。【例4-30】计算方程 在(2,2,2)附近的零点4.4.2 函数的极值点 数学上,函数的极值点是通过确定函数导数为零的点,解析求出这些极值点。有的函数很难找到导数为零的点,因此利用解析法求极值点难度很大,有时甚至是不可行的。MATLAB提供了在数值上找寻函数极值点的指令。对于函数的极值点存在极大值和极小值的区别,MATLA

45、B仅仅提供了获取函数极小值的指令,并且这种“极小”是一个“局部极小”,即是在给定范围内的“极小”。计算一个函数的极大值等价于计算该函数相反数的极小值。函数fminbnd()可以用来求解一定区间内函数的极小值,调用格式:x,y=fminbnd(fun,x1,x2)计算区间(x1,x2)内函数fun的极小值。输出宗量x、y分别为极小值点的横坐标和纵坐标。如果只有一个输出宗量即为横坐标。【例4-31】计算函数 在(0,3)附近的极小值点和极大值点。编写文件名为exm4_31的脚本文件:clear,f=inline(2*exp(-x)*cos(x);x,y_min=fminbnd(f,0,3)%输出区

46、间(0,3)内函数的极小值坐标1,一元函数的极值点%计算区间(0,3)的极大值x,y_min=fminbnd(-2*exp(-x)*cos(x),0,3);y_max=-y_min在指令窗中运行exm4_31,有:x=2.3562y_min=-0.1340y_max=1.9999【例4-31】计算函数 在(0,3)附近的极小值点和极大值点。求多元函数极小值点常见的两种方法:单纯行下山法(Downhill simplex methods)和拟牛顿法(Qussi-Newton methods)。对应的MATLAB指令为:x=fminsearch(fun,x0)x,fval=fminsearch(f

47、un,x0)单纯行下山法求多元函数极小值最简格式x=fminunc(fun,x0)x,fval=fminunc(fun,x0)拟牛顿法求多元函数极小值最简格式其中x为极小值点的坐标。fval输出对应于极小值点x的极小值。其中x0为找寻极小值的起点,x0可以是标量、向量或者矩阵。2.多元函数的极值点clear,clc,x0=-1.2 1.2;%猜测零点位置 ff=inline(100*(x(2)-x(1)2)2+(1-x(1)2);x,fval=fminsearch(ff,x0)%单纯行法求极小值点x=1.0000 1.0000fval=5.4009e-010 x,fval=fminunc(ff

48、,x0)%拟牛顿法求极小值点Warning:x=1.0000 1.0000fval=2.2044e-011【例4-22】计算“Banana”测试函数的极小值点。该测试函数有一片浅谷,许多算法难以逾越此谷。它的理论极小值点是(1,1)。4.5 数值微积分当已知函数的表达式时,理论上可以通过公式进行微积分计算。但在实际应用中,往往需要处理的对象并不能用公式来进行计算。因此,有必要介绍这些函数的微分和积分的数值算法。4.5.1 差分和偏导函数f(x)在x点的偏导数定义为:设h0,f(x)=f(x+h)-f(x)称为f(x)在x点的向前差分。在MATLAB中,计算差分的指令为diff(),调用格式为:

49、DX=diff(A,n,dim)计算矩阵A的n阶差分。dim=1时,按列计算差分;dim=2,按行计算差分。dim缺省时按列计算;n缺省时为计算1阶差分。指令gradient()也可以计算数值偏导,格式如下:dfdx,dfdy=gradient(f,dx,dy)计算矩阵f分别对x和y方向的数值导数,即计算矩阵在x、y方向的梯度。clear,clc,dt=pi/20;t=0:dt:pi/2;x=exp(t).*cos(t);%创建数据dxdt_diff=diff(x)/dtdxdt_grad=gradient(x,dt)dxdt_diff=Columns 1 through 9 0.9911 0

50、.9321 0.7975 0.5672 0.2191 -0.2701 -0.9243 -1.7666 -2.8178 Column 10 -4.0943dxdt_grad=Columns 1 through 9 0.9911 0.9616 0.8648 0.6824 0.3931 -0.0255 -0.5972 -1.3455 -2.2922 Columns 10 through 11 -3.4561 -4.0943【例4-23】已知 ,应用指令diff()和gradient()计算该函数在区间的导函数。注意:函数注意:函数diff()输出结果比原数组输出结果比原数组长度少一长度少一.4.5.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁