matlab 经典作图要点.docx

上传人:b****6 文档编号:7749901 上传时间:2023-01-26 格式:DOCX 页数:34 大小:736.79KB
下载 相关 举报
matlab 经典作图要点.docx_第1页
第1页 / 共34页
matlab 经典作图要点.docx_第2页
第2页 / 共34页
matlab 经典作图要点.docx_第3页
第3页 / 共34页
matlab 经典作图要点.docx_第4页
第4页 / 共34页
matlab 经典作图要点.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

matlab 经典作图要点.docx

《matlab 经典作图要点.docx》由会员分享,可在线阅读,更多相关《matlab 经典作图要点.docx(34页珍藏版)》请在冰豆网上搜索。

matlab 经典作图要点.docx

matlab经典作图要点

二维图形的绘制

二维图形是将平面坐标上的数据点连接起来的平面图形。

可以采用不同的坐标系,出直角坐标系外,还可以采用对数坐标系、极坐标。

数据点可以用向量或矩阵形式给出,类型可以是实型或复型。

二维图形输出,利用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所示。

图1y=3x的图形

有时在数学中我们要把三角函数图像同时绘制出来,对它们的周期,极值等函数性质进行比较,在数学中我们自己很难解决,但是matlab中的图形窗口分割函数—subplot就能够实现。

其调用格式为:

subplot(m,n,p)。

下面我们就用matlab中的subplot函数进行窗口风隔,绘制同一变量的各种三角函数图象。

问题2,在一个图形窗口中以子图形式同时绘制正弦,余弦,正切,余切曲线。

程序如下:

x=linspace(0,2*pi,600;%x的取值范围及步长

y=sin(x);%正弦函数的值给y

z=cos(x);%余弦函数的值赋给z

t=sin(x)./(cos(x)+eps);%正切函数赋变量t

ct=cos(x)./(sin(x)+eps);%与其函数赋变量ct

subplot(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=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]范围作出函数

的图形。

程序如下:

x=0:

0.001:

2*pi;%生成一个从0到2

步长为0.001的行向量

y=10.*exp(-x).*sin(8*x);%函数y的表达式

plot(x,y,'k-')%生成x与y的二维图形,线性为实线,颜色为黑色

holdon;%保持图形

x=-3:

0.1:

1;%生成一个从-3到1步长为0.1的行向量

y=x.^2;%函数y的表达式

plot(x,y,'k.')%生成x与y的二维图形,线性为虚线,颜色为黑色

holdon;%保持图形

x=1:

0.1:

3;%生成一个从-3到1步长为0.1的行向量

y=3*x;%函数y的表达式

plot(x,y,'k.')%生成x与y的二维图形,线性为虚线,颜色为黑色

holdon;%保持图形

legend('y=10e^[-x]sin8x','y=x^2','y=3x')%加图例

xlabel('\itx');%x轴坐标说明

ylabel('\ity');%y轴坐标说明

title('IsLimitExistingWhenx=1?

')%图像添加标题

运行结果如图4所示。

图4同一窗口中的多个函数图形

在数学课程中我们可以用matlab明确解决分段函数问题如:

假如我们要解决当x=28时要求这个分段函数相对应的解。

问题5求分段函数

解决这个问题的程序如下:

x=28;%输入x的值为28

forx=-10:

5%x是从-10到5变化,步长为1

ifx<-1%判断条件x的值

y=0;%符合第一个条件时为0

elseifx>=-1&x<0%不满足的话判断其他条件

y=-3*x.^2+x;%得到相应值

elseifx>=0&x

y=sin(x)+x;%对应的值

else另外的条件

y=pi;%y的值

end%结束条件语句

end%结束for循环

y%输出y的值

结果是:

y=3.1416

除此之外,我们还可以解决分段的一阶常微分函数。

例如,已知一阶常微分方程,

其中

u的初值为u(0)=0,求t>=0时的解。

画出图像,并求u的极大值

程序如下:

fun=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)

plot(x,y);%绘制函数图像

运行结果如图6所示:

图6形状似囧字的分段函数

这个函数图形意思吧,这不但是一个函数图形,而且还是我们的一个汉字的样子—囧字。

这也正是这门学科吸引人之处,这样我们不仅学到了知识而且还增加了不少的兴趣。

以上是对二维图像的绘制,下面我们来讨论用matlab绘制三角函数和指数函数。

隐函数图像的绘制:

如果给定了函数显式的表达式,可以先设置自变量向量,然后根据表达式计算出函数向量,从而用plot函数绘制出图形。

但如果函数用隐函数形式给出,则很难用上述方法绘制出图形。

Matlab提供了ezplot函数绘制隐函数图形,下面是隐函数图像的绘制。

例如绘制隐函数

的图形,参数方程

的图形。

程序如下:

subplot(1,3,1);%选择1x3中的1号区

ezplot('cos(tan(pi*x))',[0,1]);axisequal%在区间0

subplot(1,3,2);%分区,选择1x3中的2号区

ezplot('x^3+y^3-5*x*y+1/5',[-3,3])%在区间-3

subplot(1,3,3);%分区,选择1x3中的3号区

ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])

