




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章 线性代数 2.1 向量运算2.1.1 向量的生成2.1.2 向量的运算2.1.3 向量的转化2.2 矩阵的生成与修改2.2.1 创建简单矩阵的几种方法 1 用array()2. 用Matrix()linalg函数库中函数3. 用菜单ViewPalletesMatrix Palletes4. 用for循环2.2.2 几种特殊矩阵的创建方法2.2.3 访问矩阵元 1 修改元素2 提取矩阵元素linalg库中的函数row()和col()(1)整行、整列的提取row(), col()(2)提取子矩阵submatrix2.2.4 矩阵的初等变换与修改2.3 矩阵的运算及其特征值求解2.3.1 基本运算2.3.2 行列式的求解2.3.3 矩阵的转置2.3.4 矩阵的秩 1. 最大无关组basis(v1,v2,) 2. 矩阵的行及列向量的最大无关组 3.矩阵行及列向量的规范最大无关组4.矩阵的秩2.3.5 逆矩阵2.3.6 矩阵的特征值和特征向量2.3.7 相似矩阵与矩阵的对角化1判断两个矩阵相似(B是A的相似矩阵,即存在可逆阵P,使P(-1)AP=B,并求相似变换矩阵P 2. 判断矩阵可对角化即与其对角形相似2.4 解线性方程组2.4.1Guass-Jordan消元法2.4.1Maple 6, P94第二章 线性代数 2.1 向量运算2.1.1 向量的生成在Maple中,用表示列表的“ ”符号标记向量。同时用户也可以将向量看做是一种特殊的列表,只是它的下标从1开始。因此有关列表的运算同样适用于向量间的运算。但通过一般过程定义的列表将不具备向量的性质。 array(1.3,1,2,3); 定义列表 type(%,vector); 判断是否向量 type(%,array); 判断是否列表 A:=array(0.3,a,b,c,d); 下标从“0”开始,定义的不是向量 type(A,vector); A:=array(1.4,a,b,c,d); 下标从“1”开始,定义的是向量 type(A,vector); type(A,array);还可利用linalg程序包中的“linalgvector”, 或者直接作用系统自带的vector函数。 vector(1,2,3); v:=v: v:=vector(5,8); 生成5个相同的分量 linalgvectdim(v); 判断向量的维数 eval(v); 查看向量v的内容 print(v); v3:=0; print(v); linalgvector(4,1,x,x2,x3); 可以使用变量作为分量,其中的维数4可省 type(%,vector); v:=v: v:=linalgvector(4,1,x2,x3,x4); type(%,vector); map(diff,v,x); map(函数F,作用对象,函数F对应的参数) type(v,vector); u:=map(diff,v2,v3,v4,x); type(u,vector); 部分分量的导数的序列不是向量 w:=array(1.3,u); 改成向量的方法1 type(w,vector); s:=vector(w): 改成向量的方法2,后面还有方法3convert type(s,vector); with(plots): map(plot,w,x): plot(w,x=-5.5,-100.100,thickness=1,2,4); plotsdisplay(map(plot,w,x=-4.4); w必须是向量才能将曲线分画在不同坐标系中,否则就画在同一坐标系下练习: 仿上绘制没能上面没有转换成向量前的“w”对应的图像。2.1.2 向量的运算 作为复合结构的数据,用户不能直接对向量进行加减法运算,而需要调用函数“evalm()”(evaluate matrix对矩阵求值),但它只能完成对向量的线性运算(加法、数乘),因此,对于已知的序列,要用“convert()”命令转换进行转换,或用向量命令去定义向量。如: v:=v: v:=vector(1,2,3): u:=u: u:=vector(x,x2,y): w:=w: w:=vector(a,b,c,d): evalm(v+u); evalm(5*u); evalm(v+w); 不同维数的向量不能相加Error, (in linalgmatadd) vector dimensions incompatible 向量的乘法运算涉及两种: 内积(又称数量积或点积)与外积(又称向量积或叉积),分别用函数库“linalg”中库函数“dotprod()”、“crossprod()”计算。如上例的进一步计算: with(linalg): 求向量积“crossprod()”时需调用函数库 dotprod(v,u); 注意下面代数式的表达形式与代数习惯不同 crossprod(v,u); 向量积是一个向量 type(%,vector); 练习: 将上述线性运算、乘法运算中的向量u,v改用列表形式运算,看出现什么结果。代数中常需判断向量垂直、平行或求其模(norm())、单位向量、夹角(angle()等: norm(w,1); norm(w,2); |w|向量w的模 norm(w,3); normalize(v); v的单位向量(向量的归一化) angle(v,u); 向量v,u的夹角 matadd(v,u,2,-2); 相当于线性运算evalm(2*v-2*u),一般不用此令2.1.3 向量的转化 通过以下例子了解Maple是如何定义向量的数据类型,以及如何利用“convert()”将向量转化为其他类型的函数。 v:=1,2,3; type(v,vector); whattype(v); u:=convert(v,vector); type(u,vector); w:=convert(v,set); whattype(w);最后,对LinearAlgebra程序包中的Vector()函数作一简要介绍。Vector()函数所定义的向量是这个程序包的基础元素,它对应一种名为“rtable”的数据结构,另外还有maxtrix()函数也对应这种数据结构。此程序包中的函数将只处理此种类型的数据(这些函数的共同特点是首写字母大写,类似情况我们在介绍sum()函数时也曾遇到)。如: v:=Vectorrow(1,2,3); “row”定义出行向量 w:=Vector(1,2,1); 缺省定义出列向量用户可以在Vector()函数生成向量时添加多种限制条件,常用的有“Vector(n,expr)”和“Vector( ,readonly=ruly=true)”(其他参数请参考联机帮助),同时,Vector()类型的向量之间可以直接进行线性运算,如: restart; F:=(j)-x(j-1): Vectorrow(3,F); A:=Vectorrow(1,2,3,readonly=true); A2:=2;Error, cannot assign to a read-only Vector B:=Vectorrow(5,6,7); C:=A+B; whattype(%); 利用Vector()函数定义的向量在linalg程序库的函数中调用时要注意是否可行。一般地,为保证正常运算可利用contert()函数使向量或矩阵在两种类型间转换,如继续上例: with(linalg): 调用linalg程序包计算Vector()函数定义的向量 dotprod(A,B); crossprod(A,B); with(LinearAlgebra): 用LinearAlgrbra程序包计算rtable数据 dotprod(A,B); crossprod(A,B); c:=convert(C,vector); type(c,vector); type(c,rtable);总体上说,LinearAlgebra函数库具备linalg函数库的所有功能,同时也具有更规范、更完善的数据存储格式,以及更准确、更迅速的数值计算能力。相对来说,linalg函数库存更适合于抽象的线性代数问题的推导工作,而LinearAlgebra则更适合于对数值型矩阵的处理与运算。练习: 分别用vectro()及Vector()计算两个向量v=1,2,3,u=5,6,7的线性运算、乘法运算的结果,再改用列向量算。2.2 矩阵的生成与修改2.2.1 创建简单矩阵的几种方法 1 用array() A:=array(1.3,1.3): print(A); B:=array(1.3,1.3,1,2,3,): print(B); 其中“,可缺省” C:=array(1,2,3,): print(C); 2. 用Matrix()linalg函数库中函数 matrix(3,3,1,%?,3,1,2,3); 以三种方式生成行 f:=(i,j)-x(i+j-1): A:=matrix(2,2,f); 学会给矩阵赋值的方法注意:生成矩阵时array()与 matrix()格式的不同。3. 用菜单ViewPalletesMatrix Palletes选出行数及列数均不大于4的矩阵,然后在高亮处填上表达式即可。4. 用for循环 restart; M:=matrix(3,3); for i to 3 do for j to 3 do Mi,j:=xi+j*x od od; print(M);2.2.3 几种特殊矩阵的创建方法 restart;/* symmetry * A:=array(symmetric,1.3,1.3); 定义对称矩阵 print(A); A1,1:=5: A1,2:=10: A1,3:=8: A2,2:=x: A2,3:=x2: A3,3:=x3: print(A);/* antisymmetry */ B:=array(antisymmetric,1.3,1.3); 定义非对称矩阵 print(B);/* sparse */ C:=array(sparse,1.3,1.3); 定义零矩阵 print(C);/* identity */ J:=array(identity,1.3,1.3); 定义单位矩阵 print(J);/* diagonal */ Dia:=array(diagonal,1.3,1.3); 定义对角形矩阵 print(Dia);2.2.3 访问矩阵元 1 修改元素 print(M); N:=matrix(3,3); for i to 3 do for j to 3 do Ni,j:=diff(Mi,j,x) od od; print(N); map(diff,M,x);前面已见过“map()”的使用,它的完全形式为:map(函数f, 作用对象,函数f对应的参数)作用对象中的每个元素都使用同一函数作用。练习: 修改M的主对角线上元素为导数(或用subs()?)2 提取矩阵元素linalg库中的函数row()和col()(1)整行、整列的提取row(), col() T:=matrix(3,3,1,1,1,2,2,2,3,3,3); with(linalg): row(T,2); type(row(T,1),vector); col(T,2):=vectorcol(2,4,6); 准备给T的第二列赋值 print(T); 但T没有改变 注意: row(), col()不能改变修改行或列,只能提取。 (2)提取子矩阵submatrix submatrix(T,1.2,2.3); submatrix(T,2.2,1.3);2.2.5 矩阵的初等变换与修改 M:=matrix(3,3,1,2,3,4,5,6,7,8,9); 定义矩阵 with(linalg): 调用函数库Warning, the protected names norm and trace have been redefined and unprotected swaprow(M,1,2); 交换矩阵M的1、2两行 swapcol(M,1,2); 交换矩阵M的1、2两列 mulrow(M,2,k); 矩阵M的第2行乘非零数k mulcol(M,2,k); 矩阵M第2列乘非零数k addrow(M,1,2,-4); 矩阵M第1行的(-4)倍加到第2行 addcol(%,2,3,-2); 矩阵第2列的(-2)倍加到第3列注意: 以上变换均不会改变原始矩阵,若要连续作初等变换,或利用“%”,或将结果赋给其它符号代表的矩阵,再对此符号进行初等变换。Linalg程序库还提供了其他相关的函数: extend()(扩展矩阵), delrow()(删行)、delcol()(删列), augment/concat(0)(将两个矩阵横向连接), stackmatrix()(将两个矩阵纵向连接), copylinto()(将一个矩阵拷贝到另一个矩阵)。 restart; A:=matrix(3,3,1,2,3,2,4,7,3,7,14); with(linalg): extend(A,1,3,x); 扩展矩阵 delrows(%,4.4); 删矩阵的行 delcols(%,4.6); 删矩阵的列 B:=matrix(3,2,4,5,11,16,25,41); augment(A,B); C:=vectorcol(3,3,3); E:=concat(B,C); F:=stackmatrix(A,E); copyinto(-1*A,F,3,1);由于LinearAlgebra程序库采用不同的数据结构,但同样包含了可以完成类似功能的函数。下面举例介绍几个简单的函数,读者可以通过联机帮助来获得进一步的信息。 with(LinearAlgebra): A:=|; LinearAlgebra下给矩阵 whattype(A); LinearAlgebra下的许多命令和符号均大写 B:=DeleteColumn(A,4); ColumnOperation(B,1,3); “(B,1,3)”也可为“(B,1,3)” C:=RowOperation(B,2,3,-2,inplace=true); print(B);注意: “inplace=true”意为将B的值一并改变。由上面的过程可见,两类函数库LinearAlgebra与linalg中的函数命令及参数位置不尽相同,留意区别.如上面的矩阵C也可以用addrow(B,3,2,-2)得到: addrow(B,3,2,-2);但它们的数据类型不同,可以适当转换。如: A1:=matrix(3,4,1,4,7,10,2,5,8,11,3,6,9,12); whattype(A1); A2:=convert(A1,Matrix); whattype(A2); A3:=convert(A2,array); whattype(A3); A4:=convert(A3,set); whattype(A4);2.3 矩阵的运算及其特征值求解2.3.1 基本运算 使用内部函数“evalm()”或linalg库中函数matadd(), scalarmul(),. Multiply(): A:=matrix(2,2,1,2,3,4); B:=matrix(2,2,1,2,2,4); evalm(A+B); 相当于“matadd(1*A,1*B);” evalm(2*A); 相当于“scalarmul(A,2);” evalm(A&*B); 相当于“multiply(A,B);” evalm(B&*A); evalm(A2); 相当于“multiply(A,A);”,但A须是方阵 注意: 当满足运算条件时,“multiply()”还可以作“向量*矩阵”或“矩阵*向量”的运算,且系统会自动转换行或列向量。如: v:=vector(5,6); multiply(A,v); multiply(v,A); 2.3.2 行列式的求解 A:=matrix(3,3,1,2,3,2,4,7,3,7,14); det(A);2.3.3 矩阵的转置 At:=transpose(A); 练习: 证明: (A*B)T=BT*AT.提示:transpose(multiply(A,B); multiply(transpose(A),transpose(B);2.3.4 矩阵的秩 1. 最大无关组basis(v1,v2,) with(linalg): v1:=vector(1,-1,2,4): v2:=vector(0,3,1,2): v3:=vector(3,0,7,14): v4:=vector(1,-1,2,0): v5:=vector(2,1,5,0): basis(v1,v2,v3,v4,v5); 2. 矩阵的行及列向量的最大无关组 M:=matrix(4,5,6,4,1,-1,2,1,0,2,3,-4,1,4,-9,-16,22,7,1,0,-1,3); basis(M,rowspace); basis(M,colspace); (3)矩阵行及列向量的规范最大无关组 rowspace(M); colspace(M); (3)矩阵的秩 rank(M);2.3.5 逆矩阵 with(linalg): A:=matrix(3,3,1,2,3,2,6,9,3,9,18); adj(A); 求A的伴随矩阵A* inverse(A); 求A的逆矩阵 evalm(A(-1); 求A的逆矩阵方法2练习: 用求方阵A的元素Ai,j的余子式命令“minor(A,i,j)”,求A的伴随矩阵B(=A*)。提示:B:=matrix(3,3); for i to 3 do for j to 3 do Bi,j:=(-1)(i+j)*det(minor(A,j,i) od od; print(B); C:=evalm(B/det(A); evalm(A&*C);2.3.6 矩阵的特征值和特征向量 A:=matrix(3,3,3,-1,1,2,0,1,1,-1,2);f:=charpoly(A,x); 求特征多项式 f:=factor(f); eigenvals(A); 求特征值 trace(A); 矩阵A的迹特征值的和=主对角线元素和 eigenvects(A); 求特征向量结果给出:特征值,个数,特征向量的并集。 练习: 用推导的方式求矩阵的特征多项式、特征值与特征向量。提示: A:=array(symmetric,1.3,1.3): A1,1:=2: A1,2:=2: A1,3:=-2: A2,2:=5: A2,3:=-4: A3,3:=5: print(A); J:=array(identity,1.3,1.3): print(J); f:=det(evalm(x*J-A); solve(f=0,x); eigenvects(A); 2.3.7 相似矩阵与矩阵的对角化判断两个矩阵相似(B是A的相似矩阵,即存在可逆阵P,使P(-1)AP=B,并求相似变换矩阵P A:=matrix(3,3,9,-5,4,-3,-1,-16,-6,6,-12); B:=matrix(3,3,4,4,4,8,-4,-4,-4,8,-4); with(linalg): issimilar(B,A,P); 判断A与B相似,但注意A、B的位置 print(P); 求相似变换矩阵P evalm(P(-1)&*A&*P); 验证,也要注意是对A还是对B? 2. 判断矩阵可对角化即与其对角形相似 A:=matrix(3,3,1,2,2,2,1,2,2,2,1); B:=diag(eigenvals(A); 以特征值作对角形矩阵 issimilar(B,A,P); print(P); evalm(P(-1)&*A&*P); 练习: 设,求A100. 提示: 设P-1AP=B,则A=PBP-1,从而A100= (PBP-1) (PBP-1)(PBP-1)=PB100P-1。从而: evalm(P&*B(100)&*P(-1);分三个行向量给出矩阵:可否改用科学记数法给出结果?2.4 解线性方程组2.4.1Guass-Jordan消元法 x1+2*x2+3*x3=14; x1+3*x2+4*x3=19; x1+4*x2+2*x3=15; A:=matrix(3,3,1,2,3,1,3,4,1,4,2); b:=vector(14,19,15); G:=augment(A,b); # 用linalg库中augment用来扩充方程组的系数矩阵A,生成增广矩阵 gausselim(G); # linalg程序库中提供的高斯(Gauss)消元法,已按选主元 gaussjord(G); # linalg程序库中提供的Gauss-Jordan(约当)消元法 v:=backsub(%); # 说明如下: # v 已是列向量 evalm(A&*v); # 验解!注:(1)“backsub(A,v,n)”函数很有意思,它会自动判别用户输入参数的意义,如果输入的参数v是一个向量,则系统自动将A定义成方程组的系数矩阵,系统返回A*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 材料专业试题及答案
- 锅炉专业试题及答案
- 汽修专业大专试题及答案
- 编辑类专业试题及答案
- 广东省2025-2026学年高三上学期9月月考历史试题(含答案)
- 编导专业笔试题及答案
- 广东省江门市广雅中学2024-2025学年七年级上学期10月份英语月考卷(含答案无听力原文及音频)
- 化妆品行业品牌发展战略
- 全国重点城市领导讲话稿模板
- 短视频行业内容创作与营销策略
- 《燃煤火力发电企业设备检修导则》
- (高清版)TDT 1013-2013 土地整治项目验收规程
- 作文提纲课件
- 智慧养殖物联网解决方案
- 个人借款协议书范文:免修版模板范本
- 孙燕姿所有歌曲歌词大全(11张专辑)
- 竹简与毛笔背景的国学主题PPT
- 《欧姆定律》 单元作业设计
- 新高考人教版高中化学必修一全套课件
- 带秋字的古诗飞花令
- 体育原理完整版
评论
0/150
提交评论