如键入 则有 如键入 exp(a) %求[e- 即有 2.7183 7.3891 20.0855 54.5982 矩阵作为指数的运算: 如键入 expm(a)%求矩阵的幂级数 则有 给出了不同的结果。这是由于expm(a)是矩阵的幂级数,其计算公式为: e=1+a+“++…+ 其它矩阵函数,如矩阵的对数也同样,使用时应注意 1.54稀疏矩阵 稀疏矩阵是一个阶级很高,只有极少部分元素非零的矩阵。用一般的矩阵表示时,由于 要定义每一个元素,因此占用很大的存储空间。而如果用稀疏矩阵定义,可以只定义非零元 素,因此可以节约大量的空间,如100×100维的单位矩阵,只有100个对角元素非零,用 一般矩阵定义时需要10000个存储单元,而用稀疏矩阵定义,只有100个单位。考虑到高维 矩阵表示不便,本文只有10维矩阵作为例题 speye命令可以建立单位稀疏矩阵。例如,键入 a= speye(5)%建立5阶单位稀硫矩阵 则有 (1,1) (2,2)1 (3,3)1 (4,4)1 (5,5) 如键入b=eye(5)%建立5阶普通矩阵 则有 若要查询ab矩阵状态,键入 whos 则有 Grand total is 30 elements using 284 bytes 可以看出,采用稀疏矩阵定义,只有84个字节,而用一般矩阵定义,则需要200个字 Sparse(ijs)命令可以产生最大行为i,最大列为j,最后一个元素为s的稀疏矩阵。 如键入 a= sparse(10,10,1)%建立10×10阶稀疏矩阵,最后一个元素为1 11
11 如键入 log(a) 则有 如键入 exp(a) %求[eaij] 即有 ans= 2.7183 7.3891 20.0855 54.5982 矩阵作为指数的运算: 如键入 expm(a) %求矩阵的幂级数 则有 给出了不同的结果。这是由于 expm(a)是矩阵的幂级数,其计算公式为: = + + + ++ + 2! 3! ! 2 3 n a a a e I a n a 其它矩阵函数,如矩阵的对数也同样,使用时应注意。 1.5.4 稀疏矩阵 稀疏矩阵是一个阶级很高,只有极少部分元素非零的矩阵。用一般的矩阵表示时,由于 要定义每一个元素,因此占用很大的存储空间。而如果用稀疏矩阵定义,可以只定义非零元 素,因此可以节约大量的空间,如 100×100 维的单位矩阵,只有 100 个对角元素非零,用 一般矩阵定义时需要 10000 个存储单元,而用稀疏矩阵定义,只有 100 个单位。考虑到高维 矩阵表示不便,本文只有 10 维矩阵作为例题。 speye 命令可以建立单位稀疏矩阵。例如,键入 a=speye(5) %建立 5 阶单位稀硫矩阵 则有 a= (1,1) 1 (2,2) 1 (3,3) 1 (4,4) 1 (5,5) 1 如键入 b=eye(5) %建立 5 阶普通矩阵 则有 若要查询 a,b 矩阵状态,键入 whos 则有 Grand total is 30 elements using 284 bytes 可以看出,采用稀疏矩阵定义,只有 84 个字节,而用一般矩阵定义,则需要 200 个字 节。 Sparse(i,j,s)命令可以产生最大行为 i,最大列为 j,最后一个元素为 s 的稀疏矩阵。 如键入 aa=sparse(10,10,1) %建立 10×10 阶稀疏矩阵,最后一个元素为 1
则有 如键入 ap= sparse(1560.5)%建立5×6稀疏矩阵,第6列元素为0.5 则有 如键入 ap= sparse(1:5,1:5,0.5)%建立5×5稀疏矩阵,对角线元素为0.5 则有 注意,用最后一种指令形式时,行、列数要相等 另外,B= - sparse(A)命令可以将普通A矩阵转换为稀疏矩阵B。A=full(B)命令可以 将稀疏矩阵B转换为普通矩阵A。其它稀疏矩阵的定义和运算命令在表1-10中列出,可以 根据需要自行应用。 表1-10稀疏矩阵函数 命令 说明 find 求非零项的下标 按图论画出稀疏矩阵 非零元素的数目 寻找非零元素 估计2—范数 nzmax 为非零元素分配的内存数 rander 随机排列向量 稀疏单位矩阵 用1代替非零元素 随机稀疏矩阵 随机稀疏对称矩阵 稀疏矩阵的轶 显示稀疏结构 最小对称度 1.6M函数与M文件 MATLAB除了可以进行前面讲过的数学函数、矩阵函数运算之外,还提供了M函数 M函数文件和M文件功能,可以利用所有的已知函数编制自己的M函数或M文件,完成 更为复杂的运算。实际上,MA∏LAB的许多复杂函数,如求特征值、特征向量、曲线拟合、 插值运算等都是由建立在M函数基础上的M文件完成的。它使得自己的需求可以任意扩展 和抽象化,给 MATLAB增加了抽象思维能力 16.1M函数与M函数文件 1M函数 MATLAB的M函数是 function语句引导的,其基本格式如下 Function[yl,y2,…}=ff(xl,x2,…) 其中,f为函数名,xi和y分别为输入和输出变量。它们可以是标量、数组、矩阵或 字符串,例如,可用M函数完成p=2√x2+10-5的运算。给出M函数f,内容如下: function[p=ff(x) n=length(x); for l=l: n
12 则有 如键入 ap=sparse(1:5,6,0.5) %建立 5×6 稀疏矩阵,第 6 列元素为 0.5 则有 如键入 ap=sparse(1:5,1:5,0.5) %建立 5×5 稀疏矩阵,对角线元素为 0.5 则有 注意,用最后一种指令形式时,行、列数要相等。 另外,B=sparse(A)命令可以将普通 A 矩阵转换为稀疏矩阵 B。A=full(B)命令可以 将稀疏矩阵 B 转换为普通矩阵 A。其它稀疏矩阵的定义和运算命令在表 1-10 中列出,可以 根据需要自行应用。 表 1-10 稀疏矩阵函数 命令 说明 find gplot nnz nonzeros normest nzmax randperm speye spones sprandn sprandsym sprank spy symmd 求非零项的下标 按图论画出稀疏矩阵 非零元素的数目 寻找非零元素 估计 2—范数 为非零元素分配的内存数 随机排列向量 稀疏单位矩阵 用 1 代替非零元素 随机稀疏矩阵 随机稀疏对称矩阵 稀疏矩阵的轶 显示稀疏结构 最小对称度 1.6 M 函数与 M 文件 MATLAB 除了可以进行前面讲过的数学函数、矩阵函数运算之外,还提供了 M 函数、 M 函数文件和 M 文件功能,可以利用所有的已知函数编制自己的 M 函数或 M 文件,完成 更为复杂的运算。实际上,MATLAB 的许多复杂函数,如求特征值、特征向量、曲线拟合、 插值运算等都是由建立在 M 函数基础上的 M 文件完成的。它使得自己的需求可以任意扩展 和抽象化,给 MATLAB 增加了抽象思维能力。 1.6.1 M 函数与 M 函数文件 1.M 函数 MATLAB 的 M 函数是 function 语句引导的,其基本格式如下: Function[y1,y2,…]=ff(x1,x2,…) 其中,ff 为函数名,xi 和 yi 分别为输入和输出变量。它们可以是标量、数组、矩阵或 字符串,例如,可用 M 函数完成 2 10 5 2 p = x + − 的运算。给出 M 函数 ff,内容如下: function[p]=ff(x) n=length(x); for I=1:n
pp()=sqrt(x()2+10) p=pp*2-5 然后在工作空间定义x: 调用ff函数,可得 在 function命令中也可以完成没有输入输出变量,简单定义为: function文件名 它执行该文件下指定的操作,例如,M函数的文件test内容为: a=function test b=[12;34 它执行定义a为符号变量,b为矩阵的简单运算。在工作空间中输入文件名: 结果显示: 应当注意,M函数中使用的变量,除输入和输出变量以外,所有变量都是局部变量, 即在该函数返回之后,这些变量会自动在MA∏LAB的工作空间中清除掉。如果想使这些中 间变量在工作空间中起作用,则应该把它们设置成全局变量。全局变量是由 MATLAB提供 的 global命令来设置的,一般在M函数的开头定义。命令形式为: global a b c 不同的全局变量名abc用空格隔开。 Global命令应当在工作空间和M函数中都出现 如果只在一方出现,则不被承认为全局变量。例如,上面的例题中,如果要增加全局变量 z1,z2参与运算,则首先定义 global zI Zi%在工作空间中定义全局变量 键入 zl=1:-0.1:0.6 则有 若键入 Z2=0:0.5:2 则有 然后修改M函数: function p=ff(x) global zI z2%增加全局变量 n=length(x) pp(l=sqrt(x(i)2+10)+zl()-22();%zl,z加入运算 end 运行M函数 y=ff(x) 3.6332 3.2833 3.3178 3.5980 4.0322
13 pp(i)=sqrt(x(i)ˆ2+10); end p=pp*2-5; 然后在工作空间定义 x: x=1:5 x= 1 2 3 4 5 调用 ff 函数,可得: 在 function 命令中也可以完成没有输入输出变量,简单定义为: function 文件名 它执行该文件下指定的操作,例如,M 函数的文件 test1 内容为: function test1 a=’function test’ b=[1 2; 3 4] 它执行定义 a 为符号变量,b 为矩阵的简单运算。在工作空间中输入文件名: test1 结果显示: 应当注意,M 函数中使用的变量,除输入和输出变量以外,所有变量都是局部变量, 即在该函数返回之后,这些变量会自动在 MATLAB 的工作空间中清除掉。如果想使这些中 间变量在工作空间中起作用,则应该把它们设置成全局变量。全局变量是由 MATLAB 提供 的 global 命令来设置的,一般在 M 函数的开头定义。命令形式为: global a b c 不同的全局变量名 a b c 用空格隔开。Global 命令应当在工作空间和 M 函数中都出现。 如果只在一方出现,则不被承认为全局变量。例如,上面的例题中,如果要增加全局变量 z1,z2 参与运算,则首先定义 global z1 z2 % 在工作空间中定义全局变量 键入 z1=1: -0.1: 0.6 则有 若键入 z2=0:0.5:2 则有 然后修改 M 函数: function [p]=ff(x) global z1 z2 % 增加全局变量 n=length(x) for i=1:n pp(i)=sqrt(x(i)ˆ2+10)+z1(i)-z2(i); %z1,z2 加入运算 end p=pp*2-5; 运行 M 函数 y=ff(x) y= 3.6332 3.2833 3.3178 3.5980 4.0322
结果为 2.M函数文件 除了 MATLAB提供的M函数,所有自己定义的M函数都要通过一个M文件来产生 M文件是指扩展名为m的文件。M函数文件必须按照一定的规则来编写。它的基本规则和 属性如下: 函数名和文件名必须相同,如上面定义的M函数 testl,它是一个名为 testlm的文件 开头应当以 function语句开始,第2条以后可以加入注释行(以%开始)和 MATLAB运算 语句。 M函数文件有自己的工作空间,与 MATAB的工作空间分开。M函数的变量都是内 部变量,不会送工作空间去。M函数与工作空间的联系只有输入、输出变量。 M函数中若有 return命令,函数将中断运行,返回工作空间 MATLAB在执行一次M函数之后,将其编为机器码,下一次运行时直接调用,运算 速度很快。 M函数文件中可以调用其它一般M文件(或称为脚本文件)。这时,脚本文件中的变 量都在M函数文件中有效,而在 MATLAB的工作空间中无效 M函数文件可以重复调用自己,但应当尽量避免这种操作,因为容易形成死循环。 162M文件 MATLAB提供的M文件(也叫脚本文件)是普通的ASCⅡ码构成的文件,只能由 MATLAB语言所支持的语句组成。它类似于DOS下的批处理文件,可以直接在工作空间中 执行。M文件以扩展名,m结尾,执行时只需键入文件名, MATLAB会自动执行该M文件 中的各条语句。与M函数文件不同,它不以 function语句开始,可以直接以任意 MATLAB 语句开始。如果要定义全局变量,则应以全局变量定义开始。 在工作空间中调用的M文件中的所有变量都可以在工作空间中直接引用,并可以在工 作空间中的其它M文件或SIMLⅠNK文件进行时调用。但如果要在某个M函数中引用,则 必须定义为全局变量。M文件可以调用M函数文件,一般来讲,M文件应当在M函数的 上层 MA∏LAB的M文件的功能非常强大。它允许自由编制充分复杂的程序,调用各种已有 的函数、其它M文件等。完成复杂的数值、逻辑和符号运算,与绘图功能、 SIMULINK工 具箱等联合使用,还可以仿真和绘制复杂的运动过程,是一个非常有用的工具。 例如上面的例子可以简单地用一个M文件完成。该文件名为n2m,文件内容如下 global zl z2 l=1:-0.1:0.6 22=0:0.5:2 y=ff(x) 为了运行M函数,建立M函数文件ftm,内容如下 global ZI z2 n=length(x pp()=sqrt(x()2+10)+zl(1)-z2(1) p=pp/2-5; 运行nm文件,键入2,结果显示:
14 结果为 2.M 函数文件 除了 MATLAB 提供的 M 函数,所有自己定义的 M 函数都要通过一个 M 文件来产生, M 文件是指扩展名为.m 的文件。M 函数文件必须按照一定的规则来编写。它的基本规则和 属性如下: ·函数名和文件名必须相同,如上面定义的 M 函数 test1,它是一个名为 test1,m 的文件。 开头应当以 function 语句开始,第 2 条以后可以加入注释行(以%开始)和 MATLAB 运算 语句。 ·M 函数文件有自己的工作空间,与 MATAB 的工作空间分开。M 函数的变量都是内 部变量,不会送工作空间去。M 函数与工作空间的联系只有输入、输出变量。 ·M 函数中若有 return 命令,函数将中断运行,返回工作空间。 ·MATLAB 在执行一次 M 函数之后,将其编为机器码,下一次运行时直接调用,运算 速度很快。 ·M 函数文件中可以调用其它一般 M 文件(或称为脚本文件)。这时,脚本文件中的变 量都在 M 函数文件中有效,而在 MATLAB 的工作空间中无效。 ·M 函数文件可以重复调用自己,但应当尽量避免这种操作,因为容易形成死循环。 1.6.2 M 文件 MATLAB 提供的 M 文件(也叫脚本文件)是普通的 ASCⅡ码构成的文件,只能由 MATLAB 语言所支持的语句组成。它类似于 DOS 下的批处理文件,可以直接在工作空间中 执行。M 文件以扩展名,m 结尾,执行时只需键入文件名,MATLAB 会自动执行该 M 文件 中的各条语句。与 M 函数文件不同,它不以 function 语句开始,可以直接以任意 MATLAB 语句开始。如果要定义全局变量,则应以全局变量定义开始。 在工作空间中调用的 M 文件中的所有变量都可以在工作空间中直接引用,并可以在工 作空间中的其它 M 文件或 SIMLINK 文件进行时调用。但如果要在某个 M 函数中引用,则 必须定义为全局变量。M 文件可以调用 M 函数文件,一般来讲,M 文件应当在 M 函数的 上层。 MATLAB 的 M 文件的功能非常强大。它允许自由编制充分复杂的程序,调用各种已有 的函数、其它 M 文件等。完成复杂的数值、逻辑和符号运算,与绘图功能、SIMULINK 工 具箱等联合使用,还可以仿真和绘制复杂的运动过程,是一个非常有用的工具。 例如上面的例子可以简单地用一个 M 文件完成。该文件名为 f2.m,文件内容如下: global z1 z2 x=1:5 z1=1:-0.1:0.6 z2=0:0.5:2 y=ff(x) 为了运行 M 函数,建立 M 函数文件 ff.m,内容如下: function[p]=ff(x) global z1 z2 n=length(x) for i=1:n pp(i)=sqrt(x(i)ˆ2+10)+z1(i)-z2(i); end p=pp/2-5; 运行 f2.m 文件,键入 f2,结果显示:
有关M文件的操作命令,在表1-11中给出 表1-11有关M文件的函数 说明 disp(ans) 显示未指定变量名的结果 控制命令窗口对脚本文件命令的回响 提示用户输入 keyboard 暂时把控制权交给键盘(按 reture退出) 暂停,直至用户按任意键 pause(n) 暂停ns waitforbuttonpress 暂停,直至用户按鼠标键或键盘键 1.7多项式运算 多项式运算是线性代数、线性系统分析中的重要内容。 MATLAB提供了多条命令,可 以进行多项式运算。多项式用一个行向量表示,多项式的系数降幂排列。例如,多项式: p(x)=x4+2x3-5x+6 在 MATLAB工作空间输入为 p=[120-56 则有 1.7.1求根及其逆运算 roots 1命令可以求解多项式p的根,求出的根按列向量存储。如求上面给出的多项式的 根,则键入 rr=roots(p) 结果为 poly命令可以由根的列向量表示求多项式系数,得到的多项式系数按行向量存储。如对 于上面求出的根,键入 pp=poly(rr) 得到 当根有共轭虚部时,多项式系数中可能出现小的虚部,对于线性系统,这是不可能的 这时,可以利用pp=rela(p)命令类消除虚假的虚部 1.7.2加法、减法与乘法 两个多项式的加、减法为多项式对应元素的加、减运算。两个多项式的阶数可以不同, 但在多项式定义时应当补充0元素使其行向量元素数目相等,否则不能相加、减。如已知 p(x)=x4+2x3-5x+6 s(x)=x2+2x+3 键入 则有 结果为 结果为 多项式系数定义为
15 有关 M 文件的操作命令,在表 1-11 中给出。 表 1-11 有关 M 文件的函数 命令 说明 disp(ans) echo input keyboard pause pause(n) waitforbuttonpress 显示未指定变量名的结果 控制命令窗口对脚本文件命令的回响 提示用户输入 暂时把控制权交给键盘(按 reture 退出) 暂停,直至用户按任意键 暂停 ns 暂停,直至用户按鼠标键或键盘键 1.7 多项式运算 多项式运算是线性代数、线性系统分析中的重要内容。MATLAB 提供了多条命令,可 以进行多项式运算。多项式用一个行向量表示,多项式的系数降幂排列。例如,多项式: p(x)=x4+2x3 -5x+6 在 MATLAB 工作空间输入为: p=[1 2 0 -5 6] 则有 1.7.1 求根及其逆运算 roots 命令可以求解多项式 p 的根,求出的根按列向量存储。如求上面给出的多项式的 根,则键入 rr=roots(p) 结果为 poly 命令可以由根的列向量表示求多项式系数,得到的多项式系数按行向量存储。如对 于上面求出的根,键入 pp=poly(rr) 得到 当根有共轭虚部时,多项式系数中可能出现小的虚部,对于线性系统,这是不可能的。 这时,可以利用 pp=rela(pp)命令类消除虚假的虚部。 1.7.2 加法、减法与乘法 两个多项式的加、减法为多项式对应元素的加、减运算。两个多项式的阶数可以不同, 但在多项式定义时应当补充 0 元素使其行向量元素数目相等,否则不能相加、减。如已知 p(x)=x4+2x3 -5x+6 s(x)=x2+2x+3 键入 p= 1 2 0 -5 6 s= 0 0 1 2 3 则有 结果为 结果为 多项式系数定义为 a= 1 1 3