第1章矩阵及其基本运算MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。1.1矩阵的表示1.1.1数值矩阵的生成1.实数值矩阵输入MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如:Time=[111212345678910]Time=111212345678910X_Data=[2.323.43;4.375.98]X_Data=2.433.434.375.98vect_a=[12345]vect_a=12345Matrix_B=[123;234;345]Matrix_B=123234345Null_M=[]%生成一个空矩阵2.复数矩阵输入复数矩阵有两种生成方式:第一种方式例1-1a=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.85440.70715.30004.5000第2种方式例1-2R=[123;456],M=[111213;141516]R=123456M=111213141516CN=R+i*MCN=1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i1.1.2符号矩阵的生成在MATLAB中输入符号向量或者矩阵的方法和输入数值类型的向量或者矩阵在形式上很相像,只不过要用到符号矩阵定义函数sym,或者是用到符号定义函数syms,先定义一些必要的符号变量,再像定义普通矩阵一样输入符号矩阵。1.用命令sym定义矩阵:这时的函数sym实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的符号或者是表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。如下例:例1-3sym_matrix=sym('[abc;Jack,HelpMe!,NOWAY!],')sym_matrix=[abc][JackHelpMe!NOWAY!]sym_digits=sym('[123;abc;sin(x)cos(y)tan(z)]')sym_digits=[123][abc][sin(x)cos(y)tan(z)]2.用命令syms定义矩阵先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。例1-4symsabc;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-5Digit_Matrix=[1/3sqrt(2)3.4234;exp(0.23)log(29)23^(-11.23)]Syms_Matrix=sym(Digit_Matrix)结果是:Digit_Matrix=0.33331.41423.42341.25863.36730.0000Syms_Matrix=[1/3,sqrt(2),17117/5000][5668230535726899*2^(-52),7582476122586655*2^(-51),5174709270083729*2^(-103)]注意:矩阵是用分数形式还是浮点形式表示的,将矩阵转化成符号矩阵后,都将以最接近原值的有理数形式表示或者是函数形式表示。1.1.3大矩阵的生成对于大型矩阵,一般创建M文件,以便于修改:例1-6用M文件创建大矩阵,文件名为example.mexm=[456468873257955216875448881365456788982154566845896545987548810963377]在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-7A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;A4=cat(3,A1,A2,A3)A4(:,:,1)=123456789A4(:,:,2)=147258369A4(:,:,3)=0-2-420-2420或用另一种原始方式可以定义:例1-8A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;A5(:,:,1)=A1,A5(:,:,2)=A2,A5(:,:,3)=A3A5(:,:,1)=123456789A5(:,:,2)=147258369A5(:,:,3)=0-2-420-24201.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)%使状态重置为srand('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.44470.23110.89130.01850.61540.60680.76210.82140.7919例1-10产生一个在区间[10,20]内均匀分布的4阶随机矩阵a=10;b=20;x=a+(b-a)*rand(4)x=19.218119.354710.578911.388917.382119.169013.528712.027711.762714.102718.131711.987214.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)%重置状态为ss=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.05650.78270.51920.52600.48900.61270.48060.63750.79710.81410.50640.69960.8527命令产生随机排列函数randperm格式p=randperm(n)%产生1~n之间整数的随机排列例1-12randperm(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-13out=blkdiag(1,2,3,4)out=1000020000300004命令友矩阵函数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-6100010eig(A)%A的特征值就是多项式的根ans=-3.00002.00001.0000命令hadamard矩阵函数hadamard格式H=hadamard(n)%返回n阶hadamard矩阵例1-15h=hadamard(4)h=11111-11-111-1-11-1-11命令Hankel方阵函数hankel格式H=hankel(c)%第1列元素为c,反三角以下元素为0。H=hankel(c,r)%第1列元素为c,最后一行元素为r,如果c的最后一个元素与r的第一个元素不同,交叉位置元素取为c的最后一个元素。例1-16c=1:3,r=7:10c=123r=78910h=hankel(c,r)h=1238238938910命令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/31/21/31/41/31/