第二篇:MATLAB的高级应用和绘图简介 专用图形简介 绘制二维图形 MATLAB中的样条函数工具箱简介
一、Matlab的帮助简介(帮助窗口)
命令窗口中的帮助命令介绍
寻求帮助的几种方法
MATLAB的高级应用 二、MATLAB在高等代数中的应用 特征值和特征向量: d=e i g ( A ) 求包含矩阵A的特征值的向量。 [ V, D ] = e i g ( A ) 返回特征值矩阵D和特征向量矩阵V。特征值矩阵D是以A的特征值为对角线的元素生成的对角阵,矩阵A的第k个特征值的特征向量是矩阵V的第k列列向量,满足AV=VD。 d=eig(A) d = 1 -5 5 例:A = [ 1 4 2 0 -3 4 0 4 3]
求矩阵的秩:求矩阵A的秩,命令格式为rank(A)。 [V D]=eig(A) V = 1.0000 0.4082 -0.6667 0 -0.8165 -0.3333 0 0.4082 -0.6667 D = 1 0 0 0 -5 0 0 0 5 求矩阵的秩:求矩阵A的秩,命令格式为rank(A)。 例:A = 1 0 0 1 rank(A) ans = 2
[ L , U , P ] = l u ( A ) 求上三角矩阵U、有单位对角线的下三角矩阵L和交换矩阵P,满足L U = PA。 矩阵的分解: 1、矩阵的lu分解: [ L , U ] = l u ( A ) 求上三角矩阵U和交换下三角矩阵L。L是一个带有单位对角线的下三角矩阵和交换矩阵,即P的逆矩阵的乘积,见下个命令。 [ L , U , P ] = l u ( A ) 求上三角矩阵U、有单位对角线的下三角矩阵L和交换矩阵P,满足L U = PA。 例:A =[ 1 2 3 4 5 6 7 8 0] [L U]=lu(A) L = 0.1429 1.0000 0 0.5714 0.5000 1.0000 1.0000 0 0 U = 7.0000 8.0000 0 0 0.8571 3.0000 0 0 4.5000
[ Q , R ] = q r ( A ) 求得m×m的矩阵Q和上三角矩阵R,Q的列形成了一个正交基,Q和R满足A = Q R。 [L U P]=lu(A) L = 1.0000 0 0 0.1429 1.0000 0 0.5714 0.5000 1.0000 U = 7.0000 8.0000 0 0 0.8571 3.0000 0 0 4.5000 P = 0 0 1 1 0 0 0 1 0 2、矩阵的QR分解: [ Q , R ] = q r ( A ) 求得m×m的矩阵Q和上三角矩阵R,Q的列形成了一个正交基,Q和R满足A = Q R。 [ Q , R , P ] = q r ( A ) 求得矩阵Q、上三角矩阵R和交换矩阵P。Q的列形成一个正交基,R的对角线元素按大小降序排列,它们满足 A P=Q R。
例:A =[1 2 2 3 2 2 1 1 2] [Q R]=qr(A) Q = -0.3015 0.9239 -0.2357 -0.9045 -0.3553 -0.2357 -0.3015 0.1421 0.9428 R = -3.3166 -2.7136 -3.0151 0 1.2792 1.4213 0 0 0.9428 [Q R P]=qr(A) Q = -0.5774 0.4082 -0.7071 -0.5774 -0.8165 -0.0000 -0.5774 0.4082 0.7071 R = -3.4641 -2.8868 -2.8868 0 -1.6330 -0.4082 0 0 -0.7071
c h o l ( A ) 求矩阵A的C h o l e s k y因子,是一个上三角矩阵。如果A不是一个正定矩阵,则给出一个错误信息。 P = 0 1 0 0 0 1 1 0 0 3、C h o l e s k y因式分解 c h o l ( A ) 求矩阵A的C h o l e s k y因子,是一个上三角矩阵。如果A不是一个正定矩阵,则给出一个错误信息。 例:A = 1 0 0 0 1 0 0 0 1 chol(A) ans = 1 0 0 0 1 0 0 0 1
向量范数: n o r m ( x ) 求欧几里得范数。 n o r m ( x , i n f ) 求∞ -范数。 n o r m ( x , p ) 求p -范数。 例:x = 3 4 5 norm(x,2) ans = 7.0711 norm(x,inf) ans = 5 norm(x,1) ans = 12
上海森伯(Hessenberg)形式: h e s s ( A ) 返回矩阵A的上海森伯形式 例:A = 1 4 2 0 -3 4 1 4 2 0 -3 4 0 4 3 hess(A) ans = 1 4 2 0 -3 4 0 4 3
三、MATLAB在高等数学中的应用 pretty命令:此为MATLAB中的化简命令。 syms x y z a b c f=(x+y)*(a+b^c)^z/(x+a)^2*y; f=(x+y)*(a+b^c)^z/(x+a)^2; g=(a+b^c)^z/(x+a)^2*x+(a+b^c)^z/(x+a)^2*y; pretty(f) c z (x + y) (a + b ) ----------------- 2 (x + a) pretty(g) c z c z (a + b ) x (a + b ) y ----------- + ----------- 2 2
数值逼近:把一些离散的数据用一个近似的解析表达式描述出来,解决方法有两个:一是曲线拟合,二是插值。 1、曲线拟合:用已知的离散数据构造出一条“最”光滑的曲线,利用函数polyfit进行拟合。 调用格式:p=polyfit(x,y,n),功能为利用已知的向量x和y所确定的数据点,采用最小二乘法构造出n阶多项式去逼近已知的离散数据。 x=-2:0.4:2 y=[2.8 2.96 2.54 3.44 3.56 5.4 6.0 8.4 9.5 13.3 15]; n=2; p=polyfit(x,y,n) p = 1.0303 3.0818 4.9788 所得的拟合多项式为:
为了比较,将原始数据和拟合得到的曲线画出来 x=-2:0.4:2 y=[2.8 2.96 2.54 3.44 3.56 5.4 6.0 8.4 9.5 13.3 15]; plot(x,y,'bo') hold on x1=-2:0.4:2; y1=polyval(p,x1); plot(x1,y1,'r:')
2、一元插值:一元插值就是利用已知的数据构造插值表。用MATLAB提供的函数interp1可实现一元插值。 调用格式为:yi=interp1(x,y,xi,method) 功能:利用已知的数据(x,y)构造插值函数,并计算xi处的函数值yi。method为插值的方法,其选项有: ‘linear’ 线形插值 ‘cubic’ 三次多项式插值 ‘nearest’ 最近点插值 ‘spline’ 三次样条插值 x=0:10; y=cos(x); xi=0:0.1:10; li=interp1(x,y,xi,'linear'); ci=interp1(x,y,xi,'cubic');
si=interp1(x,y,xi,'spline'); ni=interp1(x,y,xi,'nearest'); plot(x,y,'mo',xi,li,'k--',xi,ci,'b:',xi,si,'r-',xi,ni,'c'); legend('origin data','linear','cubic','spline','nearest');
四、Matlab的绘图 一个有趣的例子:飞闪效果抓拍的图片 load wind wind_speed = sqrt(u.^2 + v.^2 + w.^2); hpatch = patch(isosurface(x,y,z,wind_speed,35)); isonormals(x,y,z,wind_speed,hpatch) set(hpatch,'FaceColor','red','EdgeColor','none'); [f vt] = reducepatch(isosurface(x,y,z,wind_speed,45),0.05); daspect([1,1,1]); hcone = coneplot(x,y,z,u,v,w,vt(:,1),vt(:,2),vt(:,3),2); set(hcone,'FaceColor','blue','EdgeColor','none'); hlight = camlight('headlight'); set(hpatch,'AmbientStrength',.1,... 'SpecularStrength',1,... 'DiffuseStrength',1); set(hcone,'SpecularStrength',1); set(gcf,'Color','k') lighting gouraud set(gcf,'Renderer','OpenGL') lighting phong set(gcf,'Renderer','zbuffer') hsline = streamline(x,y,z,u,v,w,80,30,11); xd = get(hsline,'XData'); yd = get(hsline,'YData'); zd = get(hsline,'ZData'); delete(hsline) for i=1:length(xd)-50 campos([xd(i),yd(i),zd(i)]) camtarget([xd(i+5)+min(xd)/100,yd(i),zd(i)]) camlight(hlight,'headlight') drawnow end
MATLAB的绘图简介 MATLAB的图形窗口 建立图形窗口: figure:为当前的绘图命令建立一个新的图形窗口. figure(n):将第号图形窗口作为当前图形指令的图形窗口.
在同一个图形窗口中,可以用subplot命令建立几个不同的坐标系,并可以指定其中的一个作为当前的绘图坐标系。 建立坐标子系统 在同一个图形窗口中,可以用subplot命令建立几个不同的坐标系,并可以指定其中的一个作为当前的绘图坐标系。 命令格式为:subplot(m,n,p) 功能:将当前的图形窗口分成m*n个子坐标系统,并选择第p个作为当前坐标系,各个子坐标系的编号先按行(从上到下),再按列(从左到右)。 x=0:pi/100:2*pi; subplot(2,2,1); plot(x,sin(x)); subplot(2,2,2); plot(x,cos(x)); subplot(2,2,3); plot(x,tan(x)); subplot(2,2,4); plot(x,sinh(x));
hold on:保留当前的图形及其坐标系的所有属性,在已存在的图形的基础上附加新的图形。 图形的保留开关: hold on:保留当前的图形及其坐标系的所有属性,在已存在的图形的基础上附加新的图形。 hold:返回hold的缺省模式,随后plot的命令会把原有的图形擦掉,而画出新的图形。 clear x=0:pi/100:2*pi; plot(x,sin(x)); hold on plot(x,cos(x));
坐标轴的形式和刻度:axis命令用于设置坐标轴的属性,常用格式如下: axis([x min,x max,y min,y max]):指定坐标轴的范围,其中[x min,x max]是x坐标轴的范围,[y min,y max]是y坐标轴的范围。 axis(‘auto’):使坐标轴的范围返回原来的缺省模式。 axis(‘ij’):使用“矩阵”坐标模式:坐标的原点在左上角,水平轴j的刻度从左 到右增加,垂直轴i的刻度从上到下增加。 axis(‘xy’):使用系统缺省的笛卡尔坐标系,坐标原点在左下角,水平轴x的刻度从左到右是增加的,垂直轴y从上到下是增加的。 axis(‘square’):使当前的坐标区域变成正方形。 axis(‘equal’):使标注在不同坐标轴上的刻度的增量是相等的。 axis(‘on’):使坐标轴和它的刻度、标注和说明等变为on状态(显示)。 axis(‘off’):与上一命令功能相反。
axis on axis([0,10,0,5]) x=0:pi/100:2*pi; plot(x,sin(x)); axis off
图形窗口中的文本: t i t l e ( t x t ): 在图形窗口顶端的中间位置输出字符串t x t作为标题。 x l a b e l ( t x t ): 在x轴下的中间位置输出字符串t x t作为标注。 y l a b e l ( t x t ) :在y轴边上的中间位置输出字符串t x t作为标注。 z l a b e l ( t x t ): 在z轴边上的中间位置输出字符串t x t作为标注。 t e x t ( x , y , t x t ) :在图形窗口的(x, y)处写字符串t x t。 l e g e n d ( s t r 1 , s t r 2 , . . .p o s):在当前图上输出图例,并用说明性字符串s t r 1, s t r 2等作为标注。如果指定参数p o s,则图例将按下面所述放置:-1: 将图例框放在坐标轴外的右侧。0: 将图例框放在坐标轴内侧,以便最少的点被覆盖。1: 将图例框放在右上角。2: 将图例框放在左上角。3: 将图例框放在左下角。4: 将图例框放在右下角。[x, y] 将图例框的左下角移动到坐标(x, y)指定的位置。 legend off 从当前图形中清除图例。
x=0:pi/100:2*pi; y=sin(x); z=cos(x); v=y-z; plot(x,y,'k-',x,z,'b:',x,v,'ro'); xlabel('Input Value'); ylabel('Function Value'); title('Two Trigonometric Function'); grid on; legend('y=sin(x)','z=cos(x)','v=sin(x)-cos(x)');
绘制二维图形 基本的二维图形命令: p l o t ( x , y ) 对向量x绘制向量y。以x为横坐标,y为纵坐标,按照坐标(xj ,yj)的有序排列绘制曲线。 p l o t ( y ) 以j为横坐标, yj为纵坐标,绘制(j, yj)的有序集合的图形。 p l o t ( A ) 绘制矩阵A的列对它下标的图形。对于m×n的矩阵A, 有n个含有m个元素的数对, 或是n条有m个点曲线,且这n条曲线均采用颜色监视器上不同的颜色绘制而成。 p l o t ( x , A ) 绘制矩阵A对向量x的图形。对m×n的矩阵A和长度为m的向量x,绘制矩阵A的列对向量x的图形。如果x的长度为n,则绘制矩阵A的行对向量x的图形。向量x可以是行向量也可以是列向量。
p l o t ( A , B ) 对矩阵A的行绘制矩阵B的列的图形。如果A和B都是m×n的矩阵,将绘制n条由m个有序对连成的曲线。 p l o t ( A , x ) 对矩阵A绘制向量x的图形。对于一个m×n的矩阵A和一个长度为m的向量x,对矩阵A的列绘制向量x的图形。如果x的长度为n,则对矩阵A的行绘制向量x的图形。向量x可以是行向量也可以是列向量。 p l o t ( A , B ) 对矩阵A的行绘制矩阵B的列的图形。如果A和B都是m×n的矩阵,将绘制n条由m个有序对连成的曲线。 例:x=[-4 -2 0 1 3 5]; y=[16 4 0 1 9 25]; plot(x,y) 例:y=[16 4 0 1 9 25]; plot(y)
例:x=0:0.1:2; A=[sin(pi*x);0.5+0.5*x]; plot(A) 例:x=0:0.1:2; A=[sin(pi*x);0.5+0.5*x]; plot(x,A)
例:x=0:0.1:2; A=[sin(pi*x);0.5+0.5*x]; plot(A,x) 例:A=[1 4 2;0 -3 4;0 4 3]; B=[1 0 0 ;0 1 0;0 0 1]; plot(A,B)
p l o t (. . ., s t r ) :使用字符串s t r指定的颜色和线型进行绘图。下表列出了s t r可以取的值。 p l o t ( x 1 , y 1 , s t r 1 , x 2 , y 2 , s t r 2 , . . . ):用字符串s t r 1指定的颜色和线型对y1绘制x1的图形,用字符串s t r 2指定的颜色和线型对y 2绘制x 2的图形. . . .。每组参数值可以采用上述除复数值以外的任何一种形式。str1, str2. . .可以省略,此时,M AT L A B自动为每条曲线选择颜色和线型。 x=0:pi/100:2*pi; y=sin(x); z=cos(x); v=y+z; plot(x,y,'k-',x,z,'b:',x,v,'ro');
点类型 . 点 * 星号 s q u a r e 正方形 d i a m o n d 菱形 p e n t a g r a m 五角星形 h e x a g r a m 六角星形 n o n e 无点 o o + + x × < 顶点指向左边的三角 > 顶点指向右边的三角 ^ 正三角 V 倒三角 线类型 - 实线 - - 虚线 -. 点划线 : 点线 n o n e 无线 颜色 g 绿色 m 品红色 b 蓝色 c 灰色 w 白色 r 红色 k 黑色 y 黄色
绘制三维图形 基本三维绘图命令: p l o t 3 ( x , y , z ) :用(xi, yi, zi)所定义的点绘制图形。向量x、y和z必须为等长度的。 p l o t 3 ( X , Y , Z ) :对矩阵X、Y和Z的每一列绘图。这些矩阵必须大小相等。或者,也可以是长度与矩阵列向量相等的向量。 p l o t 3 ( x , y , z , s t r ) :使用字符串s t r确定的线型和颜色按照上面所述的方法绘制图形。参见二维图形所用表。 p l o t 3 ( x 1 , y 1 , z 1 , s t r 1 , x 2 , y 2 , z 2 , s t r 2 ,. . .):用字符串s t r 1确定的线型和颜色对x 1 , y 1 , z 1绘图,用字符串s t r 2确定的线型和颜色对x2, y2, z2绘图. . .。如果省略s t r 1 , s t r 2,. . .,M AT L A B将自动选择线型和颜色。
clear; x=linspace(1,12*pi); subplot(1,2,1); plot3(sin(x),cos(x),x); title('helix'); subplot(1,2,2) plot3(cos(x),sin(x),x,'r:'); xlabel('cos(x)'); ylabel('sin(x)'); zlabel('x');
纹理映射后的三维表面图形 load earth % 加载二维数据图形 sphere; h = findobj('Type','surface'); hemisphere = [ones(257,125),... X,... ones(257,125)]; set(h,'CData',flipud(hemisphere),'FaceColor','texturemap') colormap(map) axis equal view([90 0]) set(gca,'CameraViewAngleMode','manual') view([65 30])
随机真彩填充的表面图形 Z = peaks(25); C(:,:,1) = rand(25); C(:,:,2) = rand(25); surf(Z,C)
随机采样数据的表面图形 x = rand(100,1)*16 - 8; y = rand(100,1)*16 - 8; r = sqrt(x.^2 + y.^2) + eps; z = sin(r)./r; xlin = linspace(min(x),max(x),33); ylin = linspace(min(y),max(y),33); [X,Y] = meshgrid(xlin,ylin); Z = griddata(x,y,z,X,Y,'cubic'); mesh(X,Y,Z) axis tight; hold on plot3(x,y,z,'.','MarkerSize',15)
例子 表面图形中添加颜色条 [x,y] = meshgrid([-2:.2:2]); Z = x.*exp(-x.^2-y.^2); surf(x,y,Z,gradient(Z)) colorbar
三维网线图和曲面图的绘制 1、绘制三维网线图: 已知n维的向量x和m维的向量y,相应地二元函数z=f(x,y)的离散值为:z(i,j)=f(x(j),y(i)) j=1,…,n; i=1,…m 则绘制二元函数的三维网线图的基本步骤如下; (1)用meshgrid函数生成网线结点矩阵X、Y: [X,Y]=meshgrid(x,y) (2 ) X和Y计算函数值矩阵Z。 (3)由函数mesh绘制三维网线图。 下面介绍mesh的基本用法: 调用格式1:mesh(X,Y,Z),其功能为根据矩阵X,Y,Z绘制彩色的空间三维网线图.X,Y,Z中对应的元素映射为三维空间上的点,点与点之间用线段连接。 调用格式2:mesh(x,y,Z),其功能为n维的向量x,m维的向量y和m*n
的矩阵Z绘制成网线图,结点的坐标为(x(j),y(i),Z(i,j))。 调用格式3:mesh(Z),其功能为由数值对(i,j,Z(i,j))实现作图。 t=0:pi/10:2*pi; [X,Y,Z]=cylinder(4*cos(t)); subplot(2,2,1); mesh(X) title('X'); subplot(2,2,2); mesh(Y) title('Y'); subplot(2,2,3); mesh(Z); title('Z'); subplot(2,2,4); mesh(X,Y,Z) title('X,Y,Z');
例:用mesh绘制一顶阔边帽。 x=-8:0.5:8; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; mesh(X,Y,Z) title('Sombrero');
2、彩色的三维曲面图 在三维网线图上,对网线之间的网线元进行颜色填充,就成了三维的曲面图了,使用surf函数我们可以实现。surf和mesh有相同的参数形式。 x=-8:0.5:8; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; Z=sin(R)./R; surf(X,Y,Z) title('Sombrero');
专用图形简介 除了基本的绘图命令plot外,MATLAB还有其它各种二维绘图函数。 loglog:使用对数坐标作图。x和y的两个坐标采用对数刻度。 semilogx:只是x轴采用了对数坐标,y轴仍采用线性刻度画图。 semilogy:与上条情况相反。 bar:绘制条形图。 stairs:绘制阶梯图。 stem:绘制针状图。 errorbar:绘制误差棒图。 compass绘制复数向量图,以坐标原点为起点。 feather:绘制复数向量图,但是以向量的下标为起点。 polar:绘制极坐标图。 fplot:对于变化剧烈的函数,可用fplot函数进行较精确的绘图。
x=0:10; y=rand(size(x)); subplot(1,2,1); bar(x,y); title('Bar chart of random'); subplot(1,2,2); stairs(x,y); title('stair chart of random'); 本例画一个随机的条形图和梯形图
x=0:10; y=rand(size(x)); subplot(1,2,1); bar(x,y); title('Bar chart of random'); subplot(1,2,2); stairs(x,y); title('stair chart of random'); x=-3.9:0.2:3.9; y=randn(4000,1); subplot(1,1,1); hist(y,x); title('Histogram chart of random'); 本例画一个随机的频数统计直方图
x=linspace(0,10,50); y=sin(x).*exp(-x/3); stem(x,y); title('stem chart'); %以linspace(初值,终值,元素个数)建立 %线形等距离数组 绘制一个针状图
x=linspace(0,2*pi,30); y=sin(x); e=std(y)*ones(size(x)); errorbar(x,y,e); title('errorbar chart'); %以linspace(初值,终值,元素个数)建立 %线形等距离数组 绘制一个误差棒图
x=linspace(0,2*pi,20); z=cos(x)+i*sin(x); subplot(2,2,1); compass(z); title('compass plot'); subplot(2,2,2); feather(z); title('feather plot'); subplot('2,2,4'); fplot('sin(1/x)',[0.02 0.2]); title('fplot:sin(1/x)'); x=linspace(0,2*pi); subplot(2,2,3); r=cos(4*x); polar(x,r); title('polar plot'); %[0.02 0.2]是绘图范围 本例绘制两个向量图,一个极坐标图,一个一员函数曲线图。
clear close all x=randn(1000,1); subplot(1,2,1); rose(x); title('rose plot'); x=linspace(0,10,50); y=sin(x).*exp(-x/3); subplot(1,2,2); fill(x,y,'m'); title('fill plot'); Rose和fill的使用