《MATLAB矩阵及其运算.ppt》由会员分享,可在线阅读,更多相关《MATLAB矩阵及其运算.ppt(44页珍藏版)》请在三一办公上搜索。
1、第二章 数值计算功能,2.1 Matlab的数据类型2.2 向量及其运算2.3 矩阵及其运算2.4 数组及其运算2.5 多项式运算,2.1 Matlab的数据类型,1、变量 在MATLAB中,变量名是以字母开头,后接字母、数字或下划线的字符序列,最多63个字符。在MATLAB中,变量名区分字母的大小写。2、常量MATLAB有一些预定义的常量:,请练习在命令窗口打入Pi、1/0 0/0,在Matlab中,定义变量时应避免与常量名相同,以免改变这些常量的值。如果已改变了某个常量的值,可以通过“Clear+常量名”命令恢复该变量的初始设定值。,例如:pi100 pi=100 clear pipi,3
2、、数字变量,在MATLAB下进行基本数学运算,只需将运算式直接打入提示号()之后,并按入Enter键即可。MATLAB会将运算结果直接存入一个变量ans,代表MATLAB运算后的答案(Answer),并显示其数值于屏幕上。258*369 ans=95202也可输入 x=258*369 x=95202 计算值赋给了变量x,1、MATLAB语句的一般形式:变量=表达式例如:x=100;y=10*x;z=x2;w=sqrt(z)计算优先级,和sqrt的优先级最高,*、/次之,+、-的优先级最低。如 1+2*34 ans=1632、数字的输入输出格式在MATLAB中数值有多种显示形式,在默认情况下,若
3、数据为整数,则以整型表示;若为实数,则保留小数点后4位的浮点型表示。,输入输出格式format命令来控制:FORMAT SHORT 5位 FORMAT LONG 15位 FORMAT RAT 有理数表达具体可用 help format 查看MATLAB将所有变量均存成double的形式,不需要进行说明。以sqrt(2)为例来具体展示各种不同各式对显示的影响。format short,sqrt(2)ans=1.4142 format rational,sqrt(2)ans=1393/985,MATLAB基本数学函数(ELFUN),三角函数 sin 正弦函数 sinh 双曲正弦函数 asin 反正
4、弦函数 asinh 反双曲正弦函数 cos 余弦函数 cosh 双曲余弦函数 acos 反余弦函数 acosh 反双曲余弦函数 tan 正切函数 tanh 双曲正切函数 atan 反正切函数 atan2 四像限反正切函数 atanh 反双曲正切函数 sec 正割函数 sech 双曲正割函数 asec 反正割函数 asech 反双曲正割函数 csc 余割函数 csch 双曲余割函数 acsc 反余割函数 acsch 反双曲余割函数 cot 余切函数 coth 双曲余切函数 acot 反余切函数 acoth 反双曲余切函数,2、指数函数 exp 指数函数 log 自然对数函数 logl0 常用(以
5、10为底)对数函数 log2 以2为底对数函数 sqrt 平方根函数3、复数函数 abs 模函数 angle 相角函数 conj 复共轭函数 imag 复矩阵虚部 real 复矩阵实部4、舍入函数和剩余函数 fix 朝零方向舍入 floor 朝负方向舍入 ceil 朝正方向舍入 round 四舍五入函数 mod(带符号)求余函数 sign 符号函数,函数使用说明:(1)三角函数以弧度为单位计算。(2)abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值。(3)用于取整的函数有fix、floor、ceil、round,要注意它们的区别。输入命令:x=1+2i;y=3-sqrt(17);
6、z=(cos(abs(x+y)-sin(78*pi/180)/(x+abs(y),三、字符串1、关于字符串的约定在matlab中所有的字符串都用单引号设定后输入或赋值例如.S=very goodSize 命令用来查看字符数组s的维数s=matlab;size(s)ans=1 6 s=matlab;a=size(s);a(2)ans=6,2.字符数组的生成函数char可以用来生成字符数组例如.S3char(v,e,r,y);显示行向量,若s3,显示列向量;3、字符串和数组之间的转换(1)字符串转换为数值代码,用double例如:double(s3)(2)字符数组转换为字符串,用cellstr s
7、3=char(v,e,r,y);cellstr(s3)ans=very字符串和数字间的转换 num2str 数字转换为字符串 int2str 整数转换为字符串 mat2str 矩阵转换为字符串 str2num 转换字符串为数字 a=1:5;b=num2str(a),练习1.计算:当x分别等于x=5,y=6 时,(提示:在matlab中用表示次方运算是23,还要注意小括号的运用)2.计算:(提示:在matlab中三角函数都是弧度制,)3.用char法创建字符数组,并把该数组进行字符串和数字间的转换操作。4应用基本数学函数构造一些函数,并求一些函数值。,四、向量及其运算,1、向量的生成(1)直接输
8、入向量 向量元素需要用“”括起来,元素之间可以用空格、逗号分隔生成行向量或分号分隔,生成列向量。(2)利用冒号表达式生成向量基本形式为:x=x0:step:xn 可以省略Xn是尾元素数值限,而非尾元素值,当xn-x0恰为step值的整数倍时,Xn是尾元素值。如:a=12:3:35a=12 15 18 21 24 27 30 33Step可以为负,C=12:-2:5 b=12 10 8 6 Step=1时可省略。c=1:6,例如:计算的正弦,余弦值 x=0:15:105x=0 15 30 45 60 75 90 105 y=sin(x/180*pi)y=0 0.2588 0.5000 0.707
9、1 0.8660 0.9659 1.0000 0.9659 z=cos(x/180*pi)z=1.0000 0.9659 0.8660 0.7071 0.5000 0.2588 0.0000-0.2588(3)线性等分向量的生成调用格式:y=linspace(x1,x2)生成100维的行向量,使得y(1)=x1,y(100)=x2;y=linspace(x1,x2,n)生成n维的行向量,使得y(1)=x1,y(n)=x2;,a=linspace(1,100,6);aa=1.0000 20.8000 40.6000 60.4000 80.2000 100.00002、向量的基本运算:加减与数乘
10、a-1ans=0 19.8000 39.6000 59.4000 79.2000 99.0000a*2ans=2.0000 41.6000 81.2000 120.8000 160.4000 200.0000 3、点积、叉积及混合积的实现(1)点积dot(a,b)返回向量a,b的数量积。a和b必须同维。例:计算向量a=(1,2,3)和b=(3,4,5)的点积,a=1 2 3;b=3,4,5;dot(a,b)ans=26或 sum(a.*b)dot(a,b,dim)返回向量a,b在维数为dim的点积 dot(a,b,1)ans=3 8 15(2)叉积:C=cross(a,b)例 计算垂直于向量a
11、=(1,2,3)和b=(3,4,5)的向量 a=1 2 3;b=3,4,5;c=cross(a,b)c=-2 4-2,(3)混合积计算上面向量a,b,c的混合积 dot(a,cross(b,c)ans=24三、矩阵及其运算1、矩阵的生成(1)用赋值语句定义:多用于小矩阵的输入,以 为标识,同行元素以“,”或空格分开,行与行之间用“;”或回车符分隔。矩阵的元素可以是数字、字符串或表达式。表达式中不能包含没有定义的变量。a=1,2,3,4,5;6,7,8,9,10 a=1 2 3 4 5 6 7 8 9 10,(2)创建M文件输入大矩阵 M文件是一种可以在MATLAB环境下运行的文本文件,它可分为
12、命令式文件和函数式文件两种。这里用到命令式文件,用它的最简单的形式来创建大型矩阵。(1)启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵:%example.mexm=4 5 6 7 8 9 5,6 4 3,2 4 1 3 6 8 9 5 7,8,3,5,6,5(2)把输入的内容以纯文本方式存盘(设文件名为example.m)。(3)在MATLAB命令窗口中输入example.m,即运行该M文件,就会自动建立一个名为example的矩阵,可供以后使用。,(3)扩充、修改矩阵 先用赋值语句定义一个数组,再用数组编辑器Array Editor进行修改:b=1;再在Workspace 中选择b
13、,取右键的Open Selection,可以修改维数,并输入元素的值。bb=1 2 3 4 5 6 7 8练习(1)请创建一个2*3的矩阵,然后利用编辑器将其扩充为4*5矩阵。(2)请用赋值语句建立一个矩阵(3)利用冒号表达式生成向量的方式计算函数 在x0,1,2,3,4,5,6,7,8各点的函数值。,2、矩阵的运算,例 矩阵相乘 a=2 1-3-1;3 1 0 7;-1 2 4-2a=2 1-3-1 3 1 0 7-1 2 4-2 b=a%矩阵b是矩阵a的转置矩阵b=2 3-1 1 1 2-3 0 4-1 7-2 a*aans=14 3-10 21 3 6 5 2-10 5 25-5 21
14、2-5 54 a*aans=15 0-10 0 59-15-10-15 25,练习:1.自己随意构造符合运算要求的矩阵进行加减乘的运算;2.A=1,2,3,计算A与A的积,2.矩阵与常数的运算 矩阵与常数间的运算即为矩阵的每一个元素与常数的运算。需注意的是当做除法运算时,常数只能做除数。例 A=2,3,4;5,6,7 A=2 3 4 5 6 7 C1=A*2 C1=4 6 8 10 12 143.矩阵的逆运算例:inv(A)求矩阵A的逆矩阵。a=2 1-3-1;3 1 0 7;-1 2 4-2;1 0-1 5;inv(a)inv(a)*a,当矩阵是长方阵时,无法求得矩阵的逆,此时可以用pinv
15、(A)求矩阵A的伪逆,例:a=1,2;3,4;5,6a=1 2 3 4 5 6 b=pinv(a)b=-1.3333-0.3333 0.6667 1.0833 0.3333-0.4167 b*a%是2*2的单位阵ans=1.0000 0.0000 0 1.0000 a*b%是3*3的矩阵,非单位阵ans=0.8333 0.3333-0.1667 0.3333 0.3333 0.3333-0.1667 0.3333 0.8333,4.矩阵的除法-左除和右除/AB表示A左除B,相当于是inv(A)*B;A/B表示A右除B,相当于是A*inv(B)例 a=1,2;3,4;5,6a=1 2 3 4 5
16、 6 b=5,6;7,8;9,10b=5 6 7 8 9 10 c=abC=-3.0000-4.0000 4.0000 5.0000 d=a/bd=2.0000 0-1.0000 1.5000 0-0.5000 1.0000 0 0,e=bae=5.0000 4.0000-4.0000-3.0000 f=b/af=0.0000 0 1.0000-0.5000 0 1.5000-1.0000 0 2.0000说明:可以用矩阵求逆和矩阵除法求解线性方程组对于线性方程组Ax=b,我们有两种解法:利用逆矩阵求解:x=inv(A)*b利用矩阵的左除求解:x=Ab,5.矩阵的行列式运算行列式函数det(A
17、)例:X=fix(rand(4)*10)X=8 3 8 5 6 5 5 4 3 7 3 6 2 3 7 6 a=det(X)a=-246练习 求A矩阵及其逆的行列式的积练习:自己构造矩阵,对以上讲得运算(常数与矩阵,矩阵的逆以及左右除和行列式)进行验证。,矩阵的基本函数运算1.特征值函数 在线性代数中,当矩阵A,常数 满足 时,称为A的特征根;而x 就称为特征向量。在MATLAB中,特征根与特征向量可由两个函数eig 和eigs 计算得出例 A=7,3,-2;3,4,-1;-2,-1,3;x,y=eig(A)其中y为特征根向量,x为特征根对应的特征向量矩阵2.秩函数 矩阵的秩由函数rank 实
18、现例 求上例中矩阵A的秩,命令rank(A)3、矩阵的幂运算矩阵的幂运算的形式同数字的幂运算的形式相同,即用算符“”表示。,3.迹函数 矩阵上所有对角线上元素的和称为矩阵的迹,由trace 函数实现。例 求上例中矩阵A的迹,命令trace(A)4.伪逆函数 伪逆矩阵,也就是数学上的广义逆矩阵,一般当A不为方阵,而是一个 的矩阵时或者A奇异时,用pinv函数实现。例 a=magic(4);inv(a);pinv(a)b=a*1,1,1,1 inv(a)*b pinv(a)*b练习:自己随意构造矩阵,求他们的特征值函数,迹、秩和伪逆,matlab基本矩阵1.几种常用的工具阵 zeros 零矩阵函数
19、 zeros(N):生成 阶的全零阵zeros(M,N):生成 阶的全零阵 zeros(size(A)生成与A同阶的全0阵 ones 全一矩阵ones(N):生成 阶的全1阵ones(M,N):生成 阶的全1阵 ones(size(A)生成与A同阶的全1阵 eye 单位矩阵 rand 均匀分布随机数(阵),元素位于(0.0,1.0)内 randn 正态分布随机数(阵),元素属于N(0,1)正态分布例 建立随机矩阵:(1)在区间20,50内均匀分布的5阶随机矩阵。(2)均值为0.6、方差为0.1的5阶正态分布随机矩阵。命令如下:x=20+(50-20)*rand(5)y=0.6+sqrt(0.1
20、)*randn(5),练习:1.Arand(3),Bmagic(3),Crand(3,4),计算A*B*C;A*B与B*A是否相等 2.创建一个5*5随机矩阵,并求逆。3.创建一个4*3随机矩阵,并求逆。4.用两种方法求解线性方程组Ax=b。(A取4阶随机矩阵)5.利用上面的A,计算B=A5和C=(0.5)A。6、构造5阶的全0阵;构造4阶的单位矩阵2.其他特殊矩阵的生成 常见的有:compan:友矩阵函数;magic:魔方矩阵pascal:pascal 矩阵 hilb:Hilbert 矩阵vander:范德蒙矩阵,魔方矩阵魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对
21、于n阶魔方阵,其元素由1,2,3,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。例2-5 将101125等25个数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。M=100+magic(5)(2)范得蒙矩阵范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。例如,A=vander(1;2;3;5)即可得到上述范得蒙矩阵。(6)帕斯卡矩阵我们知道,二
22、次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。函数pascal(n)生成一个n阶帕斯卡矩阵。例2-7 求(x+y)5的展开式。在MATLAB命令窗口,输入命令:pascal(6)矩阵次对角线上的元素1,5,10,10,5,1即为展开式的系数。,矩阵的一些特殊操作1.变维 实现矩阵的变维操作有两种方法,“:”和函数“reshape”,“:”主要针对两个矩阵之间的运算,所以这两个矩阵必须预先定义维数;而“reshape”则是针对一个矩阵的操作。Reshape(X,M,N):将已知矩阵X变维成 阶的矩阵。例 变维示例a
23、=1:12;b=reshape(a,2,6)c=zeros(3,4);%预先定义一个的全0阵c(:)=a(:)c,2.矩阵的变向:矩阵的变向操作包括矩阵的旋转、左右翻转和上下翻转,分别由函数rot90,fliplr 和flipud 来实现。函数flipdim 用来对指定维进行翻转。rot90(A):将A逆时针方向旋转90;rot90(A,K):将A逆时针方向旋转(90*K),K正逆时针,K负顺时针;fliplr(X):将X左右翻转;flipud(X):将X上下翻转;flipdim(X,dim):将X的第dim翻转;其中dim=1上下翻转;dim=2左右翻转;dim=3时不变。例 矩阵变向 c=
24、1,4,7,10;2,5,8,11;3,6,9,12 flipdim(c,1)flipdim(c,2)flipdim(c,3)操作:上一习题中自己构造的矩阵,对它们进行各种翻转。,3.矩阵的抽取 1).diag(X,K):抽取矩阵X的第K条对角线上的元素。K=0抽取主对角线,K0为上方第K条对角线,K a=pascal(4)%4阶pascal 矩阵 v=diag(a)v=diag(a,2)v=diag(diag(a)tril(X):提取矩阵X的主下三角部分;tril(X,k):提取矩阵X的第k条对角线下面的部分;triu(X):提取矩阵X的主上三角部分;triu(X,k):提取矩阵X的第k条对
25、角线上面的部分;,例 对上例中的a进行三角抽取。a1=tril(a,-1)a1=tril(a,2)操作:自己随意创立矩阵,对矩阵的元素进行抽取,2.4 数组及其运算,1 基本数组运算(1).数组的加减运算与矩阵相同;乘除与矩阵有相当大的差别,数组的乘除是指两同维数组间对应元素之间的乘除,运算符号“.*”和“./”或“.”a.b相当于是;a./b相当于是 例 示例数组的运算:a1=1,2,3;2,3,4;3,4,5;b1=1 1 1;2 2 2;3 3 3a1.b1a1./b1,(2)而数组的幂运算、指数运算、对数运算和开方运算则是对数组的每一个对应元素分别进行幂、指数、对数和开方的运算。例 对
26、上例中的a1进行幂、指数、对数和开方的运算 a1.3 注意:”.不能省,否则成为矩阵的幂的运算,那结果不同!a=1 2 3;4 5 6;7 8 9;a3ans=468 576 684 1062 1305 1548 1656 2034 2412 a.3ans=1 8 27 64 125 216 343 512 729 exp(a1)log(a1)sqrt(a1)注意:在矩阵中对应的运算该是expm(a1)等,数组的逻辑运算 1.基本逻辑关系运算,例 数组逻辑关系运算演示.a=1:3;4:6;7:9;x=5;y=ones(3)*5;xa=xya=y=a entern_b=b enter,2.逻辑关
27、系的函数运算逻辑关系的函数有:any:若向量至少有一元素不为0,则返回真;all:若向量的所以元素不为0,则返回真;islogical:判断逻辑数组;logical:转换数值为逻辑型 xor:逻辑或非;isempty:判断空矩阵 isequal:判断相等数组 isnumeric:判断数值矩阵 islogical:判断逻辑数组 find:寻找非0元素坐标;isnan:判断不定数;isinf:判断无限大元素;isfinite:判断有限大元素,例 all 和 any 的使用。a=magic(5);a(:,3)=zeros(5,1)entera1=all(a(:,1)all=any(a(:,1)10)
28、enter例 find函数的用法a=1:5;a=1./a enterf1=fing(a)enterf2=find(abs(a)0.4|abs(a)0.23)enter练习:1.自己构造几组数组,反复练习数组的加减乘左除以及右除、幂、指数对数和平方根的运算;2.以pascal矩阵为例,检验all、any、find函数的作用,2.5 多项式,1 多项式的表示:对于多项式:用以下的行向量表示,1多项式的输入(1)直接输入法 由于在matlab中的多项式是以向量的形式存储的,因此,最简单的多项式输入即为直接的向量输入,matlab自动的将向量按降幂顺序分配各系数值。例如 输入多项式 p=1-5 0 3
29、3p=1-5 0 33 poly2sym(p)%poly2sym为符号工具箱中的函数ans=x3-5*x2+33:当按降幂次排列时中缺少某些幂次项时,必须用零补上。,(2)特征多项式输入法求矩阵的特征多项式获得,由函数ploy实现例如:a=1 2 3;4 5 6;7 8 9 p1=poly(a)p1=1.0000-15.0000-18.0000-0.0000 poly2sym(p1)ans=::特征多项式生成的多项式的首项系数为1。(3)根创建多项式例如:由根x=-1,x=3 x=4.5 生成的多项式 root=-1 3 4.5 p=poly(root)p=1.0000-6.5000 6.00
30、00 13.5000 poly2sym(p)ans=x3-13/2*x2+6*x+27/2练习:仿照例题分别用3种方法创建多项式,数据自己构造。,2 多项式运算(1).用polyval或polyvalm求多项式的值。当输入的变量值代入多项式计算时是以数组为单元时,用polyval 函数;当变量值以矩阵为计算单元时,用polyvalm 函数,两种计算差别很大!例如:求 x1,2;3,4的值p=1-5 0 33;b=1 2;3 4;polyval(p,b)ans=29 21 15 17polyvalm(p,b)::用polyvalm函数时矩阵必须为方阵(2).用roots函数求多项式的根例如:求
31、所有根 p=1-5 0 33;roots(p)ans=3.5743+1.6074i 3.5743-1.6074i-2.1486,3.用polyder函数求多项式微分例如:求 的微分 p=1-5 0 33p=1-5 0 33 poly2sym(p)ans=x3-5*x2+33 dp=polyder(p)dp=3-10 0 poly2sym(dp)ans=3*x2-10*x,4.多项式的乘除法 乘法由 conv 来实现;除法由deconv来实现。例 计算多项式的乘除法p=2-5 6-1 9;poly2sym(p)d=3-90-18;poly2stm(d)pd=conv(p,d)poly2stm(p
32、d)p1=deconv(pd,d),练习:1、创建多项式2、求多项式 的根、微分,5.多项式拟合,多项式拟合是多项式运算的一个重要组成部分,在工程及科研工作中都得到了广泛的应用。在MATLAB中还提供了专用的拟合函数polyfit,其调用格式如下:polyfit(X,Y,n)其中X、Y为拟合数据,n为拟合多项式的阶数;p,s=polyfit(X,Y,n)其中p为拟合多项式系数向量,s为拟合多项式系数向量的结构信息。例如:用5阶多项式对上的正弦函数进行最小二乘拟合。x=0:pi/10:pi/2;%产生一组数据y=sin(x);a=polyfit(x,y,5);x1=0:pi/20:2*pi;y1=sin(x1);y2=a(1)*x1.5+a(2)*x1.4+a(3)*x1.3+a(4)*x1.2+a(5)*x1+a(6);plot(x1,y1,b-,x1,y2,r*)legend(原函数,拟合曲线)axis(0,7,-1.2,4练习:用5阶多项式对上的余弦函数进行最小二乘拟合,