1、2.1 MATLAB的数据类 2.2 简单的数学运算 2.3 向量及其运算 2.4 矩阵的初等运算 2.5 关系和逻辑运算,2.1 MATLAB的数据类型,MATLAB语言不要求对所使用的变量进行事先说明,而且它也不需要指定变量的类型,系统会根据该变量被赋予的值或对该变量所进行的操作来自动确定变量的类型。对于数值型数据系统默认为双精度格式double(8个字节)。 变量名长度不超过63位,超过63位的字符系统将忽略不计。 变量名区分大小写。 变量名必须以字母开头,变量名中可以包含字母、数字或下划线,但不允许出现标点符号和中文字符。,2,3,2.1.1 字符和字符串,MATLAB 对字符串的设定
2、非常简单,只需用两个单引号()将需设定的字符串引注即可。字符包括字母、空格、汉字和其它类型。字符串显示使用disp函数。,4, str=今天,是2005年10月25日, 我们班一起去上海旅游。 str = 今天,是2005年10月25日, 我们班一起去上海旅游。 disp(str) 今天,是2005年10月25日, 我们班一起去上海旅游。 disp(str) str,2.1.2 数值类数据,A 常量在MATLAB中有一些特定的变量,它们已经被预定义了某个特定的值,因此这些变量被称为常量。在添加新的变量的时候,不要与常量重名。,5,B 数值变量 (1)整数,6,(2)浮点数,几乎在所有的情况下,
3、MATLAB的数据都是以双精度数值来表示的,这些双精度数在系统内部用二进制来表示。这是计算机通常的表示数据的方式。,7,(3)复数,数字后面加“i”或“j”表示虚数,8, a=1+2i a =1.0000 + 2.0000i b=3-4j b = 3.0000 - 4.0000i c=3+i5 ? Undefined function or variable i5. whosName Size Bytes Class Attributesa 1x1 16 double complexb 1x1 16 double complex,1.直接输入法 在命令窗口输入表达式后,按Enter键,该就指令
4、被执行,结果赋值与临时变量ans。,2.存储变量法 : 变量=表达式(数值) grade1=3*30 grade1 =90,9,2.2 简单的数学运算,3*30+3*35+4*30+4*32 ans = 443, grade2=3*35 grade2 =105, total=grade1+grade2 total =195,如果不需要显示运算结果,在输入表达式后加一分号“;”,MATLAB返回空白提示符。 a=magic(3)a =8 1 63 5 74 9 2 a=magic(3); ,检查单个变量的维数,一维可用lengh,二维可用size命令。 a=magic(3); m,n=size(
5、a) m =3 n =3,如果想需要检查工作空间的变量及其维数,除了直接在工作空间观察外,还可在命令窗口输入who 或者whos命令。 b=你好; c=3+4j; who Your variables are: a b c whos %如想单独查看a变量,whos aName Size Bytes Class Attributesa 3x3 72 double b 1x2 4 char c 1x1 16 double complex,检查一个变量是否已经存在,A exist 命令exist(a)ans =1 %返回值为1,变量存在 exist(a)ans =0 %返回值为0,变量不存在,B 直
6、接输入变量名 cc =3.0000 + 4.0000i %返回结果,变量存在 d ? Undefined function or variable d. %出错信息,变量不存在,如果想删除工作空间的变量,可在命令窗口输入clear clear c %清楚变量,或者恢复变量为默认值 whosName Size Bytes Class Attributesa 3x3 72 double b 1x2 4 char 如果单独输入clear则清除全部变量或恢复默认变量的值 clear pi,数值运算符号,14,15,2.3 向量及其运算 2.3.1在命令窗口中直接输入向量向量元素用“ ”括起来,用空格或
7、逗号生成行向量;用分号生成列向量。,a1=15;21;27;93;101; a1 a1 =15212793101, a2 =15 21 27 93 101;a2 =15 21 27 93 101,可以用转置命令在行向量和列向量之间转化,注意非共轭置“.”与共轭转置”的区别。,非共轭转置,a=1 2i 3 4+5i ; a. ans =1.0000 0 + 2.0000i3.0000 4.0000 + 5.0000i,共轭转置, a=1 2i 3 4+5i; a ans =1.0000 0 - 2.0000i3.0000 4.0000 - 5.0000i,16,17,2.3.2 等差、等比向量元
8、素的生成,当向量的元素过多,此时采用直接输入法将过于繁琐。可以利用向量各元素宋之问的规律,可以使用下面几种方法来生成元素向量。,a. 冒号(起点:步长:终点), (起点:终点)时默认步长为1 vec1=10:5:60 vec1 =10 15 20 25 30 35 40 45 50 55 60 b. linspace(起点,终点,个数) 函数 vec2=linspace (10,60,11) vec2 =10 15 20 25 30 35 40 45 50 55 60 c. logspace函数来生成10的幂次之间的等比元素向量。 vec3=logspace(0,1,5) vec3 =1.00
9、00 1.7783 3.1623 5.6234 10.0000,18,2.3.3 向量与常数的四则运算,a.向量与常数的加法(减法):向量中的每个元素与数的加法(减法)运算。 vec1=80:-9:10 vec1 =80 71 62 53 44 35 26 17 vec1+101 ans =181 172 163 154 145 136 127 118 b.向量与常数的乘法(除法):向量中的每个元素与数的乘法(除法)运算。 vec1*6 ans =480 426 372 318 264 210 156 102,19,2.3.4 向量寻址,通过对向量下标的访问来实现对向量元素的寻址。 A=ran
10、d(1,5) A =0.9501 0.2311 0.6068 0.4860 0.8913 A(4) %第4个元素 ans =0.4860 A(2,5) %第2,5个元素 ans =0.2311 0.8913 A(:) %所有元素,等同于A(1,2,3,4,5) A =0.9501 0.2311 0.6068 0.4860 0.8913,20,2.4 矩阵的初等运算,2.4.1 矩阵的生成 一般矩阵在命令窗口中直接输入矩阵(在“ ”中同一行元素以逗号或空格隔开,不同行元素之间以分号分隔) 通过语句和函数产生矩阵 在M文件中建立矩阵 从外部的数据文件中导入矩阵,21, matrix=1 ,1, 1
11、, 1;2, 2, 2, 2;3, 3, 3, 3;4, 4, 4, 4 matrix =1 1 1 12 2 2 23 3 3 34 4 4 4, a=1 2 34 5 67 8 9 a =1 2 34 5 67 8 9,22,b. 特殊矩阵的生成,全零矩阵和全幺矩阵的生成 (zeros 、ones) 随机矩阵的生成 (rand、randn ) 单位矩阵(eye) Hilbert矩阵和反Hilbert矩阵的生成 (hilb、invhilb ) 对角矩阵的生成 (diag) 范德蒙德矩阵的生成 (vander) 魔方矩阵的生成 (magic) 当函数括号中只有一个正整数(n)时,表示生成nn维
12、矩阵,括号中有两个正整数(m,n)时,表示生成mn维矩阵。,23,特殊矩阵的生成举例,matrix1=rand(2,3) %平均值为0.5,0 1之间的随机矩阵 matrix1 =0.3050 0.0150 0.97080.8744 0.7680 0.9901, eye(3) ans =1 0 00 1 00 0 1, matrix2=ones(4) matrix2 =1 1 1 11 1 1 11 1 1 11 1 1 1, matrix2=randn(4)%平均值为0,正态分布的随机矩阵 matrix2 =0.2916 0.6966 -1.1658 2.58550.1978 0.8351
13、-1.1480 -0.66691.5877 -0.2437 0.1049 0.1873-0.8045 0.2157 0.7223 -0.0825,2.4.2 矩阵分析,a = 2 9 0 0; 0 4 1 4; 7 5 5 1; 7 8 7 4 a =2 9 0 00 4 1 47 5 5 17 8 7 4det(a) %行列式的值,只对方阵有效 ans =-275 rank(a) %秩,最大无关向量数 ans =4 rref(a) %矩阵的约化 ans =1 0 0 00 1 0 00 0 1 00 0 0 1,inv(a) %求逆,等同A-1 ans =-0.0727 0.4255 0.7
14、855 -0.62180.1273 -0.0945 -0.1745 0.13820 -0.6000 -0.8000 0.8000-0.1273 0.4945 0.3745 -0.3382 trace(a) %迹,对角元素的和 ans =15 cond(a) %条件数,越大表示矩阵越病态 ans =33.4763 norm(a) %范数 ans =18.3247,25,2.4.3 矩阵的结构操作,矩阵的标识 矩阵的扩充 和合并 矩阵的部分删除 矩阵的修改 矩阵结构的改变 矩阵的旋转和翻转 矩阵的提取 矩阵的分解,26,a 矩阵的标识, A=rand(2,4) A =0.7382 0.4057 0
15、.9169 0.89360.1763 0.9355 0.4103 0.0579, A(:,2) %第二列所有元素 ans =0.40570.9355 A(2,2,4)%第二行第2、4元素 ans =0.9355 0.0579, A(1,3) ans =0.9169 A(5) ans =0.9169,矩阵A元素排列顺序为1 3 5 7 2 4 6 8,b 矩阵的扩充和合并, A=magic(3) A =8 1 63 5 74 9 2 A(4,2)=5 A =8 1 63 5 74 9 20 5 0 空缺的部分填0补上。, a=ones(2,3); b=zeros(2,3); a,b %具有相同的
16、行数 ans =1 1 1 0 0 01 1 1 0 0 0 a;b %具有相同的列数 ans =1 1 11 1 10 0 00 0 0,27,c 矩阵的部分删除,B =1.1892 0.2877 -0.4326-0.0376 -1.1465 -1.66560.3273 1.1909 0.1253B(2,:)= %对某一行或者列赋予空矩阵B =1.1892 3.0000 -0.43260.3273 1.1909 0.1253,28,d 矩阵的修改,对某一元素重新赋值 B(1,2)=3 B =1.1892 3.0000 -0.4326-0.0376 -1.1465 -1.66560.3273
17、1.1909 0.1253对几个相邻元素重新赋值 B(2,1,3)=2.5,4.6 B =1.1892 0.2877 -0.43262.5000 -1.1465 4.60000.3273 1.1909 0.1253,对某一行或者列重新赋值 B(2,:)=1 2 3 B =1.1892 0.2877 -0.43261.0000 2.0000 3.00000.3273 1.1909 0.1253对多个元素重新赋值B(1 3,1 3)=1 2; 3 4 B =1.0000 0.2877 2.0000-0.0376 -1.1465 -1.66563.0000 1.1909 4.0000,e 矩阵结构的
18、改变, A=magic(2) A =1 34 2C=A(:) C =1432,B =0.4120 0.2679 0.9334 0.21260.7446 0.4399 0.6833 0.8392 reshape(B,4,2) %元素个数不变ans =0.4120 0.93340.7446 0.68330.2679 0.21260.4399 0.8392,30,31,f 矩阵的旋转和翻转,A=randn(3) A =-0.4326 0.2877 1.1892-1.6656 -1.1465 -0.03760.1253 1.1909 0.3273 C=rot90(A) %逆时针旋转 C =1.1892
19、 -0.0376 0.32730.2877 -1.1465 1.1909-0.4326 -1.6656 0.1253, =fliplr(A) %左右翻转 B =1.1892 0.2877 -0.4326-0.0376 -1.1465 -1.66560.3273 1.1909 0.1253 C=flipud(A) %上下翻转 C =0.1253 1.1909 0.3273-1.6656 -1.1465 -0.0376-0.4326 0.2877 1.1892,g 矩阵的提取, A=magic(3) A =8 1 63 5 74 9 2, B=tril(A)%左下部分 B =8 0 03 5 04
20、 9 2, C=triu(A)%右上部分 C =8 1 60 5 70 0 2,33,8 矩阵的分解运算,Cholesky分解(chol) 奇异值分解(svd) 舒尔分解(shur) 三角分解(lu) 正交分解(qr) 特征值分析(eig),I Cholesky分解(chol),把矩阵分解为一个上三角矩阵的转置矩阵和其乘积,矩阵必须是对称正定的(行列式的值大于零)。, C=chol(A) C =1 1 1 10 1 2 30 0 1 30 0 0 1 C*C ans =1 1 1 11 2 3 41 3 6 101 4 10 20,34, A=pascal(4) A =1 1 1 11 2 3
21、 41 3 6 101 4 10 20,II奇异值分解(svd),把mn阶矩阵A分解为一个mm 阶的正交矩阵U(U*U为单位矩阵),一个 mn阶的非负对角矩阵S ,一个nn阶的正交矩阵V的乘积。, AA =8 1 63 5 74 9 2, U,S,V=svd(A) U =-0.5774 0.7071 0.4082-0.5774 0.0000 -0.8165-0.5774 -0.7071 0.4082 S =15.0000 0 00 6.9282 00 0 3.4641 V =-0.5774 0.4082 0.7071-0.5774 -0.8165 -0.0000-0.5774 0.4082 -
22、0.7071,35,III舒尔分解(schur),把方阵A分解为一个正交矩阵U,一个块对角矩阵S ,A=U*S*U。A的特征值由S的对角线元素给出。, U,S=schur(A)U =-0.5774 -0.8131 -0.0749-0.5774 0.4714 -0.6667-0.5774 0.3416 0.7416S =15.0000 0.0000 0.00000 4.8990 -3.46410 0 -4.8990,36,eig(A)ans =15.00004.8990-4.8990,37,IV三角分解(lu)把任意矩阵分解为一个准下三角矩阵和上三角矩阵的乘积X =6 2 -12 4 01 4
23、-1-1 -1 3, l,u=lu(X) l =1.0000 0 00.3333 0.9091 0.40680.1667 1.0000 0-0.1667 -0.1818 1.0000 u =6.0000 2.0000 -1.00000 3.6667 -0.83330 0 2.6818 X=l*u,38,V正交分解 把任意矩阵分解为一个正交矩阵和一个上三角矩阵的乘积。 A=17 3 4;3 1 12;4 12 8 Q,R=qr(A) Q =-0.9594 0.2294 0.1643-0.1693 -0.0023 -0.9856-0.2257 -0.9733 0.0411 R =-17.7200
24、-5.7562 -7.67490 -10.9939 -6.89670 0 -10.8412,VI 矩阵的特征值分析,求方阵的特征向量和特征值 A=magic(3) A =8 1 63 5 74 9 2 V,D=eig(A) V =-0.5774 -0.8131 -0.3416-0.5774 0.4714 -0.4714-0.5774 0.3416 0.8131 D =15.0000 0 00 4.8990 00 0 -4.8990 A*V(:,1)=15*V (:,1),39,40,2.4.4 矩阵的初等运算,矩阵的四则运算 矩阵的指数和对数运算 矩阵元素的数学函数 求解线性方程组,1 矩阵的
25、四则运算,矩阵的加减法 相同阶数矩阵A和B对应元素的加减。, c=magic(3) c =8 1 63 5 74 9 2 a-c ? Error using = minus Matrix dimensions must agree.,a=1 2;3 4 a =1 23 4,41,b.矩阵乘法,A.*B :相同维数两个矩阵对应元素的乘积:A(i,j)*B(i,j) 。,A*B:矩阵乘法(注意与点乘的区别) c2=a*bc2 =19 2243 50,Kron积 K = kron(X,Y) = X(1,1)*Y, X(1,2)*Y, X(1,3)*Y;X(2,1)*Y, X(2,2)*Y, X(2,
26、3)*Y ,42,a=1 2;3 4; b=5,6;7,8; c1=a.*bc1 =5 1221 32,c 矩阵除法,A./B =A(i,j)/B(i,j) 矩阵元素右除法。 相同维数的两个矩阵,矩阵A元素除以矩阵B对应元素。 A.B =B(i,j)/A(i,j) 矩阵元素左除法。相同维数的两个矩阵,矩阵B元素除以矩阵A对应元素。 B/A 矩阵右除法,MATLAB求线性方程组X*A=B的解。 AB 矩阵左除法,MATLAB求线性方程组A*X=B的解。,43,2. 矩阵的指数和对数运算,s=magic(2) s =1 34 2 按元素运算 s.2 %每个元素求平方 ans =1 916 4 按矩
27、阵乘法运算 s2 %相当于 s*s ans =13 912 16,44, expm(s) % 把函数泰勒展开 1+s+sn/n!ans =63.6830 63.547684.7302 84.8655类似的矩阵运算命令:logm,sqrtm(如有重根s1,s2,取行列式为正的结果s1,即det(s1)0)。,3. 矩阵元素的数学函数,几乎所有的MATLAB函数,包括三角函数、复数函数、取整函数几乎都是针对矩阵元素的运算,除了几个特别的,即/、*、运算符和logm、expm和sqrtm三个函数。见23页表2-4。 注意“./、.*、.”与“/、*、”;以及“logm、expm、sqrtm”与“lo
28、gm、expm、sqrtm”区别。,45,I 三角函数与反三角函数(默认为弧度),46, a=1,2;3,4*pi/4 a =0.7854 1.57082.3562 3.1416, b=sin(a) b =0.7071 1.00000.7071 0.0000 c=asin(b) c =0.7854 1.57080.7854 0.0000,II.复数函数, C C =1.0000 2.0000 + 5.0000i3.0000 + 2.0000i 4.0000 + 1.0000i,47, imag(C)%虚部 ans =0 52 1 angle(C)%相角 ans =0 1.19030.5880
29、0.2450 abs(C)%模或绝对值 ans =1.0000 5.38523.6056 4.1231,III. 求余函数,rem(a,b) a/b,与被除数a同号 rem(5.6,-2)ans =1.6000,mod(a,b) a/b,与除数b同号 mod(5.6,-2)ans =-0.4000,48,IV.特殊函数,Bessel 函数: besselj, bessely, besselh, besseli, besselk 缔合勒让徳函数 : legendre 误差函数:erf, erfc, erfcx, erfinv Beta函数:beta, betainc, betaln Gamma函
30、数:gamma, gamainc, gammaln Airy函数:airy,49,V.数论函数,分解质数因子f=factor(78) f =2 3 13最大公因子 g=gcd(18,27)g =9,最小公倍数 g=lcm(2,3)g =6组合Cnknchoosek(10,3)ans =120,51,VI.坐标变换函数,笛卡尔坐标系中的点(1,1,1)变换到球坐标和柱坐标, THETA,PHI,R=cart2sph(1,1,1)THETA =0.7854PHI =0.6155R =1.7321, THETA,THO,Z=cart2pol(1,1,1)THETA =0.7854THO =1.414
31、2Z =1,逆变换为sph2cart,pol2cart,52,4. 求解线性方程组,标准数学中是没有矩阵除法的,MATLAB采用采用“,/”表示求解线性方程组AX=B的解,对于非方阵并引入伪逆的概念pinv(A)=inv(A*A)*A对于非齐次线性方程组AX=B,A是mn阶矩阵,X和B为m维列向量。 mn 为超定方程组 mn 为欠定方程组 m=n 为恰定方程组,53,54,a 超定方程组方程数目大于未知数的数目(mn) , A不是方阵,没有逆矩阵(inv(A)或者A-1出错),方程无解,MATLAB可以寻求最小二乘法的解。,A =0 00.1000 0.01000.2000 0.04000.3
32、000 0.09000.4000 0.16000.5000 0.25000.6000 0.36000.7000 0.49000.8000 0.64000.9000 0.81001.0000 1.0000,B =-0.01000.04500.12000.20000.33000.52000.67000.95001.20001.45001.7800,而且AB和pinv(A)*B仍然合法,55,X=ABX=0.24201.5407, D=A*XD=00.03960.11000.21130.34330.50620.69990.92441.17971.46581.7827,可以看出D=AX不等于B,但X是
33、使D和B之间偏差的平方和最小的结果。, Y=pinv(A)*BY=0.24201.5407,56,b. 欠定方程组 方程数目小于未知数的数目(mn), A不是方阵,没有逆矩阵,解不唯一。pinv(A)*B和AB各可以得到一个特解。,57,A =3 1 4 84 2 6 04 2 1 6B =123,X=ABX =0.94590-0.2973-0.0811, Y=pinv(A)*BY =0.67120.4419-0.2615-0.0512,58, A*Xans =1.00002.00003.0000, A*Yans =1.00002.00003.0000,c.恰定方程组,如果A非奇异(行列式值d
34、et(A)不为零),inv(A)*B、pinv(A)*B、AB 结果相同,给出唯一精确解。,59, A=magic(3) A =8 1 63 5 74 9 2 B=1 2 3 B =123, inv(A)*B ans =0.05000.30000.0500 pinv(A)*B ans =0.05000.30000.0500 AB ans =0.05000.30000.0500, C=A B C =8 1 6 13 5 7 24 9 2 3 rref(C) ans =1.0000 0 0 0.05000 1.0000 0 0.30000 0 1.0000 0.0500,60,如果A奇异(行列式值
35、det(A)为零), A是非满秩矩阵,没有逆矩阵,方程组可以约化为超定方程组或者欠定方程组。AX=B无解或者解不唯一。可以采用pinv(A)*B得到方程的最小二乘法的解或者一个特解。, det(A) ans =0 rank(A) ans =2, A =1 3 7-1 4 41 10 18; B=3 6 0;,C=A B C =1 3 7 3-1 4 4 61 10 18 0 rref(C) ans =1.0000 0 2.2857 00 1.0000 1.5714 00 0 0 1.0000,AX=B 方程组可以约化为超定方程组,只有最小二乘法的解。,61, X=pinv(A)*BX =-1.
36、08921.2512-0.5235 A*Xans =-1.00004.00002.0000, AB Warning: Matrix is singular to working precision.ans =NaNInf-Inf inv(A) Warning: Matrix is singular to working precision. ans =Inf Inf InfInf Inf InfInf Inf Inf,62,X=pinv(A)*B X =0.3850-0.11030.7066 A*X ans =5.00002.000012.0000, B=5;2;12; C=A B C =1
37、3 7 5-1 4 4 21 10 18 12 rref(C) ans =1.0000 0 2.2857 2.00000 1.0000 1.5714 1.00000 0 0 0,AX=B 方程组可以约化为欠定方程组,而pinv(A)*B可以得到一个特解。,63,如果方程组AX=B中,矩阵A和B右端的微小变化,引起解向量X的很大变化,则称A为病态矩阵,称相应的方程组为病态方程组。否则,称A为良态矩阵,称相应的方程组为良态方程组。先看一个例子,说明方程组的解对或的扰动的敏感性问题。 例4.9 方程组,其准确解为(-0.17,0.22)T,若A及b作微小的变化,考扰动后的方程组,的准确解是(0.0,
38、0.1)T,矩阵条件数cond(A)越大,病态越严重得到的结果越不可靠。矩阵条件数也可由(最大奇异值/最小奇异值)得到。svd,对于实际问题,条件数一般是很难计算的。下列现象可能表示方程组Ax=b是病态的。当A 的行列式值相对来说很小,或A 的某些行(或列)近似线性相关时; 若用选主元素消去法求解时,出现小主元 ; 当A 的元素数量级相差很大,并且无一定规则时。,d 零空间求解,当AX=0时,null函数得到所有x的值。A = 1 2 31 2 31 2 3;,X = null(A);X =0.9636 0-0.1482 -0.8321-0.2224 0.5547,67,2.5 关系和逻辑运算
39、,关系操作符 关系与逻辑函数 逻辑操作符 各种运算符的优先级,68,2.5.1 关系操作符,关系操作符及其功能(结果1为真,0为否), x=magic(4) x =16 2 3 135 11 10 89 7 6 124 14 15 1 y=10*ones(4) y =10 10 10 1010 10 10 1010 10 10 1010 10 10 10, z=xyz =1 0 0 10 1 0 00 0 0 10 1 1 0, p,q=find(z=0) p =124413 q =122344, w=find(z=0)w =168121315,71,2.5.2 关系与逻辑函数,z =1 0 0 10 1 0 00 0 0 10 1 1 0, all(z) %默认对列向量进行操作 ans =0 0 0 0 any(z) ans =1 1 1 1,72,2.5.3 逻辑操作符,73,2.5.4 各种运算符的优先级,