二维图形的绘制二维图形是将平面坐标上的数据点连接起来的平面图形。
可以采用不同的坐标系,出直角坐标系外,还可以采用对数坐标系、极坐标。
数据点可以用向量或矩阵形式给出,类型可以是实型或复型。
二维图形输出,利用MATLAB的二维绘图函数可以很容易作出需要的各种图形。
plot函用于绘制直角坐标的二维曲线。
使用方plot(x,y,linespeci),plot(x,y)先描出点(x(i),y(i)),然后用直线依次相连,其中参数linespeci指明了线条的类型,标记符号和画线用的颜色。
lot是绘制二维曲线的基本命令,但在使用此函数之前,我们需先定义曲线上每一点的x 及y坐标若要在同一个画面上画出多条曲线,只需将坐标对依次放入plot函数即可。
以下各例题中的程序都是在MATLAB编辑器中函数图象的绘制:先是简单的一次函数图像的绘制;简单的一次函数在数学图像绘制中是比较简单的,在MATLAB语言中用plot函数就能实现。
问题1,简单的一次函数y=3x的函数图像。
程序如下:x=0:1:10; %生成一个从0到10的步长为1的行向量y=3*x; %变量y的表达式plot(x,y) %生成二维图形运行结果如图1所示。
图1 y=3x的图形有时在数学中我们要把三角函数图像同时绘制出来,对它们的周期,极值等函数性质进行比较,在数学中我们自己很难解决,但是matlab中的图形窗口分割函数—subplot就能够实现。
其调用格式为:subplot(m,n,p)。
下面我们就用matlab中的subplot函数进行窗口风隔,绘制同一变量的各种三角函数图象。
问题2,在一个图形窗口中以子图形式同时绘制正弦,余弦,正切,余切曲线。
程序如下:x=linspace(0,2*pi,600; %x的取值范围及步长y=sin(x); %正弦函数的值给yz=cos(x); %余弦函数的值赋给zt=sin(x)./(cos(x)+eps); %正切函数赋变量tct=cos(x)./(sin(x)+eps); %与其函数赋变量ctsubplot(2,2,1); %选择2x2个区中的1号区stairs(x,y); %生成x 与x 的阶梯图title('sin(x)-1'); %给正弦函数添加标题axis([0,2*pi,-1,1]); %设置坐标subplot(2,1,2); %选择2x1个区中的1号区stem(x,y); %生成x 与y 的杆形图title('sin(x)-2)'); %给正弦函数添加标题axis([0,2*pi,-1,1]); %设置坐标subplot(4,4,3); %选择4x4个区中的3号区plot(x,y); %产生x 与z 的二维曲线title('cos(x)'); %给余弦函数图象添加图标axis([0,2*pi,-1,1]); %设置坐标subplot(4,4,4); %选择4x4中的4号区plot(x,z); %产生x 与z 的二维曲线title('cos(x)'); %给余弦函数图象添加图标axis([0,2*pi,-1,1]); %设置坐标subplot(4,4,7); %选择4x4中的7号区plot(x,t); %产生x 与t 的二维曲线title('tangent(x)'); %给正切函数图象添加图标axis([0,2*pi,-40,40]); %设置坐标subplot(4,4,8); %选择4x4中的8号区plot(x,ct); %产生x 与ct 的二维曲线title('cotangent(x)'); %给余切函数图象添加图标axis([0,2*pi,-40,40]); %设置坐标运行图像如图2所示。
图2 正弦 余弦 正切 余切函数二维图像简单的指数函数,三角函数,幂函数等虽然麻烦,但是都用手工能够绘制出来。
但是超越函数图形手工几乎是绘不出来的,matlab 强大的功能只要简单的几句程序就能解决这一问题。
问题3:绘制曲线有x y x π2sin 5.0-= 的函数图形。
程序如下:x=0:pi/100:2*pi; %生成一个始数行向量y=2*exp(-0.5*x).*sin(2*pi*x); %函数y 的表达式plot(x,y) %生成二维图形运行结果如图3所示。
图3 曲线y=.以上是用matlable 在一个窗口中绘制一个图像,这个不是很难, 但是在同一窗口中同时绘制出以上三种图像是相当难的,更重要的是在同一窗口中同时绘制几个图像时,必须要给图像加以说明,要让图像很明了的显示出来,让人一眼就能分辨出那个函数对应的是哪一个图像。
Matlab 强大的功能就能很容易的实现,matlab 中用plot 函数绘制二维图像时用plot (x,y,’k.’)这种形式就可以给不同函数图形设置不同的线型,不同的颜色。
还可以用legend 函数给图像加图例,用xlabel 和ylabel 函数来给图像的坐标轴见坐标说明。
在同一窗同时绘制一次函数图象,二次函数图象和超越函数的图象,图像并做一比较。
问题4,在[-3,3]范围作出函数2x y =,x x y x 8sin 10-= ,x y 3=的图形。
程序如下:x=0:0.001:2*pi; %生成一个从0到2步长为0.001的行向量y=10.*exp(-x).*sin(8*x); %函数y 的表达式plot(x,y,'k-') %生成x 与y 的二维图形,线性为实线,颜色为黑色 hold on ; %保持图形x=-3:0.1:1; %生成一个从-3到1步长为0.1的行向量y=x.^2; %函数y 的表达式plot(x,y,'k.') %生成x 与y 的二维图形,线性为虚线,颜色为黑色 hold on ; %保持图形x=1:0.1:3; %生成一个从-3到1步长为0.1的行向量y=3*x; %函数y 的表达式plot(x,y,'k.') %生成x 与y 的二维图形,线性为虚线,颜色为黑色 hold on ; %保持图形legend('y=10e^[-x]sin8x','y=x^2','y=3x') %加图例xlabel('\itx'); %x轴坐标说明ylabel('\ity'); %y轴坐标说明title('Is Limit Existing When x=1?') %图像添加标题运行结果如图4所示。
图4 同一窗口中的多个函数图形在数学课程中我们可以用matlab明确解决分段函数问题如:假如我们要解决当x=28时要求这个分段函数相对应的解。
问题5求分段函数解决这个问题的程序如下:x=28; %输入x的值为28for x=-10:5 %x是从-10到5变化,步长为1if x<-1 %判断条件x的值y=0; %符合第一个条件时为0elseif x>=-1&x<0 %不满足的话判断其他条件y=-3*x.^2+x; %得到相应值elseif x>=0&x<pi %另外的条件y=sin(x)+x; %对应的值else 另外的条件y=pi; %y的值end %结束条件语句end %结束for循环y %输出y的值结果是:y = 3.1416除此之外,我们还可以解决分段的一阶常微分函数。
例如,已知一阶常微分方程,其中gu的初值为u(0)=0,求t>=0时的解。
画出图像,并求u的极大值程序如下:f un=inline(['((13-u)/18-(sin(10*t/pi)>0)*','1.18*sin(10*t/pi)-u/6.7)/0.047'],'t','u'); %调用函数[t,u]=ode45(fun,[0,10],[0]); %t和u构成向量plot(t,u) %绘制t和u关系曲线运行结果如图5所示。
图5 一阶分段微分函数的图形画出这个图时,我们可以轻而易举的解出题目所提出的要求。
当t>=0时u的极大值,我们可以在图上读出,而不去经行复杂的计算。
通过这样的程序,我们可以很快的解出相应的函数值,而我们不再去麻烦的判断。
另外我们可以求解分段函数的积分,微分等计算。
下面我们来用它解决分段函数的图形问题。
上面我们讨论了用MATLAB语言绘制分段函数的问题,上面仅仅是冰山一角罢了。
下面我们用它来绘制一个更有意思的分段函数,这样,我们可以用MATLAB语言来做一些有意思的图形,用来增加我们学习的乐趣。
问题6,形状如囧字的图像绘制,其程序如下:x=0:0.001:2*pi; %x的取值范围及步长c=0.1; %常数c的值y=5./cos(x); %y的值y(abs(x-pi/2)<c | abs(x-3*pi/2)<c)=NaN; %函数的条件极其取值plot(x,y); %绘制函数图像运行结果如图6所示:图6 形状似囧字的分段函数这个函数图形意思吧,这不但是一个函数图形,而且还是我们的一个汉字的样子—囧字。
这也正是这门学科吸引人之处,这样我们不仅学到了知识而且还增加了不少的兴趣。
以上是对二维图像的绘制,下面我们来讨论用matlab 绘制三角函数和指数函数。
隐函数图像的绘制:如果给定了函数 显式的表达式,可以先设置自变量向量,然后根据表达式计算出函数向量,从而用plot 函数绘制出图形。
但如果函数用隐函数形式给出,则很难用上述方法绘制出图形。
Matlab 提供了ezplot 函数绘制隐函数图形,下面是隐函数图像的绘制。
例如绘制隐函数051533=+-+xy y x 的图形,参数方程⎩⎨⎧==t t x t t x sin 3sin cos 3sin 的图形。
程序如下:subplot(1,3,1); %选择1x3中的1号区ezplot('cos(tan(pi*x))',[0,1]);axis equal %在区间0<x<1和0<y<1绘制 subplot(1,3,2); % 分区,选择1x3中的2号区ezplot('x^3+y^3-5*x*y+1/5',[-3,3]) %在区间-3<x<3和-3<y<3的区间绘制图像subplot(1,3,3); %分区,选择1x3中的3号区ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])%在区间0<x <2和0<y<2的区间绘制图像运行图形如图7所示。