收藏 分享(赏)

Matlab数学实验.pdf

上传人:HR专家 文档编号:6228858 上传时间:2019-04-03 格式:PDF 页数:156 大小:4.73MB
下载 相关 举报
Matlab数学实验.pdf_第1页
第1页 / 共156页
Matlab数学实验.pdf_第2页
第2页 / 共156页
Matlab数学实验.pdf_第3页
第3页 / 共156页
Matlab数学实验.pdf_第4页
第4页 / 共156页
Matlab数学实验.pdf_第5页
第5页 / 共156页
点击查看更多>>
资源描述

1、软 件 篇 主要内容 综 述(3) Matlab 用法简介(5) 绪论(5) 第一节 Matlab的安装及使用(5) 第二节 向量与矩阵运算(9) 第三节 矩阵的基本运算(12) 第四节 Matlab中的图形(18) 第五节 Matlab编程(28) 第六节 Matlab符号运算(35) 综合练习(39) 综 述 数学软件是许多数学工作者经常提到的话题之一,人们将它用于进行科学计算和数学实验目前既有专门介绍数学软件的多种书籍,更有若干专门介绍数学实验的教材这些书籍或教材的一个共同的特点就在于它们都非常的专业化,一般读者看起来十分吃力还有一点就是用于数学实验的数学软件五花八门,读者往往花费许多时

2、间仍然不得要领能否有一本相对集中的教材将两者结合起来呢?应该说是有一定难度的本教材的目的之一就是作这方面的尝试本教材的软件篇和附录篇主要介绍数学软件,而在实验篇则主要介绍数学实验 众所周知,到目前为止,数学软件大概有如下几类: (1) 公共的基础软件:BASIC,FORTRAN,Tuobo C,Tuobo Pascal等; (2) 矩阵实验室系统:Matlab等; (3) 计算机代数系统:Mathematica,Maple等; (4) 交互式数学系统:MathCAD,Calcwin等 在教材的软件篇里介绍的Matlab 6.5软件以及在附录篇里介绍的Maple v4等软件有许多共性在一定意义下

3、,它们是一致的比如: (1) 都可以完成数学专业领域中数值运算和解析(符号)运算数值运算的含义不言而喻;符号运算的意义是:用户只要在计算机上输入相关的公式、符号和等式等,就能很容易地算出代数、积分、三角以及很多科技领域中复杂表达式的值; (2) 显示数学表格和图形,使用户通过对图形结果的分析加深对有关问题的理解 当然不能因此而否定它们各自的重要性事实上,它们各有千秋,各有各的侧重点比如:Mathematica 的数值运算和解析(符号)运算可以非常地精确;MathCAD 7.0专业版是可视化数学运算工具,用户输入的公式看上去就和黑板上或在参考书上所见到的一模一样;Matlab主要用于数值计算,计

4、算速度十分快捷;Maple与Mathematica十分类似,可能在符号运算方面更有力一些 由于时间及水平所限,本教材的编写不很全面,以后将进一步加以改进要 说明的是:附录篇中Maple部分的内容由陈志杰教授提供;上海交通大学的彭勃老师也提供了若干素材在此一并表示感谢 * * * * * * 在本教材第二版(即Matlab版)的编写过程中,得到了2005年度华东师范大学大学生科研基金数学实验案例分析与Matlab的实现项目的支持,来自2003级的郑圣洁、陈继国、刘娜、章华彦等四位同学为本教材进行了若干程序的设计、实现与调试另外,在本教材第一版(即Mathematica版)的编写过程中,也曾经得到

5、2000年度华东师范大学大学生科研基金数学实验的设计与实现项目的支持,该科研小组的1998级的陈怡、张齐、吴栋、岳文权、张力蔚等五位同学为本教材提供了若干数学实验的案例另外有1998级的范黎斌、2000级的赵喆同学也分别提供了一个数学实验案例,赵喆同学还在一些程序的完善方面提出了良好的建议并提供了积极的帮助,在此一并对他们的工作表示感谢 考虑到在数学实验中如何使用数学软件的问题,本教材在每个实验的开始列出了相关的Matlab函数,并给出了简要的说明,这可能与软件篇中的内容有少量重复,但对于理解和实现实验中的程序是非常有益的,特此说明 通过教学,我们已经积累了若干教学素材,包括介绍Matlab的

