用MATLAB进行矩阵运算.docx
- 文档编号:12128162
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:111
- 大小:251.08KB
用MATLAB进行矩阵运算.docx
《用MATLAB进行矩阵运算.docx》由会员分享,可在线阅读,更多相关《用MATLAB进行矩阵运算.docx(111页珍藏版)》请在冰豆网上搜索。
用MATLAB进行矩阵运算
第1章矩阵及其基本运算
MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。
因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。
1.1矩阵的表示
1.1.1数值矩阵的生成
1.实数值矩阵输入
MATLAB的强大功能之一体现在能直接处理向量或矩阵。
当然首要任务是输入待处理的向量或矩阵。
不管是任何矩阵<向量),我们可以直接按行方式输入每个元素:
同一行中的元素用逗号<,)或者用空格符来分隔,且空格个数不限;不同的行用分号<;)分隔。
所有元素处于一方括号<[])内;当矩阵是多维<三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。
如:
>>Time=[111212345678910]
Time=
111212345678910
>>X_Data=[2.323.43;4.375.98]
X_Data=
2.433.43
4.375.98
>>vect_a=[12345]
vect_a=
12345
>>Matrix_B=[123;
>>234;345]
Matrix_B=123
234
345
>>Null_M=[]%生成一个空矩阵
2.复数矩阵输入
复数矩阵有两种生成方式:
第一种方式
例1-1
>>a=2.7。
b=13/25。
>>C=[1,2*a+i*b,b*sqrt(a>。
sin(pi/4>,a+5*b,3.5+1]
C=
1.00005.4000+0.5200i0.8544
0.70715.30004.5000
第2种方式
例1-2
>>R=[123。
456],M=[111213。
141516]
R=
123
456
M=
111213
141516
>>CN=R+i*M
CN=
1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i
4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i
1.1.2符号矩阵的生成
在MATLAB中输入符号向量或者矩阵的方法和输入数值类型的向量或者矩阵在形式上很相像,只不过要用到符号矩阵定义函数sym,或者是用到符号定义函数syms,先定义一些必要的符号变量,再像定义普通矩阵一样输入符号矩阵。
1.用命令sym定义矩阵:
这时的函数sym实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的符号或者是表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。
如下例:
例1-3
>>sym_matrix=sym<'[abc;Jack,HelpMe!
,NOWAY!
],')
sym_matrix=
[abc]
[JackHelpMe!
NOWAY!
]
>>sym_digits=sym<'[123;abc;sin sym_digits= [123] [abc] [sin 2.用命令syms定义矩阵 先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。 例1-4 >>symsabc; >>M1=sym<'Classical'); >>M2=sym<'Jazz'); >>M3=sym<'Blues') >>syms_matrix=[abc;M1,M2,M3;int2str<[235])] syms_matrix= [abc] [ClassicalJazzBlues] [235] 把数值矩阵转化成相应的符号矩阵。 数值型和符号型在MATLAB中是不相同的,它们之间不能直接进行转化。 MATLAB提供了一个将数值型转化成符号型的命令,即sym。 例1-5 >>Digit_Matrix=[1/3sqrt<2)3.4234;exp<0.23)log<29)23^<-11.23)] >>Syms_Matrix=sym 结果是: Digit_Matrix= 0.33331.41423.4234 1.25863.36730.0000 Syms_Matrix= [1/3,sqrt<2),17117/5000] [5668230535726899*2^<-52),7582476122586655*2^<-51),51747*2^<-103)] 注意: 矩阵是用分数形式还是浮点形式表示的,将矩阵转化成符号矩阵后,都将以最接近原值的有理数形式表示或者是函数形式表示。 1.1.3大矩阵的生成 对于大型矩阵,一般创建M文件,以便于修改: 例1-6用M文件创建大矩阵,文件名为example.m exm=[456468873257955 2168754488813 6545678898215 4566845896545987 548810963377] 在MATLAB窗口输入: >>example。 >>size(exm>%显示exm的大小 ans= 56%表示exm有5行6列。 1.1.4多维数组的创建 函数cat 格式A=cat(n,A1,A2,…,Am> 说明n=1和n=2时分别构造[A1;A2]和[A1,A2],都是二维数组,而n=3时可以构造出三维数组。 例1-7 >>A1=[1,2,3。 4,5,6。 7,8,9]。 A2=A1'。 A3=A1-A2。 >>A4=cat(3,A1,A2,A3> A4(: : 1>= 123 456 789 A4(: : 2>= 147 258 369 A4(: : 3>= 0-2-4 20-2 420 或用另一种原始方式可以定义: 例1-8 >>A1=[1,2,3。 4,5,6。 7,8,9]。 A2=A1'。 A3=A1-A2。 >>A5(: : 1>=A1,A5(: : 2>=A2,A5(: : 3>=A3 A5(: : 1>= 123 456 789 A5(: : 2>= 147 258 369 A5(: : 3>= 0-2-4 20-2 420 1.1.5特殊矩阵的生成 命令全零阵 函数zeros 格式B=zeros(n>%生成n×n全零阵 B=zeros(m,n>%生成m×n全零阵 B=zeros([mn]>%生成m×n全零阵 B=zeros(d1,d2,d3…>%生成d1×d2×d3×…全零阵或数组 B=zeros([d1d2d3…]>%生成d1×d2×d3×…全零阵或数组 B=zeros(size(A>>%生成与矩阵A相同大小的全零阵 命令单位阵 函数eye 格式Y=eye(n>%生成n×n单位阵 Y=eye(m,n>%生成m×n单位阵 Y=eye(size(A>>%生成与矩阵A相同大小的单位阵 命令全1阵 函数ones 格式Y=ones(n>%生成n×n全1阵 Y=ones(m,n>%生成m×n全1阵 Y=ones([mn]>%生成m×n全1阵 Y=ones(d1,d2,d3…>%生成d1×d2×d3×…全1阵或数组 Y=ones([d1d2d3…]>%生成d1×d2×d3×…全1阵或数组 Y=ones(size(A>>%生成与矩阵A相同大小的全1阵 命令均匀分布随机矩阵 函数rand 格式Y=rand(n>%生成n×n随机矩阵,其元素在<0,1)内 Y=rand(m,n>%生成m×n随机矩阵 Y=rand([mn]>%生成m×n随机矩阵 Y=rand(m,n,p,…>%生成m×n×p×…随机矩阵或数组 Y=rand([mnp…]>%生成m×n×p×…随机矩阵或数组 Y=rand(size(A>>%生成与矩阵A相同大小的随机矩阵 rand%无变量输入时只产生一个随机数 s=rand('state'>%产生包括均匀发生器当前状态的35个元素的向量 rand('state',s>%使状态重置为s rand('state',0>%重置发生器到初始状态 rand('state',j>%对整数j重置发生器到第j个状态 rand('state',sum(100*clock>>%每次重置到不同状态 例1-9产生一个3×4随机矩阵 >>R=rand(3,4> R= 0.95010.48600.45650.4447 0.23110.89130.01850.6154 0.60680.76210.82140.7919 例1-10产生一个在区间[10,20]内均匀分布的4阶随机矩阵 >>a=10。 b=20。 >>x=a+(b-a>*rand(4> x= 19.218119.354710.578911.3889 17.382119.169013.528712.0277 11.762714.102718.131711.9872 14.057118.936510.098616.0379 命令正态分布随机矩阵 函数randn 格式Y=randn(n>%生成n×n正态分布随机矩阵 Y=randn(m,n>%生成m×n正态分布随机矩阵 Y=randn([mn]>%生成m×n正态分布随机矩阵 Y=randn(m,n,p,…>%生成m×n×p×…正态分布随机矩阵或数组 Y=randn([mnp…]>%生成m×n×p×…正态分布随机矩阵或数组 Y=randn(size(A>>%生成与矩阵A相同大小的正态分布随机矩阵 randn%无变量输入时只产生一个正态分布随机数 s=randn('state'>%产生包括正态发生器当前状态的2个元素的向量 s=randn('state',s>%重置状态为s s=randn('state',0>%重置发生器为初始状态 s=randn('state',j>%对于整数j重置状态到第j状态 s=randn('state',sum(100*clock>>%每次重置到不同状态 例1-11产生均值为0.6,方差为0.1的4阶矩阵 >>mu=0.6。 sigma=0.1。 >>x=mu+sqrt(sigma>*randn(4> x= 0.83110.77990.13351.0565 0.78270.51920.52600.4890 0.61270.48060.63750.7971 0.81410.50640.69960.8527 命令产生随机排列 函数randperm 格式p=randperm(n>%产生1~n之间整数的随机排列 例1-12 >>randperm(6> ans= 321546 命令产生线性等分向量 函数linspace 格式y=linspace(a,b>%在(a,b>上产生100个线性等分点 y=linspace(a,b,n>%在(a,b>上产生n个线性等分点 命令产生对数等分向量 函数logspace 格式y=logspace(a,b>%在< )之间产生50个对数等分向量 y=logspace(a,b,n> y=logspace(a,pi> 命令计算矩阵中元素个数 n=numel(a>%返回矩阵A的元素的个数 命令产生以输入元素为对角线元素的矩阵 函数blkdiag 格式out=blkdiag(a,b,c,d,…>%产生以a,b,c,d,…为对角线元素的矩阵 例1-13 >>out=blkdiag(1,2,3,4> out= 1000 0200 0030 0004 命令友矩阵 函数compan 格式A=compan(u>%u为多项式系统向量,A为友矩阵,A的第1行元素为-u(2: n>/u(1>,其中u(2: n>为u的第2到第n个元素,A为特征值就是多项式的特征根。 例1-14求多项式的友矩阵和根 >>u=[10-76]。 >>A=compan(u>%求多项式的友矩阵 A= 07-6 100 010 >>eig(A>%A的特征值就是多项式的根 ans= -3.0000 2.0000 1.0000 命令hadamard矩阵 函数hadamard 格式H=hadamard(n>%返回n阶hadamard矩阵 例1-15 >>h=hadamard(4> h= 1111 1-11-1 11-1-1 1-1-11 命令Hankel方阵 函数hankel 格式H=hankel(c>%第1列元素为c,反三角以下元素为0。 H=hankel(c,r>%第1列元素为c,最后一行元素为r,如果c的最后一个元素与r的第一个元素不同,交叉位置元素取为c的最后一个元素。 例1-16 >>c=1: 3,r=7: 10 c= 123 r= 78910 >>h=hankel(c,r> h= 1238 2389 38910 命令Hilbert矩阵 函数hilb 格式H=hilb(n>%返回n阶Hilbert矩阵,其元素为H(i,j>=1/(i+j-1>。 例1-17产生一个3阶Hilbert矩阵 >>formatrat%以有理形式输出 >>H=hilb(3> H= 11/21/3 1/21/31/4 1/31/41/5 命令逆Hilbert矩阵 函数invhilb 格式H=invhilb(n>%产生n阶逆Hilbert矩阵 命令Magic(魔方>矩阵 函数magic 格式M=magic(n>%产生n阶魔方矩阵 例1-18 >>M=magic(3> M= 816 357 492 命令Pascal矩阵 函数pascal 格式A=pascal(n>%产生n阶Pascal矩阵,它是对称、正定矩阵,它的元素由Pascal三角组成,它的逆矩阵的所有元素都是整数。 A=pascal(n,1>%返回由下三角的Cholesky系数组成的Pascal矩阵 A=pascal(n,2>%返回Pascal(n,1>的转置和交换的形式 例1-19 >>A=pascal(4> A= 1111 1234 13610 141020 >>A=pascal(3,1> A= 100 1-10 1-21 >>A=pascal(3,2> A= 111 -2-10 100 命令托普利兹矩阵 函数toeplitz 格式T=toeplitz(c,r>%生成一个非对称的托普利兹矩阵,将c作为第1列,将r作为第1行,其余元素与左上角相邻元素相等。 T=toeplitz(r>%用向量r生成一个对称的托普利兹矩阵 例1-20 >>c=[12345]。 >>r=[1.52.53.54.55.5]。 >>T=toeplitz(c,r> T= 15/27/29/211/2 215/27/29/2 3215/27/2 43215/2 54321 命令Wilkinson特征值测试阵 函数wilkinson 格式W=wilkinson(n>%返回n阶Wilkinson特征值测试阵 例1-21 >>W=wilkinson(4> W= 3/2100 11/210 011/21 0013/2 >>W=wilkinson(7> W= 3100000 1210000 0111000 0010100 0001110 0000121 0000013 1.2矩阵运算 1.2.1加、减运算 运算符: “+”和“-”分别为加、减运算符。 运算规则: 对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。 例1-22 >>A=[1,1,1。 1,2,3。 1,3,6] >>B=[8,1,6。 3,5,7。 4,9,2] >>A+B=A+B >>A-B=A-B 结果显示: A+B= 927 4710 5128 A-B= -70-5 -2-3-4 -3-64 1.2.2乘法 运算符: * 运算规则: 按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。 1.两个矩阵相乘 例1-23 >>X=[2345。 1221]; >>Y=[011。 110。 001。 100]; Z=X*Y 结果显示为: Z= 856 333 2.矩阵的数乘: 数乘矩阵 上例中: a=2*X 则显示: a= 46810 2442 向量的点乘<内积): 维数相同的两个向量的点乘。 数组乘法: A.*B表示A与B对应元素相乘。 3.向量点积 函数dot 格式C=dot(A,B>%若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。 C=dot(A,B,dim>%在dim维数中给出A与B的点积 例>>X=[-102]; >>Y=[-2-11]。 >>Z=dot(X,Y> 则显示: Z= 4 还可用另一种算法: sum(X.*Y> ans= 4 4.向量叉乘 在数学上,两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。 在Matlab中,用函数cross实现。 函数cross 格式C=cross(A,B>%若A、B为向量,则返回A与B的叉乘,即C=A×B,A、B必须是3个元素的向量;若A、B为矩阵,则返回一个3×n矩阵,其中的列是A与B对应列的叉积,A、B都是3×n矩阵。 C=cross(A,B,dim>%在dim维数中给出向量A与B的叉积。 A和B必须具有相同的维数,size(A,dim>和size(B,dim>必须是3。 例1-24计算垂直于向量(1,2,3>和(4,5,6>的向量。 >>a=[123]。 >>b=[456]。 >>c=cross(a,b> 结果显示: c= -36-3 可得垂直于向量(1,2,3>和(4,5,6>的向量为±(-3,6,-3> 5.混合积 混合积由以上两函数实现: 例1-25计算向量a=(1,2,3>、b=(4,5,6>和c=(-3,6,-3>的混合积 解: >>a=[123]。 b=[456]。 c=[-36-3]。 >>x=dot(a,cross(b,c>> 结果显示: x= 54 注意: 先叉乘后点乘,顺序不可颠倒。 6.矩阵的卷积和多项式乘法 函数conv 格式w=conv(u,v>%u、v为向量,其长度可不相同。 说明长度为m的向量序列u和长度为n的向量序列v的卷积(Convolution>定义为: 式中: w向量序列的长度为(m+n-1>,当m=n时, w(1>=u(1>*v(1> w(2>=u(1>*v(2>+u(2>*v(1> w(3>=u(1>*v(3>+u(2>*v(2>+u(3>*v(1> … w(n>=u(1>*v(n>+u(2>*v(n-1>+…+u(n>*v(1> … w(2*n-1>=u(n>*v(n> 例1-26展开多项式 解: >>w=conv([1,2,2],conv([1,4],[1,1]>> w= 1716188 >>P=poly2str(w,'s'>%将w表示成多项式 P= s^4+7s^3+16s^2+18s+8 7.反褶积<解卷)和多项式除法运算 函数deconv 格式[q,r]=deconv(v,u>%多项式v除以多项式u,返回商多项式q和余多项式r。 注意: v、u、q、r都是按降幂排列的多项式系数向量。 例1-27,则其卷积为 >>u=[1234] >>v=[102030] >>c=conv(u,v> c= 1040100160170120 则反褶积为 >>[q,r]=deconv(c,u> q= 102030 r= 000000 8.张量积 函数kron 格式C=kron(A,B>%A为m×n矩阵,B为p×q矩阵,则C为mp×nq矩阵。 说明A与B的张量积定义为: A B与B A均为mp×nq矩阵,但一般地A B B A。 例1-28 求A B。 >>A=[12。 34]。 B=[123。 456。 789]。 >>C=kron(A,B> C= 123246 45681012 789141618 3694812 121518162024 212427283236 1.2.3集合运算 1.两个集合的交集 函数intersect 格式c=intersect(a,b>%返回向量a、b的公共部分,即c=a∩b。 c=intersect(A,B,'rows'>%A、B为相同列数的矩阵,返回元素相同的行。 [c,ia,ib]=intersect(a,b>%c为a、b的公共元素,ia表示公共元素在a中的位置,ib表示公共元素在b中位置。 例1-29 >>A=[1234。 1246。 6714] A= 1234 1246 6714 >>B=[1238。 1146。 6714] B= 1238 1146 6714 >>C=intersect(A,B,'r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 进行 矩阵 运算
![提示](https://static.bdocx.com/images/bang_tan.gif)