第二讲MATLAB的数值计算——matlab具有出色的数值计算能力,占据世界上数值计算软件的主导地位数值运算的功能创建矩阵矩阵运算多项式运算线性方程组数值统计线性插值函数优化微分方程的数值解一、命令行的基本操作1.创建矩阵的方法直接输入法规则:矩阵元素必须用[]括住;矩阵元素必须用逗号或空格分隔;在[]内矩阵的行与行之间必须用分号分隔。a=3.3;b=4.4;c=[1,a,3;4,5,6;b,7,8]c=1.00003.30003.00004.00005.00006.00004.40007.00008.0000例1:m=[123;456],n=[111213;141516]m=123456n=111213141516c=m+i*nc=1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i例2:其中符号的作用:逗号和分号的作用逗号和分号可作为指令间的分隔符,matlab允许多条语句在同一行出现。分号如果出现在指令后,屏幕上将不显示结果。冒号的作用用于生成等间隔的向量,默认间隔为1。用于选出矩阵指定行、列及元素。循环语句Note:只要是赋过值的变量,不管是否在屏幕上显示过,都存储在工作空间中,以后可随时显示或调用。变量名尽可能不要重复,否则会覆盖。当一个指令或矩阵太长时,可用•••续行例:(1,1)a(2:3,1:2)a369814527a([123],3)(1:3,3)(:,3)aaa用matlab函数创建矩阵空阵[]—matlab允许输入空阵,当一项操作无结果时,返回空阵。rand(1,N)——产生[01]上均匀分布的随机序列,长度为Nrandn(1,N)——产生均值为0,方差为1的高斯随机序列,即白噪声序列,长度Neye——单位矩阵zeros——全部元素都为0的矩阵ones——全部元素都为1的矩阵此外,还有伴随矩阵、稀疏矩阵、魔方矩阵、对角矩阵、范德蒙等矩阵的创建,就不一一介绍了。Note:matlab严格区分大小写字母,因此a与A是两个不同的变量。matlab函数名必须小写。2.矩阵的修改直接修改可用键找到所要修改的矩阵,用键移动到要修改的矩阵元素上即可修改。指令修改可以用A(,)=来修改。例:a=[120;305;789]a=120305789a(3,3)=0a=120305780还可以用subs函数修改,matlab6.0还可用find函数修改。1.矩阵加、减(+,-)运算二、矩阵运算规则:相加、减的两矩阵必须有相同的行和列,两矩阵对应元素相加减。矩阵与标量的加减运算是标量与矩阵的所有元素分别进行加减操作。矩阵运算包括:矩阵的四则运算、特征根、奇异解的求解等。2.矩阵乘()运算规则:A矩阵的列数必须等于B矩阵的行数标量可与任何矩阵相乘。例:a=[123;456;780];b=[1;2;3];c=a*bc=1432233.在matlab中有两种矩阵除运算,矩阵左除和矩阵右除,\和/。如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。A\B等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。例:d=[-1;0;2];f=pi*df=-3.141606.2832例:利用矩阵除法求解线性方程:321550.7227437xyzA=[321;50.72;743];b=[5;2;7];X=A\bX=2.26091.7391-5.2609a^p——a自乘p次幂方阵1的整数4.矩阵乘方——a^n,a^p,p^aP=0,结果为与a相同的矩阵,当p0,只有在a的逆存在时才可定义a^p,其意义为inv(a)^(-p)例:a=[1,2,3;4,5,6;7,8,9];a^2ans=303642668196102126150※当一个方阵有复数特征值或负实特征值时,非整数幂是复数阵。例:a=[1,2,3;4,5,6;7,8,9];a^0.5ans=0.4498+0.7623i0.5526+0.2068i0.6555-0.3487i1.0185+0.0842i1.2515+0.0228i1.4844-0.0385i1.5873-0.5940i1.9503-0.1611i2.3134+0.2717ieig(a)%求矩阵a的特征值ans=16.1168-1.1168-0.0000inv(A)——矩阵求逆det(A)——矩阵A所对应的行列式的值eig(A)——矩阵的特征值及特征向量diag(A)——提取A对角元素或生成对角矩阵sqrtm(A)——矩阵A的平方根logm(A)——矩阵A的自然对数expm(A)——A的矩阵指数函数trace(A)——求矩阵的迹rank(A)——求矩阵的秩5.矩阵的其它运算6.矩阵的一些特殊操作矩阵的变维例:a=[1234;5678;9101112]a=123456789101112b=reshape(a,4,3)%把指定的矩阵改变形状,但是元素个数不变b=161151049382712矩阵的旋转例:a=[1234;5678;9101112]a=123456789101112b=rot90(a)%矩阵逆时针旋转90度b=481237112610159矩阵的对称交换例:a=[-4-1-2;-30-3;-214]a=-4-1-2-30-3-214flipud(a)%上下对称交换ans=-214-30-3-4-1-2fliplr(a)%左右对称交换ans=-2-1-4-30-341-2提取矩阵的上、下三角阵例:a=[-4-1-2;-30-3;-214]a=-4-1-2-30-3-214tril(a)%提取a的下三角阵ans=-400-300-214triu(a)%提取a的上三角阵ans=-4-1-200-3004求矩阵的维数(size)或向量的长度(length)例:a=[14710;25811;36912]a=147102581136912k=size(a)k=34A=[123486];n=length(A)n=6矩阵的转置运算符’可进行矩阵的共轭转置运算,运算符.’可进行矩阵的转置运算,当矩阵元素为实数时,两者结果相同。例、A=[123;456]A=123456B=A'B=1425367.矩阵的关系运算MATLAB提供了6种关系运算符:关系符号意义====~=小于小于或等于大于大于或等于等于不等于它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。关系运算符的运算法则为:当两个比较量是标量时,直接比较两数的大小若关系成立,关系表达式结果为1,否则为0。当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。c=(a4)c=111000000abans=000001111a=[123;456;789]a=123456789b=10-ab=987654321例:8.矩阵的逻辑运算在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示。设参与逻辑运算的是两个标量a和b,那么,a&b(与)a,b全为非零时,运算结果为1,否则为0。a|b(或)a,b中只要有一个非零,运算结果为1。~a(非)当a是零时,运算结果为1;当a非零时,运算结果为0。MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非)。逻辑运算的运算法则为:若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成。在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成。a=[-301;24-5;-7-89]a=-30124-5-7-89x=~a%等价于not(a),元素为0时,结果为1,否则为0x=010000000例:x1=~(a0)x1=110001110x2=a-2&a4x2=011100000数组运算指元素对元素的算术运算,与通常意义上的由符号表示的线性代数矩阵运算不同。数组加减(.+,.-)9.数组运算数组乘除(,./,.\)ab——a,b两数组必须有相同的行和列,两数组相应元素相乘。对应元素相加减(与矩阵加减等效)a.+ba.-ba=[123;456;789];b=[246;135;7910];a.*bans=281841530497290例:a=[123;456;789];b=[246;135;7910];a*bans=253746558510985133172数组相乘矩阵相乘a./b=b.\aa.\b=b./a——给出a,b对应元素间的商.a./b=b.\a———都是a的元素被b的对应元素除例:a=[123];b=[456];c1=a.\b,c2=b./ac1=4.00002.50002.0000c2=4.00002.50002.0000数组乘方(.^)—元素对元素的幂例:a=[123],b=[456],a=123b=456a.^2ans=149a.^bans=132729三、数据统计处理1、求向量的最大值和最小值格式:y=max(X):返回向量X的最大值存入y,如果X中包含复数元素,则按模取最大值。[y,I]=max(X):返回向量X的最大值存入y,最大值的序号存入I,如果X中包含复数元素,则按模取最大值。求向量X的最小值的函数是min(X),用法和max(X)完全相同。例1、求向量x的最大值。x=[-43,72,9,16,23,47];y=max(x)%求向量x中的最大值[y,l]=max(x)%求向量x中的最大值及其该元素的位置2、求矩阵的最大值和最小值求矩阵A的最大值的函数常用有2种调用格式:max(A):返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。[Y,U]=max(A):返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。求矩阵A的最小值的函数是min(X),用法和max(X)完全相同。例:A=[2816;0-230;3614]A=28160-2303614max(A)ans=36130[y,u]=max(A)y=36130u=332sum(X):返回向量X各元素的和。prod(X):返回向量X各元素的乘积。sum(A):返回一个行向量,其第i个元素是A的第i列的元素和。prod(A):返回一个行向量,其第i个元素是A的第i列的元素乘积。3、求和与求积数据序列求和与求积的函数是sum和prod,其使用方法类似。设X是一个向量,A是一个矩阵,函数的调用格式为:sum(A,dim):当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素之和。prod(A,dim):当dim为1时,该函数等同于prod(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素乘积。例:A=[2816;0-230;3614]A=28160-2303614sum(A)