%在区间0

和0

的区间绘制图像

运行图形如图7所示。

图7隐函数图形

有时数学中的有些函数用极坐标来处理更简单,matlab提供的polar函数专门用来绘制极坐标图形,其调用格式为polar(thera,rho,选项)。

其中thera为极坐标极角,rho为极坐标矢径,选项的内容与plot相似。

例8:

分别作出r=cos(4θ)、r=1+2sin(θ)的极坐标图形。

程序如下:

subplot(1,2,1);%分区,选择1x2中的1号区

theta=linspace(0,2*pi);%产生0到2

的一个行向量

r=cos(4*theta);%r的表达式

polar(theta,r)%绘制theta和r的极坐标图形

subplot(1,2,2);%分区,选择1x2中的2号区

t=0:

0.01:

2*pi;%产生0到2π,步长为0.01的一个行向量

r=1+2*sin(t);%r的表达式

polar(t,r)%绘制t与r的表达式

图形如图8所示。

图8极坐标图形

三、三维曲面图像的绘制

三维图图形的绘制,包括三维螺旋线,三维空间曲面,三维隐函数图形,三维分段函数图形等,下面我们将用matlab中的不同函数来绘制三维空间中漂亮的三维函数图形。

最基本的三维图形函数为plot3,他将二维绘图函数绘图函数plot的有关功能能扩展到三维空间,可以绘制三维曲线。

plot3函数用于画一个单变量的三维曲线。

plot3一般语法调用格plot3(x1,y1,z1,s1,x2,y2,z2,s2…),x1,y1、z1是向量或矩阵,函数plot3以其中三个向量内的相应元素作为数据点的x坐标、y坐标、z坐标,绘制这些数据点在三维空间内的连线,然后在屏幕上显示出这条三维曲线在二维平面上的投影。

Si是可选的字符串,用来指定颜色、标记符号或线形。

问题9,分别作出三维螺旋线

同时画出两条空间曲线

程序如下:

t=linspace(0,10*pi,600);%产生0到600的行向量,步长为10π

subplot(1,2,1);%分区,选怎1x2中的1号区

plot3(t.*sin(t),t.*cos(t),t)%绘制三维图形

t=0:

0.01:

10*pi;%生成0到10π,步长为0.01的行向量

subplot(1,2,2);%分区,选择1x2中的2号区

plot3(t.*sin(t),t.*cos(t),t,t.*sin(t),t.*cos(t),-t)

%绘制三维图形

运行结果如图9所示。

图9空间螺旋线

在MATLAB中实现网格图和曲面图的方法是:

将位于X—Y平面上的矩形网格节点作为数据点的坐标,相应的每个点上的Z轴坐标值作为数据的值,就可以绘制网格图和曲面图。

在网格图中,MATLAB把每个数据点都和与其相邻的点用直线连接起来,形成一个网状的曲面,称为网格图。

如果MATLAB把每个数据点和与其相邻的数据点用平面相连接,那么得到的是MATLAB的曲面图。

在MATLAB的网格图中,线条之间的曲面是没有颜色的,而每个线条是有颜色的,线条的颜色和网格的高度有关,也即与Z轴上的函数有关。

而对于曲面图而言,线条是黑色的,线条之间的曲面是有颜色的。

为了方便测试立体绘图,MATLAB提供了一个peaks函数,称为多峰函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点。

该函数可以用来生成绘图数据矩阵。