6、16个ppt文件,讲解各个数学实验的10个ppt文件,以及部分练习题的参考解答等读者可通过有关网站获取,或联系有关作者获得相信这些教学资料对您的学习或教学会有一定的帮助作用 作者联系方法: 万福永: 戴浩晖: 潘建瑜: 相关资料下载网址: http:/ (注意:for Mathematica版) http:/ (注意:for Matlab版) 2006年6月 Matlab用法简介 绪 论 Matlab 是“Matrix Laboratory”的缩写,意为“矩阵实验室”,是当今美国很流行的科学计算软件信息技术、计算机技术发展到今天,科学计算在各个领域得到了广泛的应用在许多诸如控制论、时间序列分析

7、、系统仿真、图像信号处理等方面产生了大量的矩阵及其相应的计算问题自己去编写大量的繁复的计算程序,不仅会消耗大量的时间和精力,减缓工作进程,而且往往质量不高美国Mathwork软件公司推出的Matlab软件就是为了给人们提供一个方便的数值计算平台而设计的 Matlab是一个交互式的系统,它的基本运算单元是不需指定维数的矩阵,按照IEEE的数值计算标准(能正确处理无穷数 Inf(Infinity)、无定义数 NaN(not-a-number)及其运算)进行计算系统提供了大量的矩阵及其它运算函数,可以方便地进行一些很复杂的计算,而且运算效率极高Matlab命令和数学中的符号、公式非常接近,可读性强,

8、容易掌握,还可利用它所提供的编程语言进行编程完成特定的工作除基本部分外,Matlab还根据各专门领域中的特殊需要提供了许多可选的工具箱,如应用于自动控制领域的Control System工具箱和神经网络中Neural Network工具箱等 第一节 Matlab的安装及使用 1.1 Matlab的安装 Matlab有各种版本,早期有Matlab 1.0 for 386的DOS版本,后来逐步发展这里介绍的版本是Matlab 6.x for Windows因为它使用方便,界面美观,我们选择它作为主要讲解版本Matlab 还有许多附加的部分,最常见的部分称为Simulink,是一个用作系统仿真的软件

9、包,它可以让您定义各种部件,定义各自对某种信号的反应方式及与其它部件的连接方式最后选择输入信号,系统会仿真运行整个模拟系统,并给出统计数据Simulink有时是作为Matlab的一部分提供的,称为Matlab with Simulink版本Matlab还有许多工具箱,它们是根据各个特殊领域的需要,用 Matlab 自身的语言编写的程序集,使用起来非常方便您可以视工作性质和需要购买相应的工具箱常见的工具箱有: Signal Process 信号处理 System Identification 系统辨识 Optimization 优化 Neural Network 神经网络 Control Sys

10、tem 自动控制 Spline 样条 Symbolic Math 符号代数 Image Process 图像处理 Nonlinear Control 非线性控制 Statistics 统计 1.2 Matlab基本用法 从Windows中双击Matlab图标,会出现Matlab命令窗口(Command Window),在一段提示信息后,出现系统提示符“”Matlab 是一个交互系统,您可以在提示符后键入各种命令,通过上下箭头可以调出以前打入的命令,用滚动条可以查看以前的命令及其输出信息 如果对一条命令的用法有疑问的话,可以用Help菜单中的相应选项查询有关信息,也可以用help命令在命令行上查

11、询,您可以试一下help、help help和help eig(求特征值的函 数)命令 下面我们先从输入简单的矩阵开始掌握Matlab的功能 1.2.1输入简单的矩阵 输入一个小矩阵的最简单方法是用直接排列的形式矩阵用方括号括起,元素之间用空格或逗号分隔,矩阵行与行之间用分号分开例如输入: A=1 2 3 ; 4 5 6 ; 7 8 0 系统会回答 A = 1 2 3 4 5 6 7 8 0 表示系统已经接收并处理了命令,在当前工作区内建立了矩阵A 大的矩阵可以分行输入,用回车键代替分号,如: A= 1 2 3 4 5 6 7 8 0 结果和上式一样,也是 A = 1 2 3 4 5 6 7

