182第十章Matlab软件与数值计算Matlab的含义是矩阵实验室(MatrixLaboratory),是由美国MathWork公司于1984年推出的一套高性能的数值计算软件,由于它具有使用方便,用户界面友好的特征,能集数值分析,矩阵计算,信号处理和图形显示于一身,更有多种用户工具包可选用,深受计算工作者和工程技术人员的亲睐,目前使用十分广泛.本书特选用Matlab作为数值分析的演示及实验的软件环境.本章只介绍与本书演示及实验有关的Matlab知识,更详细的Matlab知识可参考相关书籍.§10.1矩阵与数组1.行向量x=[2-31]%中间用空格将数据分开,也可用逗号分开x=2-31%显示输出结果2.列向量y=[3-15]'%'表示转置y=3-153.矩阵输入A=[132;546;798]%;表示换行A=1325467984.矩阵转置B=A'B=1573492685.单位阵I=eye(3)%3表示矩阵是3阶方阵I=1000100016.零矩阵Z=zeros(3)183Z=0000000007.Hilbert矩阵例:生成三阶Hilbert阵H=hilb(3)H=1.00000.50000.33330.50000.33330.25000.33330.25000.20008.矩阵加减法C=A+B,C=289881591516D=A-BD=0-2-520-35309.矩阵乘法E=A*B,E=14295029771195011919410.数组输入除上述的矩阵输入法外,数组还可以有如下输入法:(1)等差输入数组=初值:增量:终值a=1:2:10a=13579增量为1时,可以省略a=1:5a=12345(2)等分输入法数组=linspace(初值,终值,等分点数)a=linspace(0,10,5)a=02.50005.00007.500010.000011.点乘运算184数组的点乘运算是对应分量相乘;矩阵的点乘是对应元素相乘如:x=1:5x=12345y=-2:2y=-2-1012z=x.*yz=-2-20410§10.2函数运算和作图10.2.1基本初等函数1.三角函数:sin(x),cos(x),tan(x);2.反三角函数:asin(x),acos(x),atan(x);3.指数函数ex:exp(x);4.对数函数:(1)自然对数lnx:log(x);(2)常用对数lgx:log10(x);(3)以2为底的对数2log()x:log2(x);5.开平方函数:sqrt(x);6.绝对值函数:abs(x)7.计算一般函数值:eval(f)其中f是一个函数表达式的字符串f='x.*sin(x)';x=1:10;y=eval(f)y=Columns1through90.84151.81860.4234-3.0272-4.7946-1.67654.59897.91493.7091Column10-5.440210.2.2多项式函数1.多项式的表示多项式可用一个向量表示,其分量为其降幂排列的系数.如3235xx可表为p=[1–305]2.多项式求值polyval(p,x)p=[1–305];x=1:10;y=polyval(p,x)185y=31521551132013254917053.多项式的零点roots(p)roots(p)ans=2.0519+0.5652i2.0519-0.5652i-1.10384.方阵A的特征多项式poly(A)A=[312;132;123]p=poly(A)p=1.0000-9.000020.0000-12.0000roots(ans)ans=6.00002.00001.000010.2.3矩阵函数1.矩阵的行列式A=[132;546;798]A=132546798d=det(A),d=182.矩阵的逆B=inv(A),B=-1.2222-0.33330.55560.1111-0.33330.22220.94440.6667-0.61113.LU分解命令格式:[LUP]=lu(A)说明:这里L是单位下三角矩阵,U是上三角矩阵,P是置换阵,这是因为本命令中默认加上了按列选主元素.如命令中省略P,则L不一定是单位下三角矩阵,而PL才是单位下三角矩阵.例:[LUP]=lu(A)L=1.0000001860.71431.000000.1429-0.70591.0000U=7.00009.00008.00000-2.42860.2857001.0588P=001010100[LU]=lu(A)L=0.1429-0.70591.00000.71431.000001.000000U=7.00009.00008.00000-2.42860.2857001.05884.Cholesky分解命令格式:L=chol(A)说明:这里A必须是对称正定矩阵,L将得到上三角矩阵.使A=LTL成立.例:A=[312;132;223];L=chol(A)L=1.73210.57741.154701.63300.8165001.0000L'*Lans=3.00001.00002.00001.00003.00002.00002.00002.00003.00005.矩阵范数命令格式:n1=norm(A,1),n2=norm(A,2),ninf=norm(A,inf)说明:这三个命令分别求A的1-范数,2-范数和-范数,其中n2=norm(A,2)也可写为n2=norm(A)例:A=[312;132;223];n1=norm(A,1)n1=7n2=norm(A,2)187n2=6.3723ninf=norm(A,inf)ninf=76.矩阵条件数命令格式:k1=cond(A,1),k2=cond(A,2),kinf=cond(A,inf)说明:这三个命令分别求A的1-条件数,2-条件数和-条件数,其中k2=cond(A,2)也可写为k2=cond(A)例:k1=cond(A,1)k1=14k2=cond(A,2)k2=10.1515kinf=cond(A,inf)kinf=147.QR分解命令格式:[Q,R]=qr(A)说明:也称为正交三角分解,将A分解成为一个正交阵Q和一个上三角矩阵R的乘积.例:A=[312;132;223];[Q,R]=qr(A)Q=-0.80180.4364-0.4082-0.2673-0.8729-0.4082-0.5345-0.21820.8165R=-3.7417-2.6726-3.74170-2.6186-1.5275000.81658.奇异值分解命令格式:[Q,R]=qr(A)说明:将矩阵A分解成为正交阵U,对角阵S和正交阵V的乘积,即A=USVT.例:A=[312;132;223;132]A=312132223132[U,S,V]=svd(A)188U=-0.4520-0.74430.4915-0.0000-0.49220.45180.2315-0.7071-0.5578-0.1941-0.80690.0000-0.49220.45180.23150.7071S=7.28360002.34750000.6617000V=-0.4745-0.73170.4894-0.62070.67230.4034-0.6242-0.1124-0.77329.特征值分解命令格式:[Q,D]=eig(A),D=eig(A)说明:此命令可以求出方阵A的特征值和相应的特征向量.例:A=[312;132;223]A=312132223D=eig(A)D=0.62772.00006.3723[Q,D]=eig(A)Q=0.45440.70710.54180.4544-0.70710.5418-0.766200.6426D=0.62770002.00000006.372310.2.4绘图命令1.二维绘图函数plot,常用和最简单的绘图工具(1)格式:plot(x,y,’-r’)(2)说明:将x和y对应分量定义的点依次用红色实线联结(x,y的维数必须一致).(3)其中线型点型和色号可按下两表选择:189表10.1线型符号点型符号实线-(减号)实心圆点.虚线――(双减号)加号+点线:星号*虚线间点-.(减号加点)空心圆点o(小写字母o)叉号x(小写字母x)表10.2兰色红色黄色绿色bryg(4)绘图辅助命令利用以下命令可以为图形加上不同效果,注意以下命令必须放在相应的plot命令之后.表10.3title(‘…’)在图形上方加标题xlabel(‘…’)为X轴加说明ylabel(‘…’)为Y轴加说明grid在图上显示虚线格标度text(x,y,‘…’)在图中x,y坐标处显示‘…’中的内容gtext(‘…’)在图中用光标确定位置处显示‘…’中的内容axis([xl,xu,yl,yu])用[]中四个实数定义x,y方向显示范围holdon后面的plot图形将叠加在一起holdoff解除holdon命令,后面plot产生的图形将冲去原有图形例10.1作出[-,]间函数2sinyxx的图形x=-pi:0.05:pi;y=x.*x.*sin(2*x);plot(x,y,'-')grid2.一元函数绘制函数命令fplot,可绘制已定义函数在指定区间上的图象,与plot命令类似,但能自适应地选择取值点.plot的线型和色号选项依然适用.格式:fplot(f,[a,b]),其中f是一个函数表达式的字符串,a,b是x取值的下界和上界.例10.2作出[-,]间函数2sinyxx的图形f='x.*x.*sin(2*x)'fplot(f,[-pi,pi])也可以作出与例10.1一样的图形.190图10-13.多窗口绘图函数subplot格式:subplot(p,q,r)说明:将图形窗口分为p行q列共pq个格子,在第r个格子上画图,格子是从上到下,从左到右依次计数的.例10.3作出[-1,1]间前四个Legendre多项式的图形Legendre多项式是定义在[-1,1]上的正交多项式系列,它可由下列递推公式生成:011112111(),(),()()().kkkpxpxxkkpxxpxpxkkx=-1:0.05:1p0=1+0*x;p1=x;p2=(3*x.^2-1)/2;p3=(5*x.^3-3*x)/2subplot(2,2,1);plot(x,p0)subplot(2,2,2);plot(x,p1)subplot(2,2,3);plot(x,p2)subplot(2,2,4);plot(x,p3)图10-21914.三维图形函数mesh(z)仅用例子说明,详细功能及语法参考Matlab有关资料例10.4作出3333[,],[,]xy间222exyz的图形k=3;x=-k:0.05:k;y=x';u=ones(size(y))*x;v=y*ones(size(x));z=exp(-(u.^2+v.^2)/2);mesh(z)图10-310.2.5Matlab编程将一个完整的命令集合写成M文件便是一段Matlab程序.Matlab程序具有一般程序语言的基本结构和功能.有顺序结构,分支结构和循环结构三种结构.1.顺序结构:如程序中没有控制语句,则程序执行时按语句顺序逐句执行.2.分支结构(条件语句):(1)if条件语句组end(2)if条件语句组1else语句组2end3.循环结构Matlab提供两种循环结构:(1)for循环for循环变量=初值:步长:终值语句组end(2)while循环while条件语句组end1924.以上两种控制结构中的条件由逻辑表达式的值决定,1为真,表示条件成立,0为假,表示条件不成立.逻辑表达式由关系表达式和逻辑运算符组合而成,关系表达