问题10,绘制函数

的图形

程序如下:

x=-3:

0.1:

3;%产生从-3到3,步长为0.1的一个行向量

y=-3:

0.1:

3;%产生从-3到3,步长为0.1的一个行向量

[x,y]=meshgrid(x);%生成网格坐标

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)%z向量的表达式

[x,y,z]=peaks(30);%生成多峰函数图象

surf(x,y,z);%绘制三维函数图形

运行结果如图10所示。

图10多峰函数图形

Matlab提供了mesh函数和surf函数来绘制三维曲面图。

Mesh函数用于绘制三维网格图。

再不要绘制特别精细的三维曲面图时,可以通过三维三维网格图来表示三维曲面。

Surf用于绘制三维曲面图,个线条之间的补面用颜色填充。

Mesh和surf的调用格式是,mesh(x,y,,z,c),surf(x,y,z,c).一般情况下x,y,z十位数相同的矩阵。

x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色范围。

C省略时,matlab认为c=z,亦即颜色的设定是正比于图形的高度的,这样就可以得到层次分明的三维图形。

问题11,用三维曲面图表现函数z=sinycosx,。

程序如下:

x=0:

0.1:

2*pi;%定义一个从0到2π,步长为0.01的行向量

[x,y]=meshgrid(x);%在区域[0,2π]x[0,2π]生成网格坐标

