《控制工程基础ppt教(学)案实验1MATLAB数值计算16381.pdf》由会员分享,可在线阅读,更多相关《控制工程基础ppt教(学)案实验1MATLAB数值计算16381.pdf(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 MATLAB 数值计算 MATLAB 的数学计算数值计算符号计算 其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。2.1 变量和数据 2.1.1 数据类型 数据类型包括:数值型、字符串型、元胞型、结构型等 数值型双精度型、单精度型和整数类 整数类无符号类(uint8、uint16、uint32、uint64)和符号类整数(int8、int16、int32、int64)。2.1.2 数据 1.数据的表达方式 可以用带小数点的形式直接表示 用科学计数法 数值的表示范围是 10-30910309。以下都是合法的数据表示:-2、5.67、2.56e-56(表示 2.5
2、610-56)、4.68e204(表示 4.6810204)2.矩阵和数组的概念 在 MATLAB 的运算中,经常要使用标量、向量、矩阵和数组,这几个名称的定义如下:标量:是指 11 的矩阵,即为只含一个数的矩阵。向量:是指 1n 或 n1 的矩阵,即只有一行或者一列的矩阵。矩阵:是一个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例,00 矩阵为空矩阵()。数组:是指 n 维的数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。3.复数 复数由实部和虚部组成,MATLAB 用特殊变量“i”和“j”表示虚数的单位。复数运算不需要特殊处理,可以直接进行。复数可以有几种表示:z=a+b*i 或
3、z=a+b*j z=a+bi 或 z=a+bj(当 b 为标量时)z=r*exp(i*theta)得出一个复数的实部、虚部、幅值和相角。a=real(z)%计算实部 b=imag(z)%计算虚部 r=abs(z)%计算幅值 theta=angle(z)%计算相角 说明:复数 z 的实部 a=r*cos();复数 z 的虚部 b=r*sin();复数 z 的幅值22bar;复数 z 的相角 theta=arctg(b/a),以弧度为单位。a=1-2*i a=1.0000-2.0000i real(a)ans=1 imag(a)ans=-2 abs(a)ans=2.2361 angle(a)*18
4、0/pi%以角度为单位计算相角 ans=-63.4349 2.1.3 变量 1.变量的命名规则 变量名区分字母的大小写。例如,“a”和“A”是不同的变量。变量名不能超过 63 个字符,第 63 个字符后的字符被忽略,对于 MATLAB6.5 版以前的变量名不能超过 31 个字符。变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能含有空格和标点符号(如,。%等)。例如,“6ABC”、“AB%C”都是不合法的变量名。关键字(如 if、while 等)不能作为变量名。2.特殊变量 MATLAB 有一些自己的特殊变量,当 MATLAB 启动时驻留在内存。表 2.1 特殊变量表 特
5、殊变量 取值 ans 运算结果的默认变量名 pi 圆周率 eps 计算机的最小数 flops 浮点运算数 inf 无穷大,如 1/0 NaN 或 nan 非数,如 0/0、/、0 i 或 j i=j=nargin 函数的输入变量数目 nargout 函数的输出变量数目 realmin 最小的可用正实数 realmax 最大的可用正实数 在 MATLAB 中系统将计算的结果自动赋给名为“ans”的变量。2*pi ans=6.2832 2.2 矩阵和数组 MATLAB 最基本也是最重要的功能就是进行实数或复数矩阵的运算。2.2.1 矩阵输入(1)矩阵元素应用方括号()括住;(2)每行内的元素间用逗
6、号或空格隔开;(3)行与行之间用分号或回车键隔开;(4)元素可以是数值或表达式。1.通过显式元素列表输入矩阵 c=1 2;3 4;5 3*2%表示构成矩阵,分号分隔行,空格分隔元素 c=1 2 3 4 5 6 用回车键代替分号分隔行:c=1 2 3 4 5 6 1 2 3 4 5 6 2.通过语句生成矩阵 (1)使用 from:step:to 方式生成向量 from:to from:step:to 说明:from、step 和 to 分别表示开始值、步长和结束值。当 step 省略时则默认为 step=1;当 step 省略或 step0 而 fromto 时为空矩阵,当 step0 而 fr
7、om1%得出逻辑向量 b b=0 1 0 1 1 0 1 1 1 a(b)%按单下标顺序排成长列 ans=3 5 2 4 6 9 3.矩阵的赋值 全下标方式:a(i,j)=b,给 a 矩阵的部分元素赋值则 b 矩阵的行列数必须等于 a 矩阵的行列数。clear a a(1:2,1:3)=1 1 1;1 1 1%给第一、二行元素赋值为全 1 a=1 1 1 1 1 1 单下标方式:a(s)=b,b 为向量,元素个数必须等于 a 矩阵的元素个数。a(5:6)=2 3%给第 5、6 元素赋值 a=1 1 2 1 1 3 全元素方式:a(:)=b,给 a 矩阵的所有元素赋值则 b 矩阵的元素总数必须等
8、于 a 矩阵的元素总数,但行列数不一定相等。a=1 2;3 4;5 6 a=1 2 3 4 5 6 b=1 2 3;4 5 6 b=1 2 3 4 5 6 a(:)=b%按单下标方式给 a 赋值 a=1 5 4 3 2 6 4.矩阵元素的删除 删除操作就是简单地将其赋值为空矩阵(用表示)。a=1 2 0;3 4 0;5 6 9 a=1 2 0 3 4 0 5 6 9 a(:,3)=%删除一列元素 a=1 2 3 4 5 6 a(1)=%删除一个元素,则矩阵变为行向量 a=3 5 2 4 6 a=%删除所有元素为空矩阵 a=5.生成大矩阵 在 MATLAB 中,可以通过方括号“”实现将小矩阵联接
9、起来生成一个较大的矩阵。a=1 2 0;3 4 0;5 6 9 a=1 2 0 3 4 0 5 6 9 a;a%联接成 63 的矩阵 ans=1 2 0 3 4 0 5 6 9 1 2 0 3 4 0 5 6 9 a=1 2 0;3 4 0;5 6 9 a a%联接成 36 的矩阵 ans=1 2 0 1 2 0 3 4 0 3 4 0 5 6 9 5 6 9 a=1 2 0;3 4 0;5 6 9 a(1:2,1:2)10*a(1:2,2:3)%计算并联接 ans=1 2 20 0 3 4 40 0 6.矩阵的翻转 a=1 2 0 3 4 0 5 6 9 表 2.3 常用矩阵翻转函数 函数名
10、 功能 例子 输入 结果 triu(X)产生 X 矩阵的上三triu(a)ans=角矩阵,其余元素补0。1 2 0 0 4 0 0 0 9 tril(X)产生 X 矩阵的下三角矩阵,其余元素补0。tril(a)ans=1 0 0 3 4 0 5 6 9 flipud(X)使矩阵 X 沿水平轴上下翻转 flipud(a)ans=5 6 9 3 4 0 1 2 0 fliplr(X)使矩阵 X 沿垂直轴左右翻转 fliplr(a)ans=0 2 1 0 4 3 9 6 5 flipdim(X,dim)使矩阵 X 沿特定轴翻转。dim=1,按行维翻转;dim=2,按列维翻转。flipdim(a,1)
11、ans=5 6 9 3 4 0 1 2 0 rot90(X)使矩阵 X 逆时针旋转 900 rot90(a)ans=0 0 9 2 4 6 1 3 5 2.2.3 字符串 在 MATLAB 中,字符串是作为字符数组来引入的;一个字符串由多个字符组成,用单引号()来界定;字符串是按行向量进行存储的,每一字符(包括空格)是以其 ASCII 码的形式存放。clear str1=Hello str1=Hello str2=I like MATLAB%重复单引号来输入含有单引号的字符串 str2=I like MATLAB str3=你好!%支持中文 str3=你好!1.字符串占用的字节 whos Na
12、me Size Bytes Class str1 1x5 10 char array str2 1x15 30 char array str3 1x3 6 char array Grand total is 23 elements using 46 bytes 2.字符串函数 length:用来计算字符串的长度(即组成字符的个数)。double:用来查看字符串的 ASCII 码储存内容,包括空格(ASCII 码为 32)。char:用来将 ASCII 码转换成字符串形式。class 或 ischar:用来判断某一个变量是否为字符串。class 函数返回 char 则表示为字符串,而 ischa
13、r 函数返回 1 表示为字符串。strcmp(x,y):比较字符串 x 和 y 的内容是否相同。返回值如果为 1 则相同,为 0 则不同。findstr(x,x1):寻找在某个长字符串 x 中的子字符串 x1,返回其起始位置。deblank(x):删除字符串尾部的空格。由于 MATLAB 将字符串以其相对应的 ASCII 码储存成一个行向量,因此如果字符串直接进行数值运算,则其结果就变成一般数值向量的运算,而不再是字符串的运算。length(str1)%字符串长度 ans=5 x1=double(str1)%查看字符串的 ASCII 码 x1=72 101 108 108 111 x2=str
14、1+1%字符串的数值运算 x2=73 102 109 109 112 char(x1)%将 ASCII 码转换成字符串形式 ans=Hello char(x2)ans=Ifmmp class(str1)%判断变量类型 ans=char class(x1)ans=double ischar(str1)ans=1 3.使用一个变量来储存多个字符串(1)多个字符串组成一个新的行向量 将多个字符串变量直接用“,”连接,构成一个行向量,就可以得到一个新字符串变量。clear str1=Hello;str2=I like MATLAB;str3=你好!str4=str1,!,str2%多个字符串并排成一个
15、行向量 str4=Hello!I like MATLAB (2)使用二维字符数组 将每个字符串放在一行,多个字符串可以构成一个二维字符数组,但必须先在短字符串结尾补上空格符,以确保每个字符串(即每一行)的长度一样。否则 MATLAB 会提示出错:str5=str1;str3?Error using=vertcat All rows in the bracketed expression must have the same number of columns.str5=str1;str3,%将 str3 添加两个空格 str5=Hello 你好!(3)使用 str2mat、strvcat 和
16、char 函数 使用专门的 str2mat、strvcat 和 char 函数可以构造出字符串矩阵,而不必考虑每行的字符数是否相等,总是按最长的设置,不足的末尾用空格补齐。str6=str2mat(str1,str2,str3)str6=Hello I like MATLAB 你好!str7=char(str1,str2,str3)str7=Hello I like MATLAB 你好!str8=strvcat(str1,str2)str8=Hello I like MATLAB whos Name Size Bytes Class str1 1x5 10 char array str2 1x
17、15 30 char array str3 1x3 6 char array str4 1x22 44 char array str5 2x5 20 char array str6 3x15 90 char array str7 3x15 90 char array str8 2x15 60 char array Grand total is 186 elements using 350 bytes 5.执行字符串 如果需要直接“执行”某一字符串,可以使用 eval 命令,效果就如同直接在 MATLAB 命令窗口内输入此命令。str9=a=2*5 str9=a=2*5 eval(str9)%执
18、行字符串 a=10 6.显示字符串 字符串可以直接使用 disp 命令显示出来,即使后面加分号(;)也显示。disp(请输入 2*2 的矩阵 a)请输入 2*2 的矩阵 a disp(str1)Hello 2.2.4 矩阵和数组运算 矩阵运算有明确而严格的数学规则,矩阵运算规则是按照线性代数运算法则定义的;数组运算是按数组的元素逐个进行的。1.矩阵运算的函数 a=1 2 3 4 5 6 7 8 9 表 2.4 常用矩阵运算函数 函数名 功能 例子 输入 结果 det(X)计算方阵行列式 det(a)ans=0 rank(X)求矩阵的秩,得出的行列式不为零的最大方阵边长。rank(a)ans=2
19、 inv(X)求矩阵的逆阵,当方阵 X 的 det(X)不等于零,逆阵 X-1 才存在。X 与 X-1 相乘为单位矩阵。inv(a)Warning:Matrix is close to singular or badly scaled.Results may be inaccurate.RCOND=1.541976e-018.ans=1.0e+016*-0.4504 0.9007 -0.4504 0.9007 -1.8014 0.9007 -0.4504 0.9007 -0.4504 v,d=eig(X)计算矩阵特征值和特征向量。如果方程Xv=vd 存在非零解,则 v 为特征向量,d为特征值。
20、v,d=eig(a)v=-0.2320 -0.7858 0.4082 -0.5253 -0.0868 -0.8165 -0.8187 0.6123 0.4082 d=16.1168 0 0 0 -1.1168 0 0 0 -0.0000 diag(X)产生X矩阵的对角阵 diag(a)ans=1 5 9 l,u=lu(X)方阵分解为一个准下三角方阵和一个上三角方阵的乘积。l 为准下三角阵,必须交换两行才能成l,u=lu(a)l=0.1429 1.0000 0 0.5714 0.5000 1.0000 1.0000 0 0 u=7.0000 8.0000 9.0000 0 0.8571 1.71
21、43 为真的下三角阵。0 0 0.0000 q,r=qr(X)mn阶矩阵X分解为一个正交方阵 q 和一个与X同阶的上三角矩阵 r 的乘积。方阵q 的边长为矩阵 X 的n 和 m 中较小者,且其行列式的值为 1。q,r=qr(a)q=-0.1231 0.9045 0.4082 -0.4924 0.3015 -0.8165 -0.8616 -0.3015 0.4082 r=-8.1240 -9.6011 -11.0782 0 0.9045 1.8091 0 0 -0.0000 u,s,v=svd(X)mn阶矩阵X分解为三个矩阵的乘积,其中 u,v 为 nn 阶和mm 阶正交方阵,s为 mn 阶的对
22、角阵,对角线上的元素就是矩阵 X 的奇异值,其长度为n和m中的较小者。u,s,v=svd(a)u=-0.2148 0.8872 0.4082 -0.5206 0.2496 -0.8165 -0.8263 -0.3879 0.4082 s=16.8481 0 0 0 1.0684 0 0 0 0.0000 v=-0.4797 -0.7767 -0.4082 -0.5724 -0.0757 0.8165 -0.6651 0.6253 -0.4082 说明:在上表中 det(a)=0 或 det(a)虽不等于零但数值很小接近于零,则计算 inv(a)时,其解的精度比较低,用条件数(求条件数的函数为
23、cond)来表示,条件数越大,解的精度越低,MATLAB 会提出警告:“条件数太大,结果可能不准确”。a=1 2 3;4 5 6;7 8 9 a=1 2 3 4 5 6 7 8 9 inv(a)Warning:Matrix is close to singular or badly scaled.Results may be inaccurate.RCOND=1.541976e-018.ans=1.0e+016*-0.4504 0.9007 -0.4504 0.9007 -1.8014 0.9007 -0.4504 0.9007 -0.4504 2.矩阵和数组的算术运算 (1)矩阵和数组的加、
24、减运算 A 和 B 矩阵必须大小相同才可以进行加减运算。如果 A、B 中有一个是标量,则该标量与矩阵的每个元素进行运算。(2)矩阵和数组的乘法*运算 矩阵 A 的列数必须等于矩阵 B 的行数,除非其中有一个是标量。数组的乘法运算符为“.*”,表示数组 A 和 B 中的对应元素相乘。A 和 B 数组必须大小相同,除非其中有一个是标量。x1=1 2;3 4;5 6;x2=eye(3,2)x2=1 0 0 1 0 0 x1+x2%矩阵相加 ans=2 2 3 5 5 6 x1.*x2%数组相乘 ans=1 0 0 4 0 0 x1*x2%矩阵相乘 x1 列数不等于 x2 行数?Error using
25、=*Inner matrix dimensions must agree.x3=eye(2,3)x3=1 0 0 0 1 0 x1*x3%矩阵相乘 ans=1 2 0 3 4 0 5 6 0 (3)矩阵和数组的除法 矩阵运算符为“”和“/”分别表示左除和右除。AB=A-1*B A/B=A*B-1。其中:A-1是矩阵的逆,也可用 inv(A)求逆矩阵。数组的除法运算表达式 “A.B”和“A./B”,分别为数组的左除和右除,表示数组相应元素相除。A 和 B 数组必须大小相同,除非其中有一个是标量。【例 2.12】已知方程组9xx4x55xx3x53xx2x321321321,用矩阵除法来解线性方程
26、组。解:将该方程变换成 AX=B 的形式。其中:114513312A,955B A=2-1 3;3 1-5;4-1 1 A=2 -1 3 3 1 -5 4 -1 1 B=5;5;9 B=5 5 9 X=AB X=2 -1 0 在线性方程组 A*X=B 中,mn 阶矩阵 A 的行数 m 表示方程数,列数 n 表示未知数的个数。n=m,A 为方阵,ABinv(A)*B。m n,是最小二乘解,X=inv(A*A)*(A*B)m ,则是令 X 中的 n-m 个元素为零的一个特殊解。X=inv(A*A)*(A*B)(4)矩阵和数组的乘方 矩阵乘方的运算表达式为“AB”,其中 A 可以是矩阵或标量。当 A
27、 为矩阵,必须为方阵:B 为正整数时,表示 A 矩阵自乘 B 次;B 为负整数时,表示先将矩阵 A 求逆,再自乘|B|次,仅对非奇异阵成立;B 为矩阵时不能运算,会出错;B 为非整数时,将 A 分解成 A=W*D/W,D 为对角阵,则有 AB=W*DB/W。当 A 为标量:B 为矩阵时,将 A 分解成 A=W*D/W,D 为对角阵,则有 AB=W*diag(D.B)/W。数组乘方的运算表达式“A.B”。当 A 为矩阵,B 为标量时,则将 A(i,j)自乘 B 次;当 A 为矩阵,B 为矩阵时,A 和 B 数组必须大小相同,则将 A(i,j)自乘 B(i,j)次;当 A 为标量,B 为矩阵时,将
28、 A B(i,j)构成新矩阵的第 i 行第 j 列元素。【例 2.13】矩阵和数组的除法和乘方运算。x1=1 2;3 4;x2=eye(2)x2=1 0 0 1 x1/x2%矩阵右除 ans=1 2 3 4 inv(x1)%求逆矩阵 ans=-2.0000 1.0000 1.5000 -0.5000 x1x2%矩阵左除 ans=-2.0000 1.0000 1.5000 -0.5000 x1./x2%数组右除 Warning:Divide by zero.(Type warning off MATLAB:divideByZero to suppress this warning.)ans=1
29、Inf Inf 4 x1.x2%数组左除 ans=1.0000 0 0 0.2500 x12%矩阵乘方 ans=7 10 15 22 x1-1%矩阵乘方,指数为-1 与 inv 相同 ans=-2.0000 1.0000 1.5000 -0.5000 x10.2%矩阵乘方,指数为小数 ans=0.8397+0.3672i 0.2562-0.1679i 0.3842-0.2519i 1.2239+0.1152i 2x1%标量乘方 ans=10.4827 14.1519 21.2278 31.7106 2.x1%数组乘方 ans=2 4 8 16 x1.x2%数组乘方 ans=1 1 1 4 3.
30、矩阵和数组的转置 矩阵的转置运算“A”表示矩阵 A 的转置,如果矩阵 A 为复数矩阵,则为共轭转置。数组的转置运算“A.”表示数组 A 的转置,如果数组 A 为复数数组,则不是共轭转置。【例 2.14】矩阵和数组转置运算。x1=1 2;3 4;x2=eye(2);x3=x1+x2*i x3=1.0000+1.0000i 2.0000 3.0000 4.0000+1.0000i x3%矩阵转置 ans=1.0000-1.0000i 3.0000 2.0000 4.0000-1.0000i x3.%数组转置为共轭转置 ans=1.0000+1.0000i 3.0000 2.0000 4.0000+
31、1.0000i 4.矩阵和数组的数学函数 MATLAB 中数学函数对数组的每个元素进行运算。数组的基本函数如表 2.5 所示。表 2.5 基本函数 函数名 含义 函数名 含义 abs 绝对值或者复数模 rat 有理数近似 sqrt 平方根 mod 模除求余 real 实部 round 4 舍 5 入到整数 imag 虚部 fix 向最接近 0 取整 conj 复数共轭 floor 向最接近-取整 sin 正弦 ceil 向最接近-取整 cos 余弦 sign 符号函数 tan 正切 rem 求余数留数 asin 反正弦 exp 自然指数 acos 反余弦 log 自然对数 atan 反正切 l
32、og10 以 10 为底的对数 atan2 第四象限反正切 pow2 2 的幂 sinh 双曲正弦 bessel 贝赛尔函数 cosh 双曲余弦 gamma 伽吗函数 tanh 双曲正切 【例 2.15】使用数组的算术运算函数。t=linspace(0,2*pi,6)t=0 1.2566 2.5133 3.7699 5.0265 6.2832 y=sin(t)%计算正弦 y=0 0.9511 0.5878 -0.5878 -0.9511 -0.0000 y1=abs(y)%计算绝对值,将正弦曲线变成全波整流 y1=0 0.9511 0.5878 0.5878 0.9511 0.0000 1-e
33、xp(-t).*y%计算按指数衰减的正弦曲线 ans=1.0000 0.7293 0.9524 1.0136 1.0062 1.0000 S 为标量,A、B 为矩阵。表 2.6 矩阵和数组运算对比表 数组运算 矩阵运算 命令 含义 命令 含义 A+B 对应元素相加 A+B 与数组运算相同 A-B 对应元素相减 A-B 与数组运算相同 S.*B 标量 S 分别与 B 元素的积 S*B 与数组运算相同 A.*B 数组对应元素相乘 A*B 内维相同矩阵的乘积 S./B S 分别被 B 的元素左除 SB B 矩阵分别左除 S A./B A 的元素被 B 的对应元素除 A/B 矩阵 A 右除 B 即 A
34、 的逆阵与 B 相乘 B.A 结果一定与上行相同 BA A 左除 B(一般与上行不同)A.S A 的每个元素自乘 S 次 AS A 矩阵为方阵时,自乘 S 次 A.S S 为小数时,对 A 各元素分别求非整数幂,得出矩阵 AS S 为小数时,方阵 A 的非整数乘方 S.B 分别以 B 的元素为指数求幂值 SB B 为方阵时,标量 S 的矩阵乘方 A.非共轭转置,相当于 conj(A)A 共轭转置 exp(A)以自然数 e 为底,分别以 A 的元素为指数求幂 expm(A)A 的矩阵指数函数 log(A)对 A 的各元素求对数 logm(A)A 的矩阵对数函数 sqrt(A)对 A 的各元素求平
35、方根 sqrtm(A)A 的矩阵平方根函数 f(A)求 A 各个元素的函数值 funm(A,FUN)矩阵的函数运算 注意:funm(A,FUN)要求 A 必须是方阵,“FUN”为矩阵运算的函数名。5.关系操作和逻辑操作(1)关系运算 关系操作符:、=、=(等于)、=(不等于)关系运算规则:两个变量都是标量,则结果为真(1)或假(0)。两个变量都是数组,则必须大小相同,结果也是同样大小的数组,数组的元素为 0或 1。一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组,数组的元素为 0 或 1。、=,仅对参加比较变量的实部进行比较,=和=,则同时对实部和虚部进行比较。
36、(2)逻辑运算 逻辑操作符:&(与)、|(或)、(非)和 xor(异或)。&(先决与)逻辑运算符是当该运算符的左边为 1(真)时,才继续执行该符号右边的运算。|(先决或)逻辑运算符是该当运算符的左边为 1(真)时,就不需要继续执行该符号右边的运算,而立即得出该逻辑运算结果为 1(真);否则,就要继续执行该符号右边的运算。逻辑运算规则:在逻辑运算中,非 0 元素表示真(1),0 元素表示假(0),逻辑运算的结果为 0 或 1,逻辑运算法则如表 2.7 所示。表 2.7 逻辑运算 a b a&b a|b a xor(a,b)0 0 0 0 1 0 0 1 0 1 1 1 1 0 0 1 0 1 1
37、 1 1 1 0 0 两个变量都是标量,则结果为 0、1 的标量。两个变量都是数组,则必须大小相同,结果也是同样大小的数组。一个数组和一个标量,则把数组的每个元素分别与标量比较,结果为与数组大小相同的数组。a=0;b=5;c=10;(a=0)&(bc)ans=0 (a=0)|(bc)ans=1 【例 2.16】数组的关系和逻辑运算,其中 y1 曲线如图 2.3 所示。t=linspace(0,3*pi,10);y=sin(t)%计算正弦曲线 y=Columns 1 through 6 0 0.8660 0.8660 0.0000 -0.8660 -0.8660 Columns 7 throug
38、h 10 -0.0000 0.8660 0.8660 0.0000 t1=(t2*pi)t1=1 1 1 0 0 0 0 1 1 1 y1=t1.*y%得出 0 和 23 的半波整流 y1=Columns 1 through 6 0 0.8660 0.8660 0 0 0 Columns 7 through 10 0 0.8660 0.8660 0.0000 (3)函数运算 MATLAB 中能得出真(1)和假(0)结果的函数有:关系逻辑函数、工作状态判断函数、特殊数据判断函数和数据类型函数。a=b=1 Inf 0 1 0 2 1 0 表2.8 关 系 逻 辑 函 数 函 数 名 功 能 例 子
39、 输 入 结 果 all(A)判 断A的 列 向 量 元 素 是 否 全 非0,全 非0则 为1 all(a)ans=0 1 any(A)判 断A的 列 向 量 元 素 中 是 否 有 非0元 素,有 则 为1 any(a)ans=1 1 isequal(A,B)判 断A、B对 应 元 素 是 否 全 相 等,相 等 为1 isequal(a,b)ans=0 isempty(A)判 断A是 否 为 空 矩 阵,为 空 则 为1,否 则为0 isempty(a)ans=0 isfinite(A)判 断A的 各 元 素 值 是 否 有 限,是 则 为1 isfinite(a)ans=1 0 1 1
40、 isinf(A)判 断A的 各 元 素 值 是 否 无 穷 大,是 则 为1 isinf(a)ans=0 1 0 0 isnan(A)判 断A的 各 元 素 值 是 否 为NAN,是 则 为1 isnan(a)ans=0 0 0 0 isnumeric(A)判 断 数 组A的 元 素 是 否 全 为 数 值 型 数 组 isnumeric(a)ans=1 isreal(A)判 断 数 组A的 元 素 是 否 全 为 实 数,是 则 为1 isreal(a)ans=1 isprime(A)判 断A的 各 元 素 值 是 否 为 质 数,是 则 为1 isprime(b)ans=0 0 0 0
41、isspace(A)判 断A的 各 元 素 值 是 否 为 空 格,是 则 为1 isspace(a)ans=0 0 0 0 find(A)寻 找A数 组 非0元 素 的 下 标 和 值 find(b)ans=2 3 6.运算符优先级 在 MATLAB 中各种运算符的优先级如下:(矩阵转置)、(矩阵幂)和.(数组转置)、.(数组幂)(逻辑非)*(乘)、/(左除)、(右除)和.*(点乘)、./(点左除)、.(点右除)+、-(加减):(冒号)、=、=&(逻辑与)|(逻辑或)&(先决与)|(先决或)2.2.5 多维数组 1.多维数组的创建(1)通过“全下标”元素赋值方式创建 a(:,:,2)=1 2
42、;3 4%创建三维数组 b=1 1;2 2%先创建二维数组 b=1 1 2 2 b(:,:,2)=5%扩展数组 b(:,:,1)=1 1 2 2 b(:,:,2)=5 5 5 5 (2)由函数 ones、zeros、rand 和 randn 直接创建 例如,用函数 rand 直接创建三维随机数组:rand(2,4,3)ans(:,:,1)=0.9501 0.6068 0.8913 0.4565 0.2311 0.4860 0.7621 0.0185 ans(:,:,2)=0.8214 0.6154 0.9218 0.1763 0.4447 0.7919 0.7382 0.4057 ans(:,
43、:,3)=0.9355 0.4103 0.0579 0.8132 0.9169 0.8936 0.3529 0.0099(3)利用函数生成数组 将一系列数组沿着特定的维连接成一个多维数组 语法:cat(维,p1,p2,)说明:第一个参数维是指沿着第几维连接数组 p1、p2 等。按指定行列数放置模块数组生成多维数组 语法:repmat(p)repmat(p,行 列 页)说明:第一个输入变量 p 是用来放置的模块数组,后面的变量是要放在指定的各维。在总元素的数目不变的前提下重新确定数组的行列数来重组数组 语法:reshape(p)reshape(p,行 列 页)说明:第一个变量是待重组的数组 p,
44、后面的变量是重新生成数组的行数、列数、页数”。【例 2.18】用函数来生成多维数组。a=1 2;3 4;b=1 1;2 2;c=cat(2,a,b)%沿着第二维连接生成数组 c c=1 2 1 1 3 4 2 2 cat(3,a,b)%沿着第三维连接 ans(:,:,1)=1 2 3 4 ans(:,:,2)=1 1 2 2 repmat(a,2 2 2)%放置模块数组 a ans(:,:,1)=1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 ans(:,:,2)=1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 reshape(c,2 2 2)%重组二维数组为
45、2 行 2 列 2 页的三维数组 ans(:,:,1)=1 2 3 4 ans(:,:,2)=1 1 2 2 2.多维数组的标识 直接给出数组的维数 语法:ndims(p)给出数组各维的大小 语法:m,n,=size(p)%得出各维的大小 m=size(p,x)%得出某一维的大小 说明:p 为需要得出大小的多维数组;m 为行数,n 为列数;当只有一个输出变量时,x=1 返回第一维(行数),x=2 返回第二维(列数),以此类推。返回行数或列数的最大值 语法:length(p)说明:length(p)等价于 max(size(p)。【例 2.19】得出矩阵的大小。a=1 2;3 4;5 6 a=1
46、 2 3 4 5 6 ndims(a)%得出维数 ans=2 size(a)%得出各维的大小 ans=3 2 size(a,2)%得出列的大小 ans=2 length(a)%得出最大维的大小 ans=3 2.3 稀疏矩阵 一个矩阵中如果包含很多元素值为 0,则此矩阵可以只存储少量的非 0 元素,这个矩阵称为稀疏矩阵(Sparse Matrix)。2.3.1 稀疏矩阵的建立 稀疏矩阵大部分的元素都是 0,因此只需储存非零元素的下标和元素值,这种特殊的存储方式可以节省大量的存储空间和不必要的运算。1.使用 sparse 函数产生稀疏矩阵 sparse 函数用于创建稀疏矩阵,或将一个全元素矩阵直接
47、转换成稀疏矩阵。语法:sparse(i,j,s,m,n)%直接创建稀疏矩阵 sparse(p)%由全元素矩阵 p 转换为稀疏矩阵 说明:i、j 是非 0 元素的行、列下标;s 是非 0 元素所形成的向量;m、n 是 s 的行、列维数,可省略;i、j、s 都是长度相同的向量,生成矩阵的元素 s(k)下标分别是 i(k)和 j(k);p为全元素矩阵。【例 2.20】产生稀疏矩阵。a=eye(3);a(4,:)=-5-2-3 a=1 0 0 0 1 0 0 0 1 -5 -2 -3 b=sparse(a)%创建稀疏矩阵 b=(1,1)1 (4,1)-5 (2,2)1 (4,2)-2 (3,3)1 (
48、4,3)-3 c=sparse(1 4 2 4 3 4,1 1 2 2 3 3,1-5 1-2 1-3)%创建与 b 相同的稀疏矩阵 c=(1,1)1 (4,1)-5 (2,2)1 (4,2)-2 (3,3)1 (4,3)-3 与 sparse 函数相反,full 函数可将稀疏矩阵转变为全元素矩阵。语法:full(p)%将稀疏矩阵 p 转变为全元素矩阵【例 2.20 续】将稀疏矩阵转变为全元素矩阵。full(b)ans=1 0 0 0 1 0 0 0 1 -5 -2 -3 2.用 spdiags 函数创建稀疏矩阵 spdiags 函数是用对角线元素来构建一个稀疏矩阵。语法:spdiags(D,
49、k,m,n)说明:矩阵 D 的每一列代表矩阵的对角线向量;k 代表对角线的位置(0 代表主对角线,1 代表向下位移一单位的次对角线,1 代表向上位移一单位的次对角线,依此类推);m、n 分别代表矩阵的行、列维数。【例 2.20 续】用 spdiags 函数创建稀疏矩阵。D=3 2 9;2 4 9;1 1 4 D=3 2 9 2 4 9 1 1 4 d=0 1 2;s=spdiags(D,d,4,3)%构成 4 行 3 列的稀疏矩阵 s=(1,1)3 (1,2)4 (2,2)2 (1,3)4 (2,3)1 (3,3)1 full(s)ans=3 4 4 0 2 1 0 0 1 0 0 0 程序分
50、析:可以看出矩阵 s 的三个非零对角线向量分别是 D 的三个列向量。主对角线为“3 2 1”;向上位移一单位的次对角线为“2 4 1”,但其中“2”被移掉了;向上位移两单位的次对角线为“9 9 4”,但其中“9 9”都被移掉了。3.用 spconvert 函数从外部文件输入稀疏矩阵 可以将 load 命令和 spconvert 函数结合,将文本文件(如*.dat)调用到内存,然后将文本文件内容转换成稀疏矩阵。也可以直接用 save 或 load 命令将稀疏矩阵保存到 MAT 文件中或从 MAT 文件调用到内存中。语法:spconvert(Filename)【例 2.20 续】用 load 命令