1、一、设计目的Matlab 有 两 类 绘 图 命 令 ,一 类 是 直 接 对 图 形 句 柄 进 行 操 作 的 低 层 绘 图命 令 , 另 一 类 是 在 低 层 命 令 基 础 上 建 立 起 来 的 高 层 绘 图 命 令 。 高 层 绘 图 命令 简 单 明 了 、 方 便 高 效 。 利 用 高 层 绘 图 函 数 , 用 户 不 需 过 多 考 虑 绘 图 细 节 ,只 需 给 出 一 些 基 本 参 数 就 能 得 到 所 需 图 形 。 在 三 维 曲 面 的 绘 制 中 , Matlab 提供 了 meshgrid 函 数 、 mesh waterfall、 函 数 、
2、surf 函 数 、 Surfl 函 数 和 patch函 数 。 他 们 的 使 用 方 法 基 本 相 同 。 在 Matlab 中,为 了 表 现 图 形 的 显 示 效 果 ,提 供 了 一 些 控 制 函 数 , 有 视 角 的 控 制 、 光度的 控 制 、 色 彩 的 控 制 和 透 明 度的 控 制 等 。 在 三 维 图 形 的 最 佳 视 觉 效 果 中 , Matlab 提 供 了 两 种 方 法 : 一 是 改 变 观看 的 角 度 ( 视 角 ) , 二 是 旋 转 图 形 。 视 角 由 函 数 view 控 制 , 旋 转 有 两 个 指 令 :rotate 和
3、rotate3d。光 照 的 控 制 主 要 有 camlight 指 令 、 lighting 指 令 、material 函 数 、 light 函 数 、 lightangle 函 数 。 色 彩 控 制 包 括 颜 色 的 向 量 表示 、 色 图 、 三 维 表 面 图 形 的 着 色 以 及 浓 淡 处 理 。 图 形 的 透 明 值 用 0和1之 间 的值 表 示 , 常 用 alpha 来 说 明 。二、设计思路绘制所代表的三维曲面图,先要在平面选定一矩形区域,假定矩形区域,然后将在方向分成份,将在方向分成份,由各划分点分别作平行于两坐标轴的直线,将区域 D 分成个小矩形,生成
4、代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数求对应网格坐标的 Z 矩阵。在 MATLAB 中,利用 meshgrid 函数产生平面区域内的网格坐标矩阵。其格式为: x=a:d1:b;y=c:d2:d; X,Y= meshgrid(x,y) ; 语句执行后,矩阵 X 的每一行都是向量 x,行数等于向量 y 的元素的个数,矩阵 Y 的每一列都是向量 y,列数等于向量 x 的元素的个数。当 x=y 时,meshgrid 函数可写成 meshgrid(x) 。当函数不能简单表示出来时,便只能用 for 循环或 while 循环来计算 z 的元素。 不过在很多情况下,可以按行或按列计算
5、z,优势必须一个一个地计算z 中的元素,这是用嵌套循环进行计算。三、设计程序及说明绘制三维曲面MATLAB 提供了 mesh 函数和 surf 函数来绘制三维曲面图。 surf 函数和mesh 函数的调用格式为: mesh(x,y,z,c):画网格曲面,将数据点在空间中描出,并连成网格。 surf(x,y,z,c):画完整曲面,将数据点所表示曲面画出。 一般情况下,x,y,z 是维数相同的矩阵。 x,y 是网格坐标矩阵,z 是网格点上的高度矩阵,c 用于指定在不同高度下的颜色范围。1.1 绘制三维曲面图 z=sin(x+sin(y)-x/10。 1程序如下:x,y=meshgrid(0:0.2
6、5:4*pi); %在0,4pi0,4pi区域生成网格坐标 z=sin(x+sin(y)-x/10; mesh(x,y,z); axis(0 4*pi 0 4*pi -2.5 1); 图表一此外,还有带等高线的三维网格曲面函数 meshc 和带底座的三维网格曲面函数meshz。其用法与 mesh 类似,不同的是 meshc 还在 xy 平面上绘制曲面在 z 轴方向的等高线,meshz 还在 xy 平面上绘制曲面的底座。1.2在 xy 平面内选择区域-8,8-8,8 ,绘制函数 z= sinx2+y2x2 +y2 的 4 种三维曲面图。程序如下:x,y=meshgrid(-8:0.5:8); z
7、=sin(sqrt(x.2+y.2)./sqrt(x.2+y.2+eps); subplot(2,2,1); mesh(x,y,z);title(mesh(x,y,z) subplot(2,2,2); meshc(x,y,z); 2title(meshc(x,y,z)subplot(2,2,3); meshz(x,y,z)title(meshz(x,y,z)subplot(2,2,4); surf(x,y,z); title(surf(x,y,z))图表二标准三维曲面MATLAB 提供了一些函数用于绘制标准三维曲面,还可以利用这些函数产生相应的绘图数据,常用于三维图形的演示。三维球面和柱面sp
8、here 函数和 cylinder 函数分别用与绘制三维球面和柱面。sphere 函数的调用格式为: x,y,z=sphere(n) 该函数将产生(n+1)(n+1)矩阵 x、y、z ,采用这三个矩阵可以绘制出圆心位于远点、半径为 1 的单位球体。若在该调用函数是不带输出参数,将直接绘制所需球面。n 决定了球面的圆滑程度,其默认值为 20。若 n 值取得较小,则将绘制出多面体表面图。3cylinder 函数的调用格式为: x,y,z=cylinder(R,n) 其中,R 是一个向量,存放柱面各个等间隔高度上的半径,n 表示在圆柱圆周上有 n 个间隔点,缺省时表示有 20 个间隔点。例如,cyl
9、inder(3)生成一个圆柱,cylinder(10,1)生成一个圆锥,而 t=0:pi/100:4*pi;R=sin(t);cylinder(R,30)生成一个正弦型柱面。另外,生成矩阵的大小与 R 向量的长度及 n 有关。其余与sphere 函数相同。 2.1球面的绘制。程序如下:x,y,z=sphere(30);surf(x,y,z);axis square;运行结果如图所示图表三2.2圆锥与圆柱的绘制。程序如下:subplot(1,2,1);cylinder(2);4subplot(1,2,2); cylinder(20,1); 运行结果如图所示图表四 多峰函数曲面 MATLAB 还有
10、一个 peaks 函数,称为多峰函数,常用语三为曲面的演示。该函数可以用来生成绘图数据矩阵,矩阵元素由函数:f(x,y)=3(1+x2)ex 2 (y+1)2 10(x5x3y5)ex2y213 e(x+1)2y2 在矩形区域-3,3-3,3 的等分网格点上的函数值确定。例如: z=peaks(30); 将生成一个 30*30 矩阵 z,即分别沿 x 和 y 方向将区间-3,3等分成 29 份,并计算这些网格点上的函数值。默认的等分数是 48,即 p=peaks 将生成一个 4949矩阵 p。也可以根据网格坐标矩阵 x,y 重新计算函数值矩阵。例如: x,y=meshgrid(-5:0.1:5
11、); z=peaks(x,y); 生成的数值距阵可以作为 mesh、surf 等函数的参数而绘制出多峰函数曲面图。另外,若在调用 peaks 函数时不带输出参数,则直接绘制出多峰函数曲面图。其他的三维曲面条形图、饼形图和填充图等特殊图像,还可以以三维形式出现,使用的函数分别是 bar3、pie3 和 fill3.此外,瀑布图和三维曲面的等高线图也是常用图形之一。绘制瀑布图用 waterfall 函数,它的用法及图形效果与 meshz 函数相似,只是它的网格线是在 x 轴方向出现,具有瀑布效果。等高线图用 contour3 绘制。4.1绘制三位图形 5(1)绘制魔方阵的三位条形图。(2)以三维杆
12、图形式绘制曲线 y=2sinx。 (3)已知 x=2347,1827,2043,3025,绘制饼图。 (4)用随机的顶点坐标画出 5 个黄色三角形。 程序如下: subplot(2,2,1); bar3(magic(4) subplot(2,2,2); y=2*sin(0:pi/10:2*pi); stem3(y); subplot(2,2,3); pie3(2347,1827,2043,3025); subplot(2,2,4); fill3(rand(3,5),rand(3,5),rand(3,5),y) 运行结果如图所示图表五4.2绘制多峰函数的瀑布图和等高线图。 程序如下: subpl
13、ot(1,2,1); 6X,Y,Z=peaks(30); waterfall(X,Y,Z) xlabel(X-axis),ylabel(Y-axis),zlabel(Z-axis); subplot(1,2,2); contour3(X,Y,Z,12,k); %其中 12 代表高度的等级数 xlabel(X-axis),ylabel(Y-axis),zlabel(Z-axis); 运行结果如图所示图表六4、设计体会通过学习 MATLAB 和进行论文的写作,明白了 MATLAB 的功能是非常强大的。从中也认识到自己还有很多的不足,还须要进一步加强。以上其本上是针对 MATLAB 的程序设计进行论
14、文,而实际上 MATLAB 的功能并不是局限于此,它还有很多功能,如在线性代数中的计算,数据处理与多项式计算,数值微分与常微分方程求解,符号计算,图形句柄,图形用户界面设计,MATLAB 应用接口等等。 Matlab 功能十分强大,不仅有强大的运算功能,还有强大的绘图功能,也许我对它的了解只有一点点,可能还没有入门。虽然我学习 Matlab 的时间还很短,但却让我了解到了它的强大的功能,我想,就算时间足够,老师也不可能把所有的东西都讲解给我们,因为一个软件的功能需要自己不断的探索,老师也不可能知道它全部的知识,老师只是为我们指明方向,最终的学习还要靠自7己,而且在摸索的路上,我们可能会发现更多学习的乐趣。891011