《线性代数实践MATLAB.ppt》由会员分享,可在线阅读,更多相关《线性代数实践MATLAB.ppt(56页珍藏版)》请在三一办公上搜索。
1、第二篇 线性代数实践,第五章 预备知识,5.1 实验在线性代数中的重要性,利用软件工具进行实验有以下的一些好处:好处一:对于低价(三阶及以下)的线性代数问题,MATLAB能提供图形帮助,有利于牢固地掌握概念。好处二:对于高阶的问题,MATLAB能提供计算程序,方便而简捷,节省时间。好处三:由于解题快捷,在课程中可以较多地放进线性代数的应用实例。扩展学生的视野,提高学习的目的性和积极性。,线性代数实践的预期效果,所以我们敢于提出本书的标志性特征:线性代数抽象吗?看了本书后,你会知道它的概念都基于空间形象。线性代数冗繁吗?学了本书后,你会懂得它的计算全可有简明程序。线性代数枯燥吗?读了本书后,你会
2、发现它的应用极其广泛又精彩。,5.2 解决问题的三种视点,线性代数要解的基本方程组是Ax=b其完整矩阵形式为:几百年来,无数数学家和工程师从不同的视点对这个方程进行了研究。归纳起来,根据研究的主要对象为x,A或b,可分成三个方面:,从解联立方程的视点,视点1:着重研究解x,即研究线性方程组的解法。中学里做的就是这样,前面介绍的用MATLAB矩阵除法的解也是如此。要点:矩阵的每一行代表一个方程,m行代表m个线性联立方程。n列代表n个变量。如果m是独立方程数,根据mn确定方程是欠定、适定还是超定。对这三种情况都会求解了,研究就完成了。必须剔除非独立方程。行阶梯形式、行列式和秩的概念很大程度上为此目
3、的而建立。本书6,7两章对应于本视点,区别是第6章用行阶梯变换(消元法)而第7章用矩阵运算。,从向量空间中向量合成的视点,视点2:把A各列看成n个m维基本向量,线性方程组看成基向量的线性合成要点:解x是这些基向量的系数。它可能是常数(适定方程),也可能成为其中的一个子空间(欠定方程)。要建立其几何概念,并会求解或解空间。第8章对应视点2。,从线性变换(或映射)的视点,视点3:把b看成变量y,着重研究把Rn空间的x变换为Rm空间y 的效果,就是研究线性变换系数矩阵A的特征对变换的影响。要点:就是要找到适当的变换,使研究问题的物理意义最为明晰。特征值问题就是一例。第9章对应于视点3。,学习本课的方
4、法,在学习本书之前,对理论结果应已基本掌握。首先着重于对低阶概念的理解,要在二维和三维空间内体会线性代数的定义。结合相应的MATLAB程序,弄清低阶的算法,然后再引伸到高阶方程中去,进一步搞清其算法和程序应有的扩展。对于应用问题,不必全看,可结合自已能理解的问题先看。,5.3 直线和平面的快速绘制程序,平面曲线的快速绘制程序 ezplot(,a,b)引号中函数可以只有一个自变量,代表显函数ezplot(f(x),a,b)系统将在 a x b的范围内画出 f=f(x)引号中的函数若有两个自变量,那就代表隐函数,其典型格式为ezplot(f(x,y),a,b)系统将在 a x b的范围内画出 f(
5、x,y)=0。a,b的默认值为-2,2,曲线快速绘制举例(例5.1),ezplot(x1+0.2*x23+1)画出 在x1=-2,-2的曲线画多条曲线可按下列方法编程s1=x1+0.2*x23+1%方程1s2=3*x1+2*x2+3%方程2ezplot(s1),hold on%画方程1,保持ezplot(s2),grid on%画方程2,加网格x1,x2=solve(s1,s2)%解联立方程1,2,解的结果,解的说明,在线性代数中,遇到的都是一次函数,所以不会出现曲线。我们故意用一个三次曲线来说明ezplot的用法,是为了使读者知道,这个命令不限于画直线。MATLAB用solve命令解题是采用
6、了符号运算工具葙,它的数字精度是32位十进制,而不是一般数值计算时的16位十进制。尽管在本题中有两有效数字就够了,平面的快速绘制命令ezmesh,ezmesh(f(x,y),a,b,c,d)可以绘制很多函数的曲面。其第一输入变元可以直接输入用MATLAB语句写出函数的形式,引号中的函数只能是显函数z=f(x,y)中的f(x,y)。它应该有两个自变量,注意要用单引号括起来。第二输入变元为自变量的取值范围,默认情况下其x,y的取值范围都是-2,2。,用ezmesh快速绘制平面举例,可以用以下的程序ag501在一张图内画两个平面clear,clfezmesh(3*x1+2*x2+3)hold one
7、zmesh(x1-2*x2+1),用隐函数的绘制平面程序,用ezmesh画平面必须要解出z=f(x,y)的显函数形式,有时就觉得不太方便,容易发生移项正负号或系数除法的错误。为此,我们开发了画平面的ezplplot程序。在一张图上画两个平面的ezplplot2程序和画三个平面的ezplplot3程序。这个程序还能画出诸平面的交线,根据abs(z1-z2)tol 的条件画出一个点的符号,tol的默认值为1。,隐函数绘制平面举例(例5.3),键入ezplplot后,按提示依次键入隐函数方程:x+y-z=52*x-3*y+z=3-5*x+2*y-2*z=0得到这三个平面的图形如图,该程序中还包括一句
8、解方程的程序(s1=x+y-z=5,)x,y,z=solve(s1,s2,s3)故最后还可得到这三个方程的解,即其交点的坐标x=10/7,y=-13/7,z=-38/7,Ezplplot3的运行结果,5.4 随机整数矩阵的生成程序,A=round(9*rand(2,4)生成24的一位正整数随机矩阵。A=round(19*(rand(2,4)-0.5)生成24的带正负系数的一位整数随机矩阵。装有ATLAST程序集时,可用A=randintr(3,4,9,2)生成mn(34)随机矩阵,q=9是正负整数系数的最大模,而r=2则是此矩阵的秩。显然输入变元时必须保证rmin(n,m),否则系统将会显示出
9、错警告。,5.5 特殊矩阵的生成程序,除了最常用的全零zeros(m,n)、全么ones(m,n)、单位矩阵eye(n)等矩阵外,MATLAB提供了一些特殊矩阵的生成程序,见本书表2.1中的特殊矩阵栏。ATLAST 手册中也提供了19个特殊矩阵的生成程序(见本书附录B)。在本书的子程序集中,也提供了几个初等变换矩阵的生成程序。,5.6 线性代数建模与应用概述,本节介绍一些大的系统工程中使用线性代数的情况,使读者知道为什么线性代数在近几十年来变得如此的重要。首先要介绍Leontief教授把美国的经济用500个变量的500个线性方程来描述,在1949年利用当时的计算机解出了4242的简化模型,使他
10、于1973年获得诺贝尔经济奖,从而大大推动了线性代数的发展。,现代飞行器外形设计例,把飞行器的外形分成若干大的部件,每个部件沿着其表面又用三维的细网格划分出许多立方体,这些立方体包括了机身表面以及此表面内外的空气。对每个立方体列写出空气动力学方程,其中包括了与它相邻的立方体的共同边界变量,这些方程通常都已经简化为线性方程。对一个飞行器,小立方体的数目可以多达400,000个,而要解的联立方程可能多达2,000,000个。,飞行器控制的例,飞行器的运动要用三个转动和三个平移共六个变量来表示(像在第九章中介绍的那样)。除此以外,为了控制飞行器的三维转动,需要三个控制面,即方向舵(垂直尾翼)、升降舵
11、(水平尾翼)和副翼,它们的偏转角又构成了三个变量。描述飞行器的运动就需要12个变量的组合。而且这已经不单是代数方程,而是微分方程了。,卫星遥感图象处理的例,卫星上用三种可见光和四种红外光进行摄像,对每一个区域,可以获得七张遥感图象。利用多通道的遥感图可以获取尽可能多的地面信息,因为各种地貌、作物和气象特征可能对不同波段的光敏感。而在实用上应该寻找每一个地方的主因素,成为一张实用的图象。每一个象素上有七个数据,形成一个多元的变量数组,在其中合成并求取主因素的问题,就与线性代数中要讨论的特征值问题有关。,国家地理信息系统的例,在全国设立几十万个观察点,把每一点的经度、纬度和高度三个坐标建立起来。现
12、在对于经度纬度的测量精度要求,已经提高到了若干厘米,对于高度的精度要求更高。在一些边远地区,对于一些特征点的测量,要耗费很大的人力物力。例如对珠穆朗玛峰顶高度的测量,要经过多种方法,取得多种数据,并且用最小二乘法进行误差的处理。,6.1 方程的MATLAB表示方法,其中:等价于,行号、列号和变量名,可以看出,变量后圆括号中的第一个数是行号,第二个数是列号,不加下标的变量A自身代表一个矩阵。除了把下标放入圆括号中之外,MATLAB的表述与原来的算式是完全一致的,非常好记。不过在MATLAB中变量名和元素名是一致的,式(6.3)中的矩阵A应该是a。但是为了使叙述文与一般的矩阵书籍相一致,我们还是把
13、矩阵用大写字母表示,数组和元素则用小写字母,希望读者注意。,欠定、适定和超定方程,如果n是未知数的数目,m是独立方程的数目,那么当nm时,未知数比独立方程数目多,此方程组有无数个解,称为欠定方程;当nm时,未知数比独立方程数目少,此方程组无解,称为超定方程;只有当nm时,未知数与独立方程数目相等,因而有惟一的解x,称为适定方程。所以,不能简单地看形式上的m和n,还必须要剔除其中非独立方程的虚假成分。本章和下一章中将讨论的行阶梯形式、行列式和秩等概念,很大程度上就是为了找到独立方程的数目。,几种二元线性方程的解,例6.1 求解下列四个线性方程组(a)(b)(c)(d),用图解法解例6.1(a,b
14、,c),用ezplot(s1),hold on,ezplot(s2),命令可以解出结果如下图其中s1和s2分别为方程的字符串表达式,用图解法解例6.1(d),用解析法解例,用代入法或消去法等中学方法求解;用矩阵求解的方法用MATLAB符号工具箱求解x1a,x2a=solve(s1,s2)其结果当然是相同的:(a)解为x1a=3,x2a=2(b)解为x1b=,x2b=,表示无解(c)解为x1c=2*x2-1,x2c=x2,表示有无数解(d)解为x1d=,x2d=,表示无解,求解三元线性方程组的例,再由两式联立解得:x=1.4286 y=-1.8571 z=-5.4286用图解方法ezplplot
15、3画此三个方程的平面,用的就是例5.3的程序,得到:,按例6.2画出的三个平面,三元一次方程的几何意义,这三个方程的几何意义为空间的三个平面,两两消去z,意味着求两者的交线,得到的两个二元一次方程对应于求得的两根交线,最后由交线得到交点,该交点就是方程的解(见图6.3)。当两个平面平行,没有交线,或者两根交线平行,没有交点时,方程组就不相容,因而无解;同样也可能有无穷个解的情况,读者可自行思考想象。,6.2 初等行变换和高斯消元子程序,执行以下三种行运算不会影响方程的相等关系,故不会影响方程组的解。矩阵C的行初等变换的MATLAB表示式为:(1)。行交换:c(i,j,:)=c(j,i,:)(2
16、)。行乘数:c(i,:)=k*c(i,:)(3)。行相加:c(j,:)=c(j,:)+k*c(i,:),消元法的要点,利用上述初等变换,在保持矩阵等价性和其它各行不变的前提下,把矩阵第j行中第q列的元素a(j,q)变换为零。做法:采用第三种变换,并取k=-a(j,q)/a(i,q)。此时第j行的数组将成为:a(j,:)=a(j,:)+-a(j,q)/a(i,q)*a(i,:)(6.9)而其中的第q个元素的取值将成为:a(j,q)=a(j,q)+-a(j,q)/a(i,q)*a(i,q)=0(6.10)其中的冒号:意味着要对全行的所有元素都做一次乘法和一次加法,相当繁琐。,消元子程序gauss.
17、m。,function B=gauss(A,i,j,q)%-%A为输入矩阵,B为变换后的输出矩阵%i为基准行的行号%j为待变换行的行号%q为基准元的列号,即A(i,q)为基准元,A(j,q)为待消元%x=A(i,:);y=A(j,:);%取出A的第i,j两行命名为x,y,z=y-y(q)/x(q)*x;%实现()式的运算A(j,:)=z;%把结果赋值给A第j行,B=A;%将A作为输出变元B,6.3 行阶梯形式,具有以下三个特点的矩阵称为行阶梯形式:1。所有非零行都处在全零行的上方;2。行首非零(枢轴)元素的列号比它的上方所有各行的枢轴元素的列号都要大;3。各枢轴元素所处的列中,在枢轴元素下方的
18、所有元素均为零。如果此矩阵还满足以下两个额外特点,4。各行枢轴元素是其列中的唯一非零元素;5。这些枢轴元素都等于1。则称之为简化行阶梯形式。,例6.3 行阶梯方程组的解法,用逐次回代法,可以由下而上依次求得x4=2,x3=2+x4/2=3,x2=-4-8x3=-28,x1=3x2-5x3+2x4=-39。,消元法生成行阶梯形式,步骤1 把主对角线下方第一列元素消为零连续(n-1)次调用gauss子程序来实现。即用a1=gauss(a,1,2,1)a1=gauss(a1,1,3,1).a1=gauss(a1,1,n,1)步骤2 把主对角线下方第二列元素消为零a2=gauss(a1,2,3,2)a
19、2=gauss(a2,2,4,2).步骤n-1,消元法生成简化行阶梯形式,与行阶梯形式反向进行步骤1 把主对角线上方第n列元素消为零a1=gauss(a1,n,n-1,n).a1=gauss(a1,n,1,n)步骤2 把主对角线上方第n-1列元素消为零a1=gauss(a1,n-1,n-2,n-1).把各行均除以主对角元素之值,例6.4 用行阶梯求方程组的解,逐步消元得到行阶梯形式:,简化行阶梯形式例,再变为简化行阶梯形式它对应的方程为:也就是得出了方程的解。,6.4 MATLAB的行阶梯解,上节所介绍的方法比起一个一个元素地计算,效率是高多了。但仍然很麻烦,头脑中要记各个步骤中的很多细节,而
20、实际上这些步骤仍然是刻板而有规律的,容易机械化。MATLAB已经把简化行阶梯形式(reduced row echelon form)的计算过程集成为一个子程序rref.它的输入变元是线性方程组的增广矩阵,键入U0=rref(A,B),输出的结果就是增广矩阵C的精简行阶梯形式。上例的计算程序可以简化为:A=1,4,7;8,5,2,;3,6,-2;B=1;3;5;C=A,B;U0=rref(C),更高阶的情况举例6.6,ag606 输入矩阵A,B后,键入U0=rref(A,B),可得可见只要方程是适定的,用rref函数就能解出方程。,6.5 用rref求解欠定方程组,当mn时,方程数小于未知数数,
21、属于欠定方程,方程将有无数解,需要找出其解的一般形式。即使m=n,也有可能是假象。用行阶梯形式就可以分清真假。欠定方程的行阶梯形式如下,欠定方程的行阶梯形式,系数矩阵的下方出现全零行,原来的 m行中只有r行有效,即系数矩阵成为rn阶的。原来的m个方程中有(m-r)个是相依的。部分行的最左端元素(称为枢轴元素)处于主对角线的右方,枢轴行和枢轴列都是r个。等式右端的常数列应该也只有r个非零元素。非枢轴列的变量为自由变量,任设它们为零,则剩下的矩阵成为rr阶的适定方程,可解出r个枢轴变量作为一组特解。其下标ip由rref函数的第2输出变元给出U0,ip=rref(A),用rref函数求欠定方程的通解
22、,把rref函数生成的系数矩阵恢复为方程,并将自由变量移至等式右端,求出枢轴变量的解,解中应包含括自由变量。在解的变量列中补上非枢轴变量的恒等式x(is)=x(is),其中is是非枢轴变量的列号。将左端解写成列向量形式,其右端整理成常数列向量加各自由变量乘以常数列向量的形式。也可以用程序ag607a来实现,但不提倡。,例6.7 求线性方程组的解,用ag607输入方程系数A和b,然后键入B=A,b,UB,ip=rref(B);U0=UB(1:5,1:5),d=UB(:,6),ag607运行的结果,恢复为方程形式,移项求解,ip=1,2,4,例6.7解的最后形式,可以把x3和x5写成任意常数c1和
23、c2,使其意义更加明确。,自动求欠定方程解的程序ag607a,syms c1 c2 c3 c4 c5 m,nsize(A);isother(ip,n),cc1;c2;c3;c4;c5x(is,1)c(1:length(is)lplength(ip)x(ip,1)-U0(1:lp,ip1:n)*x(ip1:n)U0(1:lp,end),6.6.1 平板稳态温度的计算,整理为,6.6.2 化学方程的配平,确定x1,x2,x3,x4,使两边原子数相等称为配平,方程为写成矩阵方程,6.6.3 电阻电路的计算,设定三个回路电流ia,ib,ic,回路压降的方程为:,6.6.4 交通流的分析,节点A:x1+450 x2+610节点B:x2+520 x3+480节点C:x3+390 x4+600节点D:x4+640 x2+310矩阵方程为:,