本篇博客是对educoder上相关题目/知识的总结
目录
前言
一、二维图形的绘制
1.楔子
2. 绘图函数——plot函数
第一种调用方法
第二种调用方法
第三种调用方式
3. 双纵坐标绘图函数——plotyy函数
4. 绘制二维图形其他函数
5. 图形控制基本操作介绍
二、三维图形的绘制
1. 三维曲线
2. 三维曲面
3. 其他函数简介
三、隐函数绘图
总结
知识/题目来自Educoder实训
在已知两条直线的数学解析式的情况下,我们想知道两条直线在平面上的关系,除了进行数学上的求解,我们还有其他的方法直观的解决这个问题吗?
答案是肯定的,我们可以利用 MATLAB 强大的绘图功能在一个平面上画出这两条直线,我们就可以直观的了解两条直线是相交还是平行。
二维图像是指不包含深度信息的平面图像。 二维即左右、上下四个方向,不存在前后。即只有面积,没有体积。我们可以理解为将平面坐标上的数据点连接起来的平面图像,可以采用不同的坐标系,数据点可以为实数或者是复数,可以由向量或者矩阵的形式给出。
MATLAB 中最基础应用最广泛的函数是plot
函数,它有许多的用法,接下对常用的使用方式进行介绍。
以下四种是没有选项的plot
函数的主要使用方法:
当x
是实向量时,则以向量元素的下标为横坐标,元素值为纵坐标进行绘图;当x
是复数向量时,以向量元素的实部和虚部为横纵坐标进行绘图;当x
是实矩阵时,按列绘制每列元素值相对其下标的多条曲线,矩阵列数就是曲线的条数;当x
是复数矩阵时,按列分别以向量元素的实部和虚部为横纵坐标进行多条曲线的绘图。
以x
为实矩阵的情况为例:
m=0:0.1:10;
x=[cos(m)',sin(m)'];
plot(x);
输出图像如下:
当x
,y
为长度相同的向量时,x
,y
为横坐标和纵坐标;当x
为向量,y
为有一维与x
同维的矩阵时,则绘制多条颜色不一样的曲线,曲线条数为矩阵的另一维;当x
,y
为同维矩阵时,则以x
,y
对应列元素为横,纵坐标分别绘制图形,曲线条数为矩阵的列数。
以x
,y
为同维矩阵时举例,如下:
m=0:0.1:10;
x=[2.*m',2.5.*m'];
y=[cos(m)',sin(m)'];
plot(x,y);
输出图像如下:
是包含多个输入参数的,每一个向量对可以绘制出一条曲线。当输入参数都为向量时,数字相同的x
,y
为一组向量对,每组长度可以不同,每一向量对可以绘制出一条曲线;当x
,y
为矩阵时,配对的x
,y
分别按照对应的列元素为横纵坐标绘制曲线,曲线条数等于矩阵的列数。此处的x1
到xn
可以相同。
举例如下:
m=0:0.1:10;
x=[m;m;m]';
y1=sin(m);
y2=1.5*sin(m);
y3=2.5*sin(m);
y=[y1;y2;y3]';
plot(x,y,m,cos(m));
输出结果如下:
x
,y
都是含有三列的矩阵,所以有三条曲线,m
与cos(m)
为向量,组成参数对,所以会绘制出一条曲线,一共有四条曲线。
matlab 提供一些绘图选项,给出曲线的线型,颜色,数据点标记符号,使用方法如下:
选项表如下表所示:
举例如下:
m=0:0.1:10;
x=2.*m;
y=cos(x);
plot(x,y,'r:')
输出结果如下:
当需要绘制出纵坐标不一致的两个图形时,可以直接用plotyy
函数,可以把函数值不同量纲,不同数量级的函数绘制在一个图像中,便于比较分析。
调用格式为:
其中,x1
,y1
对于一条曲线,为左坐标,x2
,y2
对应另一条曲线,为右坐标。
举例如下:
m=0:0.1:10;
x=2.*m;
y=cos(x);
y1=sin(m);
plotyy(x,y,m,y1)
输出图像如下:
bar(x,y,选项)
stairsx,y,选项)
stem(x,y,选项)
fill(x1,y1,选项1,x2,y2,选项2,...)
polar(theta,rho,选项)
,theta
为极角,rho
为半径。semilogx(x1,y1,选项1,x2,y2,选项2,...)
,x
半对数坐标,轴为对数刻度,y
轴为线性刻度。 semilogy(x1,y1,选项1,x2,y2,选项2,...)
,半对数坐标,y
轴为对数刻度,x
轴为线性刻度。 loglog(x1,y1,选项1,x2,y2,选项2,...)
,全对数坐标,两个坐标轴都是对数刻度。title(图形说明)
xlabel(x轴说明)
ylabel(y轴说明)
text(x,y,图形说明)
legend(图例1,图例2,...)
axis([xmin xmax ymin ymax zmin zmax])
,规定坐标轴范围。grid on/off
,有/无网格线。box on/off
,有/无边框线。在应用中广泛的除了平面上的曲线,还有的就是空间中的曲面。那么怎么绘制三维曲面呢?当函数的表达式不能表示为标准形式,怎么样绘制函数曲线呢?
最基本的三维图形函数是plot3
,可以理解为二维绘图函数plot
函数在三维的推广,可以类比学习。
调用格式如下:
每对x
,y
,z
为一组,绘制一个曲线,当x
,y
,z
为同维向量时,则绘制一条三维曲线;当为同维矩阵时,x
,y
,z
对应的列元素绘制曲线,曲线条数等于矩阵列数。
举例如下:
m=0:0.1:100;
x=5.*cos(m);
y=4.*sin(m);
z=-2.*sin(m);
plot3(x,y,z)
输出结果如下:
要绘制三维曲面,首先要生成平面网格坐标矩阵,在xy
平面选定一区域,假设长为[a,b]
,宽为[c,d]
的一个区域,[a,b]
在x
方向分成m
份,[c,d]
在y
方向分成n
份,由划分线做直线,则平面被分为若干个矩形,生成每个矩形顶点坐标的平面网格坐标矩阵,然后利用函数绘图。
可以根据原理利用数学的方法来生成矩阵,也可以利用meshgrid
函数生成。
输出X
的每一行的数值都是复制的x
的值;输出Y
的每一列的数值都是复制的y
的值。
举例如下:
x=1:0.1:10;
y=1:0.1:10;
[X,Y]=meshgrid(x,y);
在生成网格坐标矩阵之后,来进行三维曲面的绘图,matlab
中提供了mesh
函数与surf
函数来绘图,mesh
函数用于绘制三维网格图,在不需要很精细的曲面图时,可以用网格图来表示三维曲面,surf
函数用来绘制三维曲面图,线条之间用的补面用颜色填充。
调用格式如下:
mesh(x,y,z,c)
surf(x,y,z,c)
x
,y
,z
是维数相同的矩阵,x
,y
是网格坐标矩阵,z
是高度矩阵,c
指点不同高度下的颜色范围。当c
缺省时,颜色正比于高度;当x
,y
缺省时,z
矩阵的列下标当作x
轴坐标,行下标当作y
轴坐标,绘制图形。若x
,y
为向量,则x
和y
的长度等于高度矩阵的列数与行数。
举例如下:
x=0:0.1:2*pi;
[X,Y]=meshgrid(x);
z=1.5*sin(X).*cos(Y);
surf(X,Y,z);
输出如下:
与二维函数类似,三维图形也有一些函数来绘制特殊图形:
三维条形图: bar3(y)
,y
的每一个元素对应一个条形 bar3(x,y)
,在x
指定的位置绘制y
中元素的条形
三维杆图 stem3(z)
,从x,y
平面向上延伸的杆图,x,y
自动生成 stem3(x,y,z)
,在x,y
位置绘制,x,y,z
维数相同
三维饼图 pie3(x)
,x
为向量,绘制三维饼图
多边形 fill3(x,y,z,c)
,x,y,z
为多边形顶点,c
为颜色
matlab
还提供一些其他的绘图函数,有兴趣的读者可以自行查找学习。
在绘图时,有时候没有显式的表达式或者表达式复杂难以化成标准形式时,我们可以使用隐函数绘图的函数ezplot
函数。
常用用法如下:
对于隐函数f=f(x)
,ezplot
函数调用格式如下:
ezplot(f)
:在[-2π,2π]
中绘制f=f(x)
图形;ezplot(f,[a,b])
:在[a,b]
中绘制f=f(x)
图形;对于隐函数f=f(x,y)
,ezplot
函数调用格式如下:
ezplot(f)
:在x
属于[-2π,2π]
和y
属于[-2π,2π]
中绘制f(x,y)=0
图形;ezplot(f,[xmin,xmax,ymin,ymax])
:在x
属于[xmin,xmax]
和y
属于[ymin,ymax]
中绘制f(x,y)=0
图形;ezplot(f,[a,b])
:在x
属于[a,b]
和y
属于[a,b]
中绘制f(x,y)=0
图形;对于参数方程x=x(t)
和y=y(t)
,函数调用格式如下:
ezplot(x,y)
:在[0,2π]
绘制x=x(t)
和y=y(t);
ezplot(x,y,[tmin,tmax])
:在[tmin,tmax]
绘制x=x(t)
和y=y(t);
ezplot('x^2+y^2-16');
输出图像如下:
多做题,多练习。熟能生巧,这是工科的规律。