《2022年学习matlab》由会员分享,可在线阅读,更多相关《2022年学习matlab(16页珍藏版)》请在金锄头文库上搜索。
1、第二讲Matlab 基础知识1. 标识符把标志变量、常量或文件名的特定字符称为标识符,Matlab 规定必须是英文字母、阿拉伯数字和下划线等符号组成的字符串,第一个符号必须是英文字母。2. Matlab 中的数据及变量类型有三种类型的基本数据:(1)数值型数据,简称数值(Double Array) :一般输入的数字均为数值数据,包含实数、复数。(2)字符串型数据,简称字符量(Char Array) :用英文格式单引号加以界定的数字、字符、各种符号、表达式、方程式和汉字等。(3)符号型数据,简称符号量( Sym Object) :用 sym 和 syms可以把字符、表达式、方程、矩阵等定义成数学
2、符号,称为符号型数据,运算结果为数学表达式。在命令窗口中键入class (a) ,回车可知已有变量a 是哪一种类型的数据。3. 变量名及赋值(略)2.1 数值矩阵2.1.1 永久性数值变量名除了 i、j、pi、eps (浮点运算相对精度10-52) 、Inf、NaN 外还有,realmin(最小正浮点数 2-1022)、realmax(最大正浮点数 21023)。2.1.2 数值矩阵的创建1.直接输入法a=1 6 1;4 6 2;9 3 8; b=2-3i,3+5i,2i;3,9i,6;5-i,7i,4; 2.创建特殊数值矩阵的命令输入法命令格式功能命令格式功能zeros(n) 输出 n 阶全
3、零方阵rand(n) 输出 n 阶均匀分布的随机方阵zeros(m,n) 输出 m n 全零矩阵rand(m,n) 输出 m n 阶均匀分布的随机矩阵ones(n) 输出 n 阶全 1 方阵randn(n) 输出 n 阶正态分布的随机方阵ones(m,n) 输出 m n 全 1 矩阵randn(m,n) 输出 m n 阶正态分布的随机矩阵eye(n) 输出 n 阶单位方阵, n=1 时可省略magic(n) 输出 n 阶魔方阵(各行各列及主对角线元素和均为3() / 2nndiag(a,k) 输出矩阵 a主对角线右移k列时其元素构成的列向量。k=0 时可省略tril(a) truilu(a)
4、输出矩阵 a 的主对角线下(上)方元素构成的下(上)三角矩阵。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 16 页3变换矩阵结构的命令flipud(a)输出矩阵 a上下翻转后的矩阵;fliplr(a) 输出矩阵 a左右翻转后的矩阵;rot90(a,k)输出矩阵 a沿逆时针旋转 k 个 90 度后的矩阵, k 为正负整数;rot90(a)输出矩阵 a 逆时针旋转 90 度后的矩阵;reshape(A,m,n) 输出一个 m n=k 阶矩阵,它是由矩阵 a 的 k 个元素重新排列构成的矩阵,重排前后元素在矩阵中的符号不变。4. 一批特殊
5、向量(行矩阵)的创建(1) 等差数列型向量的创建增量输入法: t=a:h:b或 t=a:h:b, t=(a:h:b),a、b 为起始值, h 为公差,可正,可负,省略时为1. 例如 t=0:0.1:2*pi 线性等分命令t=linspace(a,b,n) ,a、b 为起始值, n 为(b-a)的等分点个数。例 x=linspace(2,2*pi,6) (2) 等比数列型向量的创建调用格式为: q=logspace(log10(a),log10(b),n) 或 q=logspace(as,bf,n),a 、b 分别为等比数列的初值和终值,n 为等比数列划分时的节点数。例 q=logspace(0
6、,1,6) 2.1.3 数值矩阵的矩阵算法矩阵算法按照(线性代数)矩阵理论来运算。数组算法把矩阵视为由其元素构成的数据(数组),运算时在参与运算的矩阵的元素之间进行的数与数的运算,如通常的“.*”运算。便于对大批数据的处理。1. 数值矩阵维数的查验和矩阵的转置查验矩阵维数命令: size(a) 或 size(a,r), r 取 1 输出矩阵的行数;取2 输出矩阵的列数。例 b=3 7 0 1;7 9 1 5; size(b) 转置为: c=b 2. 矩阵算法中的矩阵加、减和乘法运算普通的矩阵算法。注意:na,a 为矩阵, n 为整数。当 n0 时,表示 n 个 a相乘;当n0 时,表示n 个
7、a 相乘的逆。矩阵a 与常数d 的和定义为a+d=a+d*ones(size(a) 。3. 数值矩阵的求逆及矩阵算法中的除法(1) 求逆命令矩阵 a、b 满足 ab=ba=e (单位矩阵),格式 b=inv(a) (2) 求矩阵的伪逆矩阵对矩阵 b(可以是奇异或长方),同时满足 xbx=b 和 bxb=x 的矩阵 x 称为 b的伪逆矩阵,格式x=pinv(b) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 16 页(3) 左除解矩阵方程 ax=b 可得 x=a-1b,格式 x=inv(a)*b 或 x=ab 或 mldivide(a,
8、b) (4) 右除解矩阵方程 xa=b 可得 x=ba-1,格式 x=b*inv(a) 或 x=b/a 或 mrdivide(b,a) 4. 矩阵函数设 a为方阵。expm(z)211!2!aaaelogma(a)ln asqrtm(a)矩阵 a的平方根funm(a,f)矩阵 a 的任意函数 f(a) 2.1.4 数值矩阵的数组算法1.查验向量维数命令length(a),a 为向量输出维数; a为列阵(行阵)时,输出列(行)数;a为长方形矩阵时,输出行和列数。2.数值矩阵间数组算法的四则运算a.*ba与 b 的对应元素相乘a.na 中每个元素的 n 次方a./s,s.a a中各元素被 s 除a
9、./b,b.a a中各元素除以 b 中对应元素s./a,a.s s被 a中各元素除。3.数组算法中的基本初等函数运算函 数 命令数学意义函数命令数学意义函数命令数学意义sin(x) sin x round 四舍五入angle(x) x 的幅角asin(x) arcsinx fix 输出靠零的整数pow2(x) 2x cos(x) cos x floor 输出靠向的整数max(x) 各列元素中最大值sec(x) sec x ceil 输出靠向的整数mean(x) 各列元素之平均值tan(x) tan x atan(x) arctan x sum(x) 各列元素之和cot(x) cot x exp
10、(x) ex rem(x1,x2) 或 mod(x1,x2) 矩阵 x1 除以 x2 元素的余数sinh(x) 双曲正弦log(x) ln x cosh(x) 双曲余弦log2(x) long2 x median(x) 各列元素的中间值real(x) x 的实部log10(x) lg x prod(m:n) m(m+1) ,(n-1),m a=I am a sutdent 字符串的输出显示命令disp(zs),输入参数 zs 可以是数值变量、字符串变量和被界定的字符串,但每一次只能有一个内容,各变量之间用空格分开。空格也可以用字符命令blanks(n)控制。 a=sint;b=exp(t);c
11、=lnt;t=0.1:0.2:pi/4; d= t sint exp(t) lnt ; disp(d),disp(t sin(t) exp(t) log(t) 格式化数据显示命令为了使输出的数据按规定格式 (表示方式、小数点位数等)显示,常用命令 sprintf(Z,S1,S2) 输入参数的第一部分 Z由两部分组成(这两部分可以交错混合排列);控制的第二部分数据显示S1、S2 显示形式的“格式”,格式符及其意义如下表,两个格式符空格的大小就是数据显示时的间距。格式显示格式格式符显示格式%e 指数格式%g 自动选择指数%f 小数格式%m.nf 数据共占 m 个字符宽度,显示 n 位小数%d 十进
12、制整数格式n 换行符【例 2-17】分两行输出自然数e,ln 5 和最小浮点数 eps的符号(即表头)和数值。 a=exp(1) log(5) eps; b=sprintf( e ln5 epsn %9.3f; %f; %e;,a) 2 自定义函数求值可以用数值或符号变量表达式、内联函数命令、自己编写的M-函数文件等多种方法自定义函数、然后进行函数的求值运算。(1)用数值变量表达式自定义函数。四则运算中必须用数组符号算法符号, 否则称为矩阵函数;表达式使用时“一次性”的,再使用需要重新输入;输入表达式前必须先给数值变量赋值。(2)用字符变量表达式定义函数把函数表达式定义成字符串表达式(自定义函
13、数),给字符串赋值以后,通过数值转换命令eval 将字符串转换为数值,从而得出函数值。表达式两端必须加单引号界定,使之被定义为字符串表达式。(3)用内联函数命令自定义函数内联函数命令为 fun1_1=inline(字符串表达式)【例 2-48】 已知329653A, 用三种方法求32()sinaijijyf aaae。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 16 页数值变量法: A=3 2*pi 9;6 5 3*pi; f1=A.3+sin(A).2+exp(-A) 字符变量函数法: fx1=A.3+sin(A).2+exp(-
14、A); A=3 2*pi 9;6 5 3*pi;fx1_A=eval(fx1) 内联函数法: fx2=inline(A.3+sin(A).2+exp(-A); A=3 2*pi 9;6 5 3*pi;fx2(A) 2.2.2 符号变量(略)2.2.3 符号矩阵的创建方法 Y=sym(a 5*b+1;c-sin(a) b+3) 2.2.4 符号矩阵的运算符号矩阵的加法、乘法、点乘法: X=sym(a/b,sin(a);b4,8);Y=sym(3/a,cos(b);b3,3); X+Y,X*Y,X.*Y 符号矩阵的求逆运算: inv(X) 对矩阵2225621xxxxxx各元素进行因式分解: A=
15、sym(x/(x2-5*x-6),2*x/(x2-2*x+1); factor(A) 将符号矩阵3cos()sin()(1)xyxyxyex的各元素展开: A=sym(cos(x-y),sin(x+y);exp(x-y),(x-1)3); expand(A) 同次幂系数合并: syms x y,collect(x2*y+x*y-2*x2-3*x) 求极限:格式, limit(F,x,a, right 或 left ),right,left 表左右极限,缺省时表极限。 syms x m a,limit(x(1/m)-a(1/m)/(x-a),x,a) 求导数命令,格式: diff(S, v ,n
16、),S 为函数, v 为求导的指定自变量, n 为求导阶数。【例 2-29】已知二元函数sin()( , )xyz x yxye,求zx、zy默认变量 x: syms x y,z=x*y*exp(sin(pi*x*y);diff(z) 指定变量 y: diff(z,y) 泰勒展开式: syms x,taylor(exp(2*x) 2.3 基本绘图方法精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 16 页Matlab 提供了丰富的绘图功能, 在绘图时,每个图形元素 (如坐标轴或图形上的曲线、文字等)都是一独立的对象,被分配给一个句柄(h
17、andle) ,用户只需对该句柄进行操作就可以独立地修改一个图形元素,而不影响图形的其他部分。2.3.1 二维图形函数与调用方法常用的绘图函数plot绘制二维图形, x 轴和 y 轴为线性坐标semilogx绘制二维图形, x 轴为对数坐标, y 轴为线性坐标semilogy绘制二维图形, x 轴为线性坐标, y 轴为对数坐标loglog绘制二维图形, x 轴和 y 轴均为对数坐标plotyy绘制二维图形,在图形的左右各有一个y 轴polar绘制极坐标曲线grid在图形窗口添加网(grid on)或去掉网( grid off)zoom允许( zoom on)或不允许( zoom off)对图形
18、进行放大缩小操作ginput用鼠标获取图形中点的坐标patch填充二维或三维坐标中的二维图形fill 填充二维坐标中的二维图形1基本二维图形Plot(X,Y, S ) X 为横坐标, Y 为纵坐标, S是修饰曲线的标记符,包含标志拐点的点型符号、曲线的线性符号和色型符号,分布标记数据点位置、曲线类型和曲线色彩。常用的绘图选项选项含义选项含义选项含义- 实线c 青色D 用菱形标出数据点- 虚线w 白色V 用下三角形标出数据点: 点线k 黑色 用上三角形标出数据点-. 点画线* 用*号标出数据点 用右三角形标出数据点g 绿线o 用圆圈标出数据点H 用六角形标出数据点b 蓝线x 用叉号标出数据点P
19、用五角形标出数据点y 黄线+ 用加号标出数据点m 洋红s 用正方形标出数据点画实线可以在参数S 后加写“ linewidth,n” ,用以控制线条宽度, n 标志线宽,也可在绘图窗中单击快捷按钮,用其菜单进行编辑。【例 2-34】 y=3 7 9 1 5 2 8; subplot(1,2,1),plot(y,linewidth,2),grid 又如: x=3 3 9;8 1 2;1 8 5;7 9 1; subplot(1,2,2),plot(x),xlabel(x),ylabel(y) 2.特殊坐标二维图形极坐标曲线: theta=0:0.1:8*pi; polar(theta,cos(4*
20、theta)+1/4) 对数坐标曲线: x=0:0.1:2*pi; y=sin(x);semilogx(x,y);grid on 【例 3-27】执行下列程序,比较在不同坐标系下的图形特点。theta=0:0.1:6*pi; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 16 页 r=cos(theta/3)+1/9; subplot(2,2,1),polar(theta,r) subplot(2,2,2),plot(theta,r) subplot(2,3,4),semilogx(theta,r) subplot(2,3,5),se
21、milogy(theta,r) subplot(2,3,6),loglog(theta,r) 双 y 轴图形: x=0:0.01:5;y=exp(x);plotyy(x,y,x,y,semilogy,plot),grid 复数数据, plot(x,y) ,不论参数 x、y 那个是复数,都将忽略掉虚部数据,只绘制该复数的实部数据,其余用法和绘制与一般实数数据相同。plot(z)绘图时,以复数的实部为横坐标,虚部为纵坐标绘制实部和虚部的关系曲线。 t=0:0.1:2*pi;x=sin(t);y=cos(t);z=x+y*i;plot(t,z),grid t=0:0.1:2*pi;x=sin(t);
22、y=cos(t);z=x+y*i;plot(z),grid 2.3.2 二维图形处理图形标注x=(0:0.1:2*pi); y1=2*exp(-0.5*x)*1,-1; y2=2*exp(-0.5*x).*sin(2*pi*x); x1=(0:12)/2; y3=2*exp(-0.5*x1).*sin(2*pi*x1); plot(x,y1,g:,x,y2,b-,x1,y3,rp) title(曲线及其包络线 ); xlabel(变量 x); ylabel(变量 y); text(3.2,0.5,包络线 ); text(0.5,0.5,曲线 ); text(1.4,0.15,离散数据点 );
23、legend(包络线 ,曲线 y,离散数据点 ) 坐标控制axis equal 纵、横坐标轴采用等长刻度axis squae 产生正方形坐标系(默认为矩形)axis auto使用默认设置axis off取消坐标轴axis on显示坐标轴给坐标轴加网格线 x=(0:0.1:2*pi); y1=2*exp(-0.5*x)*1,-1; y2=2*exp(-0.5*5).*sin(2*pi*x); plot(x,y1,g); hold on; plot(x,y2,b-); x1=(0:12)/2; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共
24、 16 页 plot(x1,y3,rp); grid on; box off; hold off; 2.3.3 三维图形的基本函数建立三维图形的基本函数函数功能函数功能plot3 建立三维线条图surfc 建立带有基本等高线的表面图mesh 建立网格图surfl 建立带有指定方向照明的表面图meshc 建立具有基本等高线的网格图surface 建立表面图对象的低级函数meshz 建立具有基准平面的网格图Fill3 填充三维多边形surf 建立表面图2.3.4 三维曲线图【例 2-45】绘制三维曲线 t=pi:pi/200:8*pi; h=figure(1) ; set(h,color,1,1,
25、1) ; subplot(1,2,1),plot3(cos(t),sin(t),t,b-) subplot(1,2,2),plot3(sin(t),cos(t),t,.) 2.3.5 三维网格图所谓网格图就是把相邻的数据点连接起来形成网状曲面。【例 2-46】绘制函数2222sinxyzxyx,y=meshgrid(-8:0.5:8,-10:0.5:10); R=sqrt(x.2+y.2)+eps; z=sin(R)./R; mesh(x,y,z) 在以上程序末尾加hiden off 可以显示被遮住部分的效果。2.3.6 三维曲面图所谓三维曲面图,就是把三维网格图表面的网格围成的小片区域用不同
26、颜色填充所形成的彩色曲面。【例 2-47】绘制标准曲面 subplot(2,2,1),sphere(3); title(n=3),axis equal; subplot(2,2,2),sphere(6); title(n=6),axis equal; subplot(2,2,3),sphere; title(n=20),axis equal; subplot(2,2,4),sphere(50); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 16 页 title(n=50),axis equal; 【例 2-49】绘制三维曲面图x,y
27、=meshgrid(-8:0.5:8,-10:0.5:10); R=sqrt(x.2+y.2)+eps; z=sin(R)./R; surf(x,y,z); colorbar colorbar 命令的作用是在三维曲面图旁边绘制一个可以指示高度的色彩条,使三维曲面的可读性更强。handing flat 去掉各片连接处的线条,平滑当前图形的颜色。shading interp 去掉连接线条,在各片之间使用颜色插值,使得片与片之间以及片内部的颜色均过渡。shading faceted 默认值,带有连接线条的曲面。可以将 surf 换为 surfc 或 surfl。2.3.7 专用图形1 条形图bar,
28、bar3分别绘制二维和三维竖条形图;barh 和 bar3h 分别绘制二维和三维水平条形图。四个函数用法相似。Bar(x,y):x 是横坐标向量, y 是向量或矩阵。 y 是向量时,每个元素对应一个竖条;y 是 m 行 n 列矩阵时,将画出 m 组竖条,每组包括 n 个条。bar(y):横坐标使用默认值1:m。bar(x,y,width)或 bar(y,widh):用 width 指定竖条的宽度,默认宽度是0.8.如果宽度大于 1,那么条与条之间将重合。bar( , , grouped): 产生组合的条形图。bar( , ,stacked):产生堆叠的条形图。bar(,linespec):指定
29、条的颜色。h=bar(, ): 返回补片对象的句柄向量。 Y=3,8,2;8,9,2;8,3,3;2,5,6;9,5,1; subplot(1,2,1),bar(Y),title(二维条形图 ); subplot(1,2,2),bar3(Y),title(三维条形图 ); 2 直方图(统计拼数条形图)hist 在直角坐标系中建立直方图,rose在极坐标系下建立直方图。n=hist(y):指 y 按其中数据的大小分为10 个相等的段,统计每段中的元素个数并返回给n。如果 y 是矩阵,那么按列分段。n=hist(y,m):m 是标量,用来设置分段的个数。n=hist(y,x):x 是向量,用来指定
30、所分的每个数据段的中间值。hist( , ): 不带输出参数时,直接绘制直方图。 y1=randn(10000,1); y2=rand(10000,1); subplot(1,2,1);hist(y1,20);title(正太分布 ); subplot(1,2,2);hist(y2,10);title(均匀分布 ); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 16 页3 饼形图pie 和 pie3 分别用于绘制二维和三维饼形图。pie(x):x可以是向量矩阵。 如果 x 是向量,则绘制各个元素在向量所有元素之和中所占的比例。pie
31、(x,explode):参数 explode 中的元素值非零时,该元素所对应的片和整个图形脱开。pie( , ,labels):labels用于标注饼形图的字符串数组,它必须和x 同维。若没有指定,则Matlab 缺省的以该片所占的比例作为标注。h=pie( , ): 返回包括补片和文本对象的句柄的向量。 cj=80,95,70,40; 二维饼图 pie(cj,0,0,1,0) 三维饼图 pie3(cj,0,0,1,0,语文 28%, 数学 33%, 外语 25%, 政治14%); 4 离散数据图函数 stem 和 stem3 分别用来绘制二维和三维的离散图形,用法与plot和plot3 用法
32、一致,区别在于这两个函数用选项fill来填充图中的离散点标记。绘制离散数据图: x=linspace(0,2*pi,40); a=sin(2*x);b=cos(x); stem(x,a+b);hold on; plot(x,a);hold on; plot(x,b);hold off; 用函数绘制三维空间中的火柴杆图,当数据较少时, 这种效果较好。以下是一个螺旋线的例子。th=(0:127)/128*2*pi;x=th.*cos(th);y=th.*sin(th); stem3(x,y,th,fill);view(-158 66); xlabel(X轴);ylabel(y轴);zlabel(z
33、轴); title(三维火柴杆图 );hold on; plot3(x,y,th,k);hold off; 画阶梯图时, 相邻两点间的区间的值全部为两点中起点的值,两点间全部用阶梯值相连。阶梯图对于绘制数字系统的时程曲线比较有用。 alpha=0.01;beta=0.5;t=0:10; f=exp(alpha*t).*sin(2*beta*t);stairs(t,f); hold on;plot(t,f,-*);hold off; label=函数 ealpha*t)sin2beta*t的阶梯图 ; text(0.5,0.2,label,FontSize,12); xlabel(t=0:10,
34、FontSize,14);axis(0,10,-1.2,1.2) 三维离散序列图绘制应用实例。 t=0:pi/10:6*pi; x=exp(-t/10).*cos(t); y=2*exp(-t/10).*sin(t); stem3(x,y,t,filled) hold on plot3(x,y,t) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 16 页 xlabel(X);ylabel(Y);zlabel(Z) 5 等高线函数 contour 和 contour3 用来绘制二维和三维等高线,调用方法如下:contour(z):直接
35、绘制矩阵 z 的等高线。contour(x,y,z):用 x 和 y 指定等高线的 x、y 坐标。contour(z,n)和 contour(x,y,z,n):用标量 n指定绘制等高线的线条数,即从最低位置到最高位置所用的条线条总数。contour(z,v)和 contour(x,y,z,v):向量 v 中的元素指定绘制等高线的位置,该向量的长度对应绘制的线条数。c,h=contour(,): 返回等高线矩阵c 和列向量 h,h 是线条对象或补片对象的句柄。Clabel(c,h):标记等高线的数值,参数 (c,h) 必须是 contour命令的返回值,即 c,h=contour(, ) 。说明
36、:n 指定要绘制出 n 条等高线,可以缺省,系统默认;若指定矩阵x 和y,则居于矩阵 x 和 y 绘制三维等高线; 参数 option 是个字符串参数, 指定等高线型和颜色,默认为黄色。二维等高线: x,y,z=peaks;contour(x,y,z,15); 三维等高线: x,y,z=peaks; contour3(x,y,z,20); colormap(hsv) 【例 2-52】利用函数 clabel绘制下列函数的曲面及其对应的三维等高线。2222222(1)35()(1)1( , )3(1)10()53xyxyxyxf x yxexyeex=-3:0.25:3;y=x;X,Y=meshg
37、rid(x,y); Z=3*(1-X).2.*exp(-(X.2)-(Y+1).*2)-10*(X/5-X.3-Y.5).*exp(-X.2-Y.2)-1/3*exp(-(X+1).2-Y.2); subplot(2,2,1);mesh(X,Y,Z) xlabel(x);ylabel(y);zlabel(z);title(Peaks函数图形 ); subplot(2,1,2);c,h=contour3(x,y,Z); clabel(c,h) xlabel(x);ylabel(y);zlabel(z);title(Peaks函数的三维等高线); 6 瀑布图函数 waterfall绘制瀑布图,用法
38、和mesh类似。 waterfall(peaks); axis tight 7 简易函数绘图三维图形简易绘制函数:函数说明ezplot3(funx,funy,tmin,tmax) 在tmin,tmax 范围下绘制 (funx(t),funy(t),funz(t)三维曲线。ezmesh(fun,domain) 在 domain 指定的区域绘制fun 指定的二元函数的网线图ezmeshc(fun,domain) 在 domain 指定区域绘制fun 指定的二元函数的网线图,并在x-y 平面叠加绘制等高线。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第
39、11 页,共 16 页ezsurf(fun,domain) 在 domain 指定的区域绘制fun 指定的二元函数的表面图ezsurfc(fun,domain) 在 domain 指定的区域绘制fun 指定的二元函数的表面图,并在 x-y 平面叠加绘制等高线。【例 2-35】利用简易三维绘图函数ezplot3 、ezmesh 、ezsurf和 ezsurfc分别绘制三维图形。 subplot(2,2,1);ezplot3(sin(t),cos(t),sin(2*t),0,2*pi); subplot(2,2,2);ezmesh(peaks,-5 5 -5 5); subplot(2,2,3);
40、ezsurf(x,y)(x.2+y.2),-5 5 -5 5); subplot(2,2,4);ezsurfc(x,y)(x.2+y.2),-5 5 -5 5) peaks 是 Matlab 内置的一个二元函数,因此peaks代表这一函数的句柄,sin和cos类似。8 圆柱体图利用圆柱体表面数据产生命令cylinder产生一组圆柱体表面的坐标矩阵值,然后由该矩阵值利用mesh或 surf 命令来绘制出这个圆柱体图形。 常用的调用格式如下:X,Y,Z=cylinder(r,n):产生三个维数为(1)(1)nn的矩阵 X、Y、Z(不直接绘制圆柱体),它们分别表示圆柱体表面上一系列数据点(x,y,z
41、)的坐标值。利用这些矩阵数据,用mesh和 surf命令来绘制出指定大小和位置的圆柱体图形。参数r 为一个向量,它表示等距离分布的沿圆柱体基线在其单位高度的半径。r 的默认值为r=1 1。参数 n确定了圆柱体绘制的精度。N值越大,数据点越多,绘制越精确。cylinder(r,n):产生圆柱体表面的数据点,并直接由surf命令绘制这个圆柱体。cylinder(r):以默认的参数n=20绘制基线为 r 的圆柱体。cylinder:以默认参数 r=1 1、n=20绘制单位圆柱体。【例 2-54】利用函数 cylinder绘制出两种圆柱体。 subplot(1,2,1);X,Y,Z=cylinder;
42、mesh(X,Y,Z);title(单位圆柱体 ); subplot(1,2,2);t=1:10;r(t)=t.*t;X,Y,Z=cylinder(r,40);mesh(X,Y,Z);title(一般圆柱体 ) 9 球面图先利用表面数据产生命令sphere 产生一组单位球面的坐标矩阵值,然后由该矩阵利用 mesh和 surf 命令来绘制出球面图形。常用调用格式如下:sphere(n):产生单位球面的数据点,并直接由surf命令绘制出这个单位球面。X,Y,Z=sphere(n):产生三个维数为(1)(1)nn的矩阵 X、Y、Z(不直接绘制圆柱体),它分别表示球面表面上一系列数据点(x,y,z)的
43、坐标值。【例 2-55】利用 sphere 绘制出两种不同的曲面。 subplot(1,2,1);sphere(25);title(单位球面 ); subplot(1,2,2);X,Y,Z=sphere(25);mesh(X,Y,2*(Z+1);title(移精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 16 页位和放大的球面 ); 2.3.8 三维绘图的高级应用1 透明度作图hidden on: 对当前图形打开隐藏线移除的状态,因此三维图后方的线会被前面的线遮住,就是会透视被叠压的图形。hidden off:对当前图形关闭隐藏移除
44、的状态,因此三维图后方的线将不会被前面的线遮住,也就是说该三维图会变成一个透明的图。hidden: 切换 hidden 为 on 或 off 的状态。【例 2-56】绘制一个球体包住网络图,并将球体设置为透明。 x,y,z=sphere(20); x=8.2*x;y=8.2*y;z=8.2*z; peaks; shading interp; %使用 imterp 渲染方式 colormap(hot); %使用 hot 颜色映射值 hold on mesh(x,y,z) % 以 mesh来绘制球体数据 hold off axis equal %产生等长的坐标轴以便于球体的显示 axis off
45、%将坐标轴隐藏在程序的末尾加上hidden off将球体设置为透明。2 立体可视化立体可视化需要构建的是立体而不是一些简单的表面,因此需要三维数组作为输入参数, 其中三维数组的每一维分别代表一个坐标轴,三维数组中的点定义了坐标轴格栅和坐标轴上的坐标点。如果要绘制的函数是一个标量函数,则绘制函数需要四个三维数组, 其中三个数组各代表一个坐标轴,第四个数组代表了这些坐标处的标量数据,这些数组通常记作X、Y、Z 和 V。如果要绘制的函数是一个向量函数,则绘图函数需要6 个三维数组,其中 3 个各表示一个坐标轴, 3 个用来表示坐标点处的向量,这些数组通常记作X、Y、Z、U 、V和 W 。需要对立体和
46、向量的术语有所了解。比如散度(Divergence) 和旋度 (Curl)用于描述向量过程, 而等值面 (Isosurfaces)和等值顶 (Isocaps) 则用于描述立体的视觉外观。先生成一个构建立体对象的坐标系:x=linspace(-3,3,13); y=1:20; z=-5:5; X,Y,Z=meshgrid(x,y,z); size(X) 运行结果:ans = 20 13 11 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 16 页其中 X、Y、Z 为定义格栅的 3 个三维数组,分别从x、y、z 经过三维格栅扩展形成的。
47、需要定义一个以三个数组为自变量的标量函数V: V=sqrt(X.2+cos(Y).2+Z.2); 利用标量函数( , )vf x y z定义一个立体对象所需要的数据已全部给出。为了使立体对象可视化,用下面的代码查看该立体对象的一些截面。 slice(X,Y,Z,V,0,3,5,15,-3,5) xlabel(X_axis);ylabel(Y_axis) 显示的立体图形在x=0,x=3,y=5,y=15,z=-3,z=5处的截面。【例 2-58】采用正弦函数来截取立体图形。在上例的基础上: xs,ys=meshgrid(x,y); zs=sin(-xs+ys/2); slice(X,Y,Z,V,
48、xs,ys,zs) 【例 2-59】添加等高线x=linspace(-3,3,13); y=1:20; z=-5:5; X,Y,Z=meshgrid(x,y,z); V=sqrt(X.2+cos(Y).2+Z.2); slice(X,Y,Z,V,0,3,5,15,-3,5) hold on h=contourslice(X,Y,Z,V,3,5,15,) set(h,EdgeColor,k,Linewidth,1.5) xlabel(X_axis); ylabel(Y_axis);zlabel(Z_axis); 【例 2-60】绘制等值面。 x=linspace(-3,3,13);y=1:20;
49、z=-5:5; X,Y,Z=meshgrid(x,y,z); V=sqrt(X.2+cos(Y).2+Z.2); X,Y,Z,V=flow(13); fv=isosurface(X,Y,Z,V,-2); subplot(1,2,1);p=patch(fv); set(p,FaceColor,.5 .5 .5,EdgeColor,Black); %设置面属性 view(3) axis equal tight %按比例显示图形,打开网格 grid on subplot(1,2,2) p=patch(shrinkfaces(fv,.3); %shrinkfaces使表面收缩 set(p,FaceCo
50、lor,.5 .5 .5,EdgeColor,Black); view(3) axis equal tight grid on 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 16 页当显示立体图时, 仅仅是为了观察其大体结构时, 就没有必要针对所有的数据点作图,因为数据点太多,会降低显示的速度。利用函数reducevolume 和reducepatch则可以使用户在显示图形之前先删除一些数据或一些对图形显示影响很小的碎片,从而提高图形显示的效率。【例 2-61】reducevolume 和 reducepatch 函数的用法。 x=
51、linspace(-3,3,13);y=1:20;z=-5:5; X,Y,Z=meshgrid(x,y,z); V=sqrt(X.2+cos(Y).2+Z.2); X,Y,Z,V=flow(13); X,Y,Z,V=flow; fv=isosurface(X,Y,Z,V,-2); subplot(2,2,1); p=patch(fv); Np=size(get(p,Faces),1); set(p,FaceColor,.5 .5 .5,EdgeColor,Black); view(3) axis equal tight grid on zlabel(sprintf(%d Patches,Np)
52、 subplot(2,2,2) Xr,Yr,Zr,Vr=reducevolume(X,Y,Z,V,3 2 2); fvr=isosurface(Xr,Yr,Zr,Vr,-2); p=patch(fvr); Np=size(get(p,Faces),1); set(p,FaceColor,.5 .5 .5,EdgeColor,Black); view(3) axis equal tight grid on subplot(2,2,3) p=patch(fv); set(p,FaceColor,.5 .5 .5,EdgeColor,Black); view(3) axis equal tight
53、grid on reducepatch(p,.15) Np=size(get(p,Faces),1); zlabel(sprintf(%d Patches,Np) subplot(2,2,4) p=patch(fvr); set(p,FaceColor,.5 .5 .5,EdgeColor,Black); view(3) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 16 页 axis equal tight grid on reducepatch(p,.15) Np=size(get(p,Faces),1); zlabel(spr
54、intf(%d Patches,Np) 三维数据也可以通过smooth3 函数来过滤而实现其平滑化。【例 2-62】smooth3 的用法。 data=rand(10,10,10); datas=smooth3(data,box,3); subplot(1,2,1) p=patch(isosurface(data,.5),FaceColor,Blue,EdgeColor,none); patch(isocaps(data,.5),FaceColor,interp,EdgeColor,none); isonormals(data,p) view(3); axis vis3d tight off camlight; lighting phong subplot(1,2,2) p=patch(isosurface(datas,.5),FaceColor,Blue,EdgeColor,none); patch(isocaps(datas,.5),FaceColor,interp,EdgeColor,none); isonormals(datas,p) view(3); axis vis3d tight off camlight;lighting phong 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 16 页