z=sin(y).*cos(x;%函数z的表达式

surf(x,y,z);%绘制三维曲面

x=xlabel('x-axis'),ylabel('y-axis'),zlabel('y-axis')

%添加坐标说明

title('surf');%添加图像标题

运行图像如图11所示。

图11函数z=sinycosx.

问题12,画出由函数z=xe-(x+y)形成的立体网状图形。

程序如下:

x=linspace(-2,2,25);%生成-2到25,步长为2的一个行向量

y=linspace(-2,2,25);%生成-2到25,步长为2的一个行向量

[xx,yy]=meshgrid(x,y);%在区域[-2,25]x[-2,25]生成网格坐标

zz=xx.*exp(-xx.^2-yy.^2);%变量z的表达式

subplot(1,2,1);%分区,选择1x2中的1号区

mesh(xx,yy,zz);%绘制三维曲面

subplot(1,2,2);%分区,选择1x2中的2号区

mesh(xx,yy,zz);%绘制三维曲面

subplot(1,2,2);%分区,选择1x2中的2号区

surf(xx,yy,zz);%绘制三维曲面

运行图形如图12所示。

图12立体网状曲面

meshz可将曲面加上围裙;waterfall可在x方向或y方向产生水流效果;meshc同时画出网状图与等高线;surfc同时画出曲面图与等高线。

问题13,分别作出多峰曲面。

程序如下:

[x,y,z]=peaks;%生成多峰曲面

subplot(2,2,1);%分区,选择2X2中的1号区

meshz(x,y,z);%绘制xy平面的底座

subplot(2,2,2);%分区,选择2x2中的2号区

waterfall(x,y,z);%产生水流效果

subplot(2,2,3);%分区,选择2x2中的3号区

meshc(x,y,z);%在xy平面绘制z轴方向的等高线

subplot(2,2,4);%分区,选择2x2中的4号区

meshz(x,y,z);%绘制xy平面的底座

运行图像如图13所示。

图13多峰曲面处理图形

隐函数图形除了二维的以外还有三维图形的绘制,下面我们用matlab中的ezsurf函数来绘制三维的分段函数图形:

问题14:

的函数图像。

程序如下:

ezsurf('exp(-s)*cos(t)','exp(-s)*sin(t)','t',[0,8,0,5*pi])%绘制因函数图形

绘制图形如图14所示。

图14三维隐函数图形

MATLAB中的语句控制结构与其中的图形绘制函数共同使用来绘制三维的分段函数图形。

三维的分段函数图像绘制。

程序如下;

clear;clc%清空储存空间a=2.463;t=2.84;i=1;%a,t,i的取值

forx=-4*pi/(3*a):

0.1:

4*pi/(3*a)%循环

ifx>=-4*pi/(3*a)&x<-2*pi/(3*a)%if判断语句y(i)=sqrt(3.0)*(x+4*pi/(3*a));%满足条件时执行

elseifx>=-2*pi/(3*a)&x<2*pi/(3*a%另外的条件1

y(i)=2*sqrt(3.0)*pi/(3*a);%条件相对应的结果

elseifx>=2*pi/(3*a)&x<=4*pi/(3*a)%条件3

y(i)=sqrt(3.0)*(-x+4*pi/(3*a));%相应

end%结束判断语句

i=i+1;%i的值加1

end%结束for循环

[x,y]=meshgrid(-4*pi/(3*a):

0.1:

4*pi/(3*a),y);%绘制二维图形

z1=sqrt(1.00+4.0*cos(0.5*a.*x).*cos(sqrt(3.0)*a.*y/2.0)+4.0*cos(0.5*a.*x).^2);%z轴的值

surf(x,y,z1)%绘制空间曲线

holdon%保持网格线

surf(x,y,-z1)%绘制另一个图像

运行的结果如图15所示。

图15用MATLAB绘制的三维分段函数

f(x)的定义如下:

1、写一个函数文件f(x)实现该函数,要求参数x可以是向量;

2、作出该函数的图形;

3、求出f(x)的零点与最值。

解:

(1)、编写M函数文件

functiony=f(x)

n=length(x);

ifx<0&x~=-4

y=x.^2+x-6;

elseifx>=0&x<10&x~=2&x~=3

y=x.^2+5*x+6;

else

y=x.^2-x-1;

end

(2)、把文件f.m放置在搜索路径上

(3)、运行指令

令x=5,则在命令窗口输入指令

y=f(5)

得到答案:

y=

56

(2)图形

x1=(-5):

0.01:

0;

y1=x1.^2+x1-6;

plot(x1,y1,'m-');

holdon

x2=0:

0.01:

10;

y2=x2.^2-5*x2+6;

plot(x2,y2,'r:

');

holdon

x3=10:

0.01:

15;

y3=x3.^2-x3-1;

plot(x3,y3);

x4=-4;

y4=x4.^2-x4-1;

plot(x4,y4,'p');

holdon

x5=2;

y5=x5.^2-x5-1;

plot(x5,y5,'b*');

holdon

x6=3;

y6=x6.^2-x6-1;

plot(x6,y6,'g*');

title('函数f(x)的图形');

text(-4,-20,'曲线f1(x)=x^2+x-6');

text(2,40,'曲线f2(x)=x^2-5x+6');

text(10,146,'曲线f3(x)=x^2-x-1');

legend('f1(x)','f2(x)','f3(x)','x=-4','x=2','x=3');

结果如图:

(2)f(x)的零点

①当x<0&x~=-4时;

f1(x)=x.^2+x-6;

由函数的系数矩阵可得函数的根,即:

>>p1=[1,1,-6];

>>x1=roots(p1);

x1=

-3

2

由题意可知,x的取值范围在(-∞,0),所以x1=2舍去,即f(x)的零点之一为x1=-3.

②当x>=0&x<10&x~=2&x~=3时;

f2(x)=x.^2+5*x+6

由函数的系数矩阵可得函数的根,即:

>>p2=[1,-5,6];

>>x2=roots(p2)

x2=

3.0000

2.0000

因为x~=2&x~=3所以f2(x)没有零点。

③当x>=10&x=-4&x=2&x=3时;

f3(x)=x.^2-x-1;

由函数的系数矩阵可得函数的根,即:

>>p3=[1,-1,-1];

>>x3=roots(p3)

x3=

  1.6180

  -0.6180

由题意可知,f3(x)在定义域内没有零点。

④综上所述,f(x)在其定义域内只有一个零点,即x=-3.

(4)、f(x)的最小值

如图所示,f(x)在定义域内只存在一个最小值,且处于最左段函数图形‘曲线f1(x)=x^2+x-6’上,即当x<0时,f(x)拥有最小值,因此,用fminbnd函数可求出f1(x)函数的最小值,指令如下:

>>x

(1)=fminbnd('x

(1).^2+x

(1)-6',-5,0)

>>y1=x

(1).^2+x

(1)-6

x=

-0.5000

 

y1=

-6.2500

所以,函数f(x)的最小值为f(-0.5)=-6.5.

1、分析一元二次函数分段函数的特性

利用MATLAB解决一些数学中常见的分段函数性质问题,这样将MATLAB和数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1