12、8 0 1.2.2矩阵元素 Matlab的矩阵元素可以是任何数值表达式如: x= -1.3 sqrt(3) (1+2+3)*4/5 结果: x = -1.3000 1.7321 4.8000 在括号中加注下标,可取出单独的矩阵元素如: x(5)=abs(x(1) 结果 x = -1.3000 1.7321 4.8000 0 1.3000 注:结果中自动产生了向量的第5个元素,中间未定义的元素自动初始为零 大的矩阵可把小的矩阵作为其元素来完成,如: A=A; 10 11 12 结果 A = 1 2 3 4 5 6 7 8 0 10 11 12 小矩阵可用“:”从大矩阵中抽取出来,如: A=A(1

13、:3,:); 即从A中取前三行和所有的列,重新组成原来的A. (详细介绍参见第二节的相关内容) 1.2.3语句和变量 Matlab的表述语句、变量的类型说明由Matlab系统解释和判断Matlab语句通常形式为: 变量=表达式 或者使用其简单形式为: 表达式 表达式由操作符或其它特殊字符、函数和变量名组成表达式的结果为一个矩阵,显示在屏幕上,同时保存在变量中以留用如果变量名和“=”省略,则具有ans名(意思指回答)的变量将自动建立例如: 键入1900/81 结果为: ans = 23.4568 需注意的问题有以下几点: 语句结束键入回车键,若语句的最后一个字符是分号,即“;”,则表明不输出当前

14、命令的结果 如果表达式很长,一行放不下,可以键入“”(三个点,但前面必须有个空格,目的是避免将形如“数2 ”理解为“数2.”与“”的连接,从而导致错误),然后回车 变量和函数名由字母加数字组成,但最多不能超过63个字符,否则系统只承认前63个字符 Matlab变量字母区分大小写,如A和a不是同一个变量,函数名一般使用小写字母,如inv(A)不能写成INV(A),否则系统认为未定义函数 1.2.4 who和系统预定义变量 输入who命令可检查工作空间中建立的变量,键入: who 系统输出为: Your variables are: A ans x 这里表明三个变量已由前面的例子产生了 但列表中列

15、出的并不是系统全部的变量,系统还有以下内部变量: eps、pi、Inf、NaN 变量eps在决定诸如矩阵的奇异性时,可作为一个容许差,容许差的初值为1.0 到 1.0以后计算机所能表示的下一个最大浮点数,IEEE在各种计算机、工作站和个人计算机上使用这个算法用户可将此值置为任何其它值(包括0值)Matlab的内部函数pinc和rank以eps为缺省的容许差 变量pi是,它是用imag(log(-1)建立的. Inf表示无穷大如果您想计算1/0 S=1/0 结果会是 Warning:Divide by zero S=Inf 具有IEEE规则的机器,被零除后,并不引出出错条件或终止程序的运行,而产

16、生一个警告信息和一个特殊值在计算方程中列出来 变量NaN表示它是个不定值由Inf/Inf或0/0运算产生 要了解当前变量的信息请键入whos,屏幕将显示: Name Size Bytes Class A 4x3 96 double array S 1x1 8 double array ans 1x1 8 double array x 1x5 40 double array Grand total is 19 elements using 152 bytes 从size及bytes项目可以看出,每一个矩阵实元素需8个字节的内存43的矩阵使用96个字节,全部变量的使用内存总数为152个字节自由空间

17、的大小决定了系统变量的多少,如计算机上有虚拟内存的话,其可定义的变量个数会大大增加 1.2.5数和算术表达式 Matlab中数的表示方法和一般的编程语言没有区别如: 3 -99 0.0001 9.63972 1.6021E-20 6.02252e23 在计算中使用IEEE浮点算法其舍入误差是eps浮点数表示范围是10-30810308 数学运算符有: + 加 - 减 * 乘 / 右除 左除 幂 这里1/4和41有相同的值都等于0.25(注意比较:14=4)只有在矩阵的除法时左除和右除才有区别 1.2.6复数与矩阵 在Matlab中输入复数首先应该建立复数单位: i=sqrt(-1) 及j=sq

18、rt(-1) 之后复数可由下面语句给出: Z=3+4i (注意: 在4与i之间不要留有任何空间!) 输入复数矩阵有两个方便的方法,如: A=1 2; 3 4 + i*5 6; 7 8 和 A=1+5i 2+6i; 3+7i 4+8i 两式具有相等的结果但当复数作为矩阵的元素输入时,不要留有任何空间,如1+5i,如在“+”号左右留有空格,就会被认为是两个分开的数 不过实际使用复数时并没有这么麻烦,系统有一个名为startup.m的Matlab命令文件,建立复数单位的语句也放在其中当Matlab启动时,此文件自动执行,i和j将自动建立 1.2.7输出格式 任何Matlab语句执行结果都可在屏幕上显

19、示,同时赋给指定的变量,没有指定变量时赋给ans数字显示格式可由format命令来控制(Windows系统下的Matlab系统的数字显示格式可以由Option菜单中的Numerical Format菜单改变)format仅影响矩阵的显示,不影响矩阵的计算与存贮(Matlab以双精度执行所有的运算) 首先,如果矩阵元素是整数则矩阵显示就没有小数,如x=-1 0 1,结果为: x= -1 0 1 如果矩阵元素不是整数则输出形式有:(用命令:format 格式进行切换) 格式 中文解释 说明 format 短格式 (缺省格式) Default. Same as SHORT format short

20、短格式 (缺省格式) Scaled fixed point format with 5 digits (只显示五位十进制数) format long 长格式 Scaled fixed point format with 15 digits format short e 短格式e方式 Floating point format with 5 digits format long e 长格式e方式 Floating point format with 15 digits format short g 短格式g方式 Best of fixed or floating point format wit

21、h 5 digits format long g 长格式g方式 Best of fixed or floating point format with 15 digits format hex 16进制格式 Hexadecimal format format + +格式 The symbols +, - and blank are printed for positive, negative and zero elements. Imaginary parts are ignored format bank 银行格式 Fixed format for dollars and cents for

22、mat rat 有理数格式 Approximation by ratio of small integers format compact 压缩格式 Suppress extra line-feeds format loose 自由格式 Puts the extra line-feeds back in 例如: x=4/3 1.2345e-6 在不同的输出格式下的结果为: 短格式 1.3333 0.0000 短格式e方式 1.3333e+000 1.234e-006 长格式 1.333333333333333 0.000001234500000 长格式e方式 1.333333333333333

23、e-000 1.23450000000000e-006 有理数格式 4/3 1/810045 16进制格式 3ff5555555555555 3eb4b6231abfd271 +格式 + + 对于短格式,如果矩阵的最大元素比数999999999大,或者比数0.0001小,则在打印时,将加入一个普通的长度因数如y=1.e20*x,意为x被1020乘,结果为: y= 1.0e+020* 1.3333 0.0000 “+”格式是显示大矩阵的一种紧凑方法,“+”,“-”和空格显示正数、负数和零元素 最后format compact命令压缩显示的矩阵,以允许更多的信息显示在屏幕上 1.2.8 Help求

24、助命令和联机帮助 Help 求助命令很有用,它对 Matlab 大部分命令提供了联机求助信息您可以从 Help菜单中选择相应的菜单,打开求助信息窗口查询某条命令,也可以直接用help命令 键入help 得到help列表文件,键入“help 指定项目”,如: 键入help eig 则提供特征值函数的使用信息 键入help 显示如何使用方括号等 键入help help 显示如何利用help本身的功能 还有,键入lookfor :可以从m文件的help中查找有关的关键字 1.2.9 退出和存入工作空间 退出Matlab可键入quit或exit或选择相应的菜单中止Matlab运行会引起工作空间中变量的

25、丢失,因此在退出前,应键入save命令,保存工作空间中的变量以便以后使用 键入 save 则将所有变量作为文件存入磁盘Matlab.mat中,下次Matlab启动时, 键入load 将变量从Matlab.mat中重新调出 save和load后边可以跟文件名或指定的变量名,如仅有save时,则只能存入Matlab.mat中如save temp命令,则将当前系统中的变量存入temp.mat中去,命令格式为: save temp x 仅仅存入x变量 save temp X Y Z 则存入X、Y、Z变量 load temp可重新从temp.mat文件中提出变量,load也可读ASCII数据文件详细语法

26、见联机帮助 第二节 向量与矩阵运算 Matlab能处理数、向量和矩阵但一个数事实上是一个11的矩阵,1个n维向量也不过是一个 1n 或 n1 的矩阵从这个角度上来讲,Matlab 处理的所有的数据都是矩阵Matlab的矩阵处理能力是非常灵活、强大的以下我们将从矩阵的产生、基本运算、矩阵函数等几个方面来说明 2.1向量及矩阵的生成 除了我们在上节介绍的直接列出矩阵元素的输入方法,矩阵还可以通过几种不同的方式输入到Matlab中 2.1.1 通过语句和函数产生 1. 向量的产生 除了直接列出向量元素(即所谓的“穷举法”)外,最常用的用来产生相同增量的向量的方法是利用“:”算符(即所谓的“描述法”)

27、在Matlab中,它是一个很重要的字符如: z=1:5 z = 1 2 3 4 5 即产生一个15的单位增量是1的行向量,此为默认情况. 用“:”号也可以产生单位增量不等于 1 的行向量,语法是把增量放在起始量和结尾量的中间如: x=0:pi/4:pi 即产生一个由0pi的行向量,单位增量是pi/4=3.1416/4=0.7854 x = 0 0.7854 1.5708 2.3562 3.1416 也可以产生单位增量为负数的行向量如: y=6:-1:1 y = 6 5 4 3 2 1 2. 矩阵的产生 Matlab提供了一批产生矩阵的函数: zeros 产生一个零矩阵 diag 产生一个对角矩

28、阵 ones 生成全1矩阵 tril 取一个矩阵的下三角 eye 生成单位矩阵 triu 取一个矩阵的上三角 magic 生成魔术方阵 pascal 生成PASCAL矩阵 例如: ones(3) ans = 1 1 1 1 1 1 1 1 1 eye(3) ans = 1 0 0 0 1 0 0 0 1 除了以上产生标准矩阵的函数外,Matlab 还提供了产生随机(向量)矩阵的函数 rand和randn,及产生均匀级数的函数linspace、产生对数级数的函数logspace和产生网格的函数meshgrid等等详细使用请查阅随机文档 “ : ”冒号可以用来产生简易的表格,为了产生纵向表格形式,

29、首先用冒号“ : ”产生行向量,再进行转置,计算函数值的列,然后形成有二列的矩阵例如命令: x=(0.0:0.2:3.0); y=exp(-x).*sin(x); x y 产生结果为: ans = 0 0 0.2000 0.1627 0.4000 0.2610 0.6000 0.3099 0.8000 0.3223 1.0000 0.3096 1.2000 0.2807 1.4000 0.2430 1.6000 0.2018 1.8000 0.1610 2.0000 0.1231 2.2000 0.0896 2.4000 0.0613 2.6000 0.0383 2.8000 0.0204 3

30、.0000 0.0070 2.1.2 通过后缀为.m的命令文件产生 如有文件data.m,其中包括正文: A= 1 2 3 4 5 6 7 8 0 则用data命令执行data.m,可以产生名为A的矩阵 2.2 矩阵操作 在Matlab中可以对矩阵进行任意操作,包括改变它的形式,取出子矩阵,扩充矩阵,旋转矩阵等其中最重要的操作符为“:”, 它的作用是取出选定的行与列 例如: A(:,:) 代表A的所有元素;试比较A(:), 将A按列的方向拉成长长的1列(向量); A(:,J) 代表A的第J列; A(J:K) 代表 A(J), A(J+1), , A(K),如同A(:)的第J到第K个元素; A(

31、:,J:K) 代表A(:,J), A(:,J+1), , A(:,K),如此类推. 对矩阵可以进行各种各样的旋转、变形、扩充: Matlab中有内部函数fliplr ( Flip matrix in the left/right direction),它对矩阵进行左右旋转. 例 x = 1 2 3 fliplr(x)为 3 2 1 4 5 6 6 5 4 同样有flipud: x = 1 4 flipud(x)为 3 6 2 5 2 5 3 6 1 4 矩阵的转置用符号“ ”表示: 如A=1 2 3; 4 5 6 ; 7 8 0 那么:计算B=A B = 1 4 7 2 5 8 3 6 0 符

32、号“ ”为矩阵的转置,如果Z为复矩阵,则 Z为它的复数共轭转置,非共轭转置使用Z. 或conj(Z)求得 reshape改变矩阵的形状,这是什么意思呢?可举一个例子来说明 A=A;10 11 12 A = 1 2 3 4 5 6 7 8 0 10 11 12 则 reshape(A,2,6) ans = 1 7 2 8 3 0 4 10 5 11 6 12 可见,reshape 是将矩阵元素以列为单位进行重组,原来 43 的矩阵变为了 26 的矩阵那么以下的语句也不难理解了,它将矩阵A按列打开(size函数返回矩阵A的行数与列数) reshape(A,1,size(A,1)*size(A,2)

33、,它等价于A(:) . 还有函数rot90,它可以将矩阵进行各种90度的旋转;tril及triu取出矩阵的下三角及上三角阵等详细的用法可以在需要使用时查阅手册 第三节 矩阵的基本运算 3.1 加和减 如矩阵A和B的维数相同,则A+B与A-B表示矩阵A与B的和与差如果矩阵A和B的维数不匹配,Matlab会给出相应的错误提示信息如: A= B= 1 2 3 1 4 7 4 5 6 2 5 8 7 8 0 3 6 0 C =A+B返回: C = 2 6 10 6 10 14 10 14 0 如果运算对象是个标量(即11矩阵),可和其它矩阵进行加减运算例如: x= -1 y=x-1= -2 0 -1

34、2 1 3.2矩阵乘法 Matlab中的矩阵乘法有通常意义上的矩阵乘法,也有Kronecker乘法,以下分别介绍 3.2.1 矩阵的普通乘法 矩阵乘法用“ * ”符号表示,当A矩阵列数与B矩阵的行数相等时,二者可以进行乘法运算,否则是错误的计算方法和线性代数中所介绍的完全相同 如:A=1 2 ; 3 4; B=5 6 ; 7 8; C=A*B, 结果为 C=43218765=8463745382617251=50432219即Matlab返回: C = 19 22 43 50 如果A或B是标量,则A*B返回标量A(或B)乘上矩阵B(或A)的每一个元素所得的矩阵 3.2.2 矩阵的Kroneck

35、er乘法 对nm阶矩阵A和pq阶矩阵B,A和B的Kronecher乘法运算可定义为: BaBaBaBaBaBaBaBaBaBACnmnnmm.212222111211由上面的式子可以看出,Kronecker乘积AB表示矩阵A的所有元素与B之间的乘积组合而成的较大的矩阵,BA则完全类似AB和BA均为npmq矩阵,但一般情况下ABBA和普通矩阵的乘法不同,Kronecker乘法并不要求两个被乘矩阵满足任何维数匹配方面的要求Kronecker乘法的Matlab命令为C=kron(A,B),例如给定两个矩阵A和B: A=1 23 4 B=1 3 22 4 6 则由以下命令可以求出A和B的Kroneck

36、er乘积C: A=1 2; 3 4; B=1 3 2; 2 4 6; C=kron(A,B) C = 1 3 2 2 6 4 2 4 6 4 8 12 3 9 6 4 12 8 6 12 18 8 16 24 作为比较,可以计算B和A的Kronecker乘积D,可以看出C、D是不同的: A=1 2; 3 4; B=1 3 2; 2 4 6; D=kron(B,A) D = 1 2 3 6 2 4 3 4 9 12 6 8 2 4 4 8 6 12 6 8 12 16 18 24 3.3 矩阵除法 在Matlab中有两种矩阵除法符号:“”即左除和“”即右除如果A矩阵是非奇异方阵,则AB是A的逆矩

37、阵乘B,即inv(A)*B;而B/A是B乘A的逆矩阵,即B*inv(A)具体计算时可不用逆矩阵而直接计算 通常: x=AB就是A*x=B的解; x=B/A就是x*A=B的解. 当B与A矩阵行数相等可进行左除如果A是方阵,用高斯消元法分解因数解方程:A*x(:, j)=B(:, j),式中的(:, j)表示B矩阵的第j列,返回的结果x具有与B矩阵相同的阶数,如果A是奇异矩阵将给出警告信息 如果A矩阵不是方阵,可由以列为基准的Householder正交分解法分解,这种分解法可 以解决在最小二乘法中的欠定方程或超定方程,结果是mn的x矩阵m是A矩阵的列数,n是B矩阵的列数每个矩阵的列向量最多有k个非

38、零元素,k 是A的有效秩 右除B/A可由B/A=(AB)左除来实现 3.4矩阵乘方 AP意思是A的P次方如果A是一个方阵,P是一个大于1的整数,则AP表示A的P次幂,即A自乘P次如果P不是整数,计算涉及到特征值和特征向量的问题,如已经求得:V,D=eig(A),则: AP=V*D.P/V(注:这里的.表示数组乘方,或点乘方,参见后面的有关介绍) 如果B是方阵, a是标量,aB就是一个按特征值与特征向量的升幂排列的B次方程阵 如果a和B都是矩阵,则aB是错误的 3.5 矩阵的超越函数 在 Matlab 中解释exp(A)和sqrt(A)时曾涉及到级数运算,此运算定义在A的单个元素上 Matlab

39、可以计算矩阵的超越函数,如矩阵指数、矩阵对数等 一个超越函数可以作为矩阵函数来解释,例如将“m”加在函数名的后边而成 expm(A)和sqrtm(A),当Matlab运行时,有下列三种函数定义: expm 矩阵指数 logm 矩阵对数 sqrtm 矩阵开方 所列各项可以加在多种m文件中或使用funm请见应用库中sqrtm.m,1ogm.m,funm.m文件和命令手册 3.6数组运算 数组运算由线性代数的矩阵运算符“*”、“/”、“”、“”前加一点来表示,即为“.*”、“./”、“.”、“.”注意没有“.+”、“.-”运算 3.6.1数组的加和减 对于数组的加和减运算与矩阵运算相同,所以“+”、

40、“-”既可被矩阵接受又可被数组接受 3.6.2数组的乘和除 数组的乘用符号.*表示,如果A与B矩阵具有相同阶数,则A.*B表示A和B单个元素之间的对应相乘例如 x=1 2 3; y= 4 5 6; 计算z=x.*y 结果z=4 10 18 数组的左除(.)与数组的右除(./),由读者自行举例加以体会 3.6.3 数组乘方 数组乘方用符号.表示 例如:键入: x= 1 2 3 y= 4 5 6 则z=x.y=14 25 36=1 32 729 (1) 如指数是个标量,例如x.2,x同上,则: z=x.2=12 22 32= 1 4 9 (2) 如底是标量,例如2 .x y ,x、y同上,则: z

41、=2 .x y=21 22 23 24 25 26=2 4 8 16 32 64 从此例可以看出 Matlab算法的微妙特性,虽然看上去与其它乘方没什么不同,但在2和“”之间的空格很重要,如果不这样做,解释程序会把“”看成是2的小数点 Matlab看到符号“”时,就会当做矩阵的幂来运算,这种情况就会出错,因为指数矩阵不是方阵 3.7 矩阵函数 Matlab的数学能力大部分是从它的矩阵函数派生出来的,其中一部分装入Matlab本身处理中,它从外部的 Matlab建立的M文件库中得到,还有一些由个别的用户为其自己的特殊的用途加进去的其它功能函数在求助程序或命令手册中都可找到手册中备有为Matlab

42、提供数学基础的LINPACK和EISPACK软件包,提供了下面四种情况的分解函数或变换函数: (1)三角分解;(2)正交变换;(3) 特征值变换;(4)奇异值分解 3.7.1三角分解 最基本的分解为“LU”分解,矩阵分解为两个基本三角矩阵形成的方阵,三角矩阵有上三角矩阵和下三角矩阵计算算法用高斯变量消去法 从lu函数中可以得到分解出的上三角与下三角矩阵,函数 inv得到矩阵的逆矩阵,det得到矩阵的行列式解线性方程组的结果由方阵的“”和“/”矩阵除法来得到 例如: A= 1 2 3 4 5 6 7 8 0 LU分解,用Matlab的多重赋值语句 L,U=lu(A) 得出 L = 0.1429

43、1.0000 0 0.5714 0.5000 1.0000 1.0000 0 0 U = 7.0000 8.0000 0 0 0.8571 3.0000 0 0 4.5000 注:L是下三角矩阵的置换,U是上三角矩阵的正交变换,分解作如下运算,检测计算结果只需计算L*U即可 求逆由下式给出: x=inv(A) x = -1.7778 0.8889 -0.1111 1.5556 -0.7778 0.2222 -0.1111 0.2222 -0.1111 从LU分解得到的行列式的值是精确的,d=det(U)*det(L)的值可由下式给出: d=det(A) d = 27 直接由三角分解计算行列式:

44、d=det(L)*det(U) d = 27.0000 为什么两种d的显示格式不一样呢? 当Matlab做det(A)运算时,所有A的元素都是整数,所以结果为整数但是用LU分解计算d时,L、U的元素是实数,所以Matlab产生的d也是实数 例如:线性联立方程取 b= 1 3 5 解Ax=b方程,用Matlab矩阵除得到 x=Ab 结果x= 0.3333 0.3333 0.0000 由于A=L*U,所以x也可以有以下两个式子计算:y=Lb,x=Uy得到相同的x值,中间值y为: y = 5.0000 0.2857 0.0000 Matlab中与此相关的函数还有rcond、chol和rref其基本算

45、法与LU分解密切相关chol函数对正定矩阵进行Cholesky分解,产生一个上三角矩阵,以使R*R=Xrref用具有部分主元的高斯约当消去法产生矩阵A的化简梯形形式虽然计算量很少,但它是很有趣的理论线性代数为了教学的要求,也包括在Matlab中 3.7.2正交变换 “QR”分解用于矩阵的正交三角分解它将矩阵分解为实正交矩阵或复酉矩阵与上三角矩阵的积,对方阵和长方阵都很有用 例如A= 1 2 3 4 5 6 7 8 9 10 11 12 是一个降秩矩阵,中间列是其它二列的平均,我们对它进行QR分解: Q,R=qr(A) Q = -0.0776 -0.8331 0.5444 0.0605 -0.3

46、105 -0.4512 -0.7709 0.3251 -0.5433 -0.0694 -0.0913 -0.8317 -0.7762 0.3124 0.3178 0.4461 R = -12.8841 -14.5916 -16.2992 0 -1.0413 -2.0826 0 0 0.0000 0 0 0 可以验证Q*R就是原来的A矩阵由R的下三角都给出0,并且R(3,3)=0.0000,说明矩阵R与原来矩阵A都不是满秩的 下面尝试利用QR分解来求超定和降秩的线性方程组的解 例如: b= 1 3 5 7 讨论线性方程组 Ax=b,我们可以知道方程组是超定的,采用最小二乘法的最好结果是计算x=A

47、b 结果为: Warning: Rank deficient, rank = 2 tol = 1.4594e-014 x = 0.5000 0 0.1667 我们得到了缺秩的警告用QR分解法计算此方程组分二个步骤: y=Q*b x=Ry 求出的y值为 y = -9.1586 -0.3471 0.0000 0.0000 x的结果为 Warning: Rank deficient, rank = 2 tol = 1.4594e-014 x = 0.5000 0 0.1667 用A*x来验证计算结果,我们会发现在允许的误差范围内结果等于b这告诉我们虽然联立方程Ax=b是超定和降秩的,但两种求解方法的结果是一致的显然x向量的解有无穷多个,而“QR”分解仅仅

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报