matlab 经典作图要点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二维图形的绘制
二维图形是将平面坐标上的数据点连接起来的平面图形。
可以采用不同的坐标系,出直角坐标系外,还可以采用对数坐标系、极坐标。
数据点可以用向量或矩阵形式给出,类型可以是实型或复型。
二维图形输出,利用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); %正弦函数的值给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 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的值为28
for x=-10:5 %x是从-10到5变化,步长为1
if x<-1 %判断条件x的值
y=0; %符合第一个条件时为0
elseif 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
除此之外,我们还可以解决分段的一阶常微分函数。
例如,已知一阶常微分方程,
其中g
u的初值为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 函数绘制隐函数图形,下面是隐函数
图像的绘制。
例如绘制隐函数05153
3=+-+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所示。
图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 z t t y t t x cos sin 同时画出两条空间曲线⎪⎩
⎪⎨⎧===t z t t y t t x cos sin 和
t
z t t y t
t x -===cos sin 程序如下:
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, 绘制函数
2)1(53)1(2222223
1)5(10)1(3y y x x x z x y x y x ------=+---+-- 的图形 程序如下:
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:⎪⎩
⎪⎨⎧===--t z t y t x s s sin sin π50,80≤≤≤t 的函数图像。
程序如下:
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 的取值
for x=-4*pi/(3*a):0.1:4*pi/(3*a) %循环
if x>=-4*pi/(3*a)&x<-2*pi/(3*a) %if 判断语句
y(i)=sqrt(3.0)*(x+4*pi/(3*a)); %满足条件时执行
elseif x>=-2*pi/(3*a)&x<2*pi/(3*a %另外的条件1
y(i)=2*sqrt(3.0)*pi/(3*a); %条件相对应的结果
elseif x>=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) %绘制空间曲线
hold on %保持网格线
surf(x,y,-z1) %绘制另一个图像
运行的结果如图15所示。
图15 用MATLAB 绘制的三维分段函数
f(x)的定义如下:
2226,04()56,010,23
1,x x x x f x x x x x x x x ⎧+-<≠-⎪=-+≤<≠≠⎨⎪--⎩且且其它
1、写一个函数文件f(x)实现该函数,要求参数x 可以是向量;
2、作出该函数的图形;
3、求出f(x)的零点与最值。
解:
(1)、编写M 函数文件
function y=f(x)
n=length(x);
if x<0 & x~=-4
y=x.^2+x-6;
elseif x>=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-');
hold on
x2=0:0.01:10;
y2=x2.^2-5*x2+6;
plot(x2,y2,'r:');
hold on
x3=10:0.01:15;
y3=x3.^2-x3-1;
plot(x3,y3);
x4=-4;
y4=x4.^2-x4-1;
plot(x4,y4,'p');
hold on
x5=2;
y5=x5.^2-x5-1;
plot(x5,y5,'b*');
hold on
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 和数学结合起来可以提高学习效率,加深对函数的理解。
下面我们就讨论利用MATLAB 程序求解分段函数性质问题。
问题一、定义分段函数下面
分段函数 ⎩⎨⎧<+--≥-=0
)ln(0)sin(32)(2x x x x x x x f MATLAB 程序如下:
function y=f(x) %定义函数
y=zeros(size(x)); %产生与矩阵X同样大小的零
矩阵
[m n]=size(x); %定义矩阵
for a=1:m %矩阵宽度
for b=1:n %矩阵长度
if x(a,b)<0 %选择结构
y(a,b)=log(-x(a,b))+x(a,b);
else
y(a,b)=2*x(a,b)^2-3*sin(x(a,b)); %选择结构
end%结束if语句
end%结束for语句
end%结束for语句问题二:简单的绘图
MATLAB程序如下:
x1=0:0.01:1;%设置x1的变换范围
x2=1:0.01:2;%设置x1的变换范围
y1=x1;%定义y1
y2=2-x2;%定义y2
x=[x1,x2];%定义x矩阵
y=[y1,y2];%定义y矩阵
plot(x,y)%绘制关于x、y的曲线
运行结果如图1所示
图1
问题三、一元二次分段函数的MATLAB 实现 )(x f 定义如下
⎪⎩
⎪⎨⎧--≠≠≤≤+-≠<-+=其他且且,13
2,100,6540,6)(222x x x x x x x x x x x x f
1、写出一个函数文件实现该函数
2、做出函数图形
3、求)(x f 的零点与最值
解:
1、函数文件实现该函数
编写M 函数文件
function y=f(x) %定义分段函数
n=length(x) %设置X 的取值范围 if x<0&x~4 %选择结构
y=x.^2+x-6;
else if x>=&x<10&x~=2&x~3 %选择结构
y=x.^2+5*x+6;
else
y=x.^2-x-1;
end %结束if 语句
把文件f.m 放置在搜索路径上
运行命令:
令x=5,则在命令窗口输入指令
y=f(5)
得到答案:
y=
56
2、图形
MATLAB 程序如下:
x1=(-5):0.01:0; %设置X1的取值变化 y1=x1.^2+x1-6; %定义函数f1(x )
plot(x1,y1,'m-'); %y1的平面线图
hold on %设置图形保持状态 x2=0:0.01:10; %设置X2的取值变化 y2=x2.^2-5*x2+6; %定义函数f2(x )
plot(x2,y2,'r:'); %y2的平面线图
hold on %设置图形保持状态 x3=10:0.01:15; %设置X3的取值变化 y3=x3.^2-x3-1; %定义函数f3(x )
plot(x3,y3); %y3的平面线图
x4=-4; %设置X4的值
y4=x4.^2-x4-1; %定义函数f4(x )
plot(x4,y4,'p'); %y4的平面线图
hold on %设置图形保持状态
x5=2; %设置X5的值
y5=x5.^2-x5-1; %定义函数y5
plot(x5,y5,'b*') %y5的平面线图
hold on %设置图形保持状态
x6=3; %设置X6的值
y6=x6.^2-x6-1; %定义函数y6
plot(x6,y6,'g*'); %y6的平面线图
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=2','x=3');%加图例 运行结果如图2所示
图2 3、)(x f 的零点和最值
)(x f 的零点
当4~&0-=<x x 时;
62.^)(1-+=x x x f ;
由函数的系数矩阵可得函数的根,即: pl=[1,1,-6];
x1=roots(pl);
x 1=
-3
2
由题意可知,x 的取值范围在)0,(-∞,所以21=x 舍去,即)(x f 的零点之一为
31-=x .
当3~&2~&10&0==<>=x x x x 时;
6*52.^)(2++=x x x f
由函数的系数矩阵可得函数的根,即 p2=[1,-5,6];
x2=roots(p2);
x2=
3.0000
2.0000
因为没有零点所以)(23~&2~x f x x ==
当3&2&4&10==-=>=x x x x 时
;12.^)(3--=x x x f
由函数的系数矩阵可得函数的根,即: p3=[1,-1,-1];
x2=roots(p3);
X2=
1.6180
-0.6180
有题意可知,)(x f 在定义域内没有零点。
综上所述,)(x f 在定义域内只有一个零点,即3-=x . )(x f 的最小值
如图1所示,)(x f 在定义域内之存在一个最小值,且处于最左段函数图形'62^)(1'-+=x x x f 曲线上,即当0<x 时,)(x f 拥有最小值,因此,用fminbded 函数可求出)(1x f 函数的最小值,指令如下:
x(l)=fminbnd('x(l).^2+x(l)-6',-5,0) y1=x(l).^2+x(l)-6
x=
-0.5000
y1=
-6.2500
所以函数)(x f 最小值为5.6)5.0(-=-f .
通过以上程序对一元二次分段函数的讨论,学会了能用MATLAB 实现对函数的性质问题求解。
下面进一步讨论利用在MATLAB 函数文件绘制分段函数图形问题。
四、在函数文件下绘制分段函数图形
将MATLAB 强大的绘图功能应用到数学图形的绘制上,当遇到一些复杂的函数图形时 ,就可以很好地解决图形绘制难的问题。
这样我们在数学函数和图形的时候就可以有一个直观的参考,而MATLAB 绘图功能的操作简单、功能强大就简化了一些复杂的操作。
下面我们就讨论有关利用MATLAB 程序绘图的问题。
1一元分段函数的图形绘制
问题四、用MATLAB 绘制分段函数⎪⎩⎪⎨⎧<≤+-<≤-<≤=42),2/(2
1)),1(cos(1
0,)(22x x x x x x x x f π图像
MATLAB 程序如下:
把下面的函数保存为Piecewise_x.m 文件
function
F=Piecewise_x(x)
F=x.^2.*(x>=0 & x<1)+cos(pi*(x-1)).*(x>=1 & x<2)+(-x.^2./(x+2)).*(x>=2 & x<=4);
end
运行:
x=linspace(0,4);
F=Piecewise_x(x);%计算相应函数值
plot(x,F);%绘制曲线
hold on ;
plot(1*ones(1,2),ylim,'r:');%画区间间隔线
plot(2*ones(1,2),ylim,'r:');%画区间间隔线
x=linspace(0,4); %设置线性等分向量
F=Piecewise_x(x); %计算相应函数值
plot(x,F); %绘制曲线
hold on ; %设置图形保持状态
plot(1*ones(1,2),ylim,'r:');%画区间间隔线
plot(2*ones(1,2),ylim,'r:');%画区间间间隔线
运行结果如图3
图3 分段函数图
2、二元二次分段函数函数的MATLAB 绘图
问题五:函数
⎪⎩⎪⎨⎧-<=++--<=+<--->+---=1),*5.175.3*75.0exp(*5457.01
1),*6exp(*7575.01),*5.1*75.3*75.0exp(*5457.0),(222222y x x x y y x x y y x x x y y x p 的图形绘制
MATLAB 程序如下:
把下面的函数保存为Piecewise_xy.m 文件
function Pxy=Piecewise_xy(x,y)
Pxy=0.5457*exp(-0.75*y^2 - 3.75*x^2 - 1.5*x).*(x+y>1)+...
0.7575*exp(-y^2 - 6*x^2).*(x+y>-1)+...
0.5457*exp(-0.75*y^2 - 3.75*x^2 + 1.5*x).*(x+y<=-1);
end
运行:
[x,y]=meshgrid(-3:0.1:3);%产生“格点”矩阵
s=size(x)
Pxy=zeros(s(1),s(2));%定义矩阵x 是s(1)s(2)零矩阵
for i=1:s(1)
for j=1:s(2)
Pxy(i,j)=Piecewise_xy(x(i,j),y(i,j));%定义分段函数
end
end
mesh(x,y,Pxy)%定义网线图
运行结果如图4
图4 问题七、绘制分段函数图形
MATLAB程序如下:
Clear %清除内存变量和函数clc; %清楚指令窗
x=0:0.01:1; %定义x的取值范围
n=length(x); %加图例
y=zeros(1,n); %产生1n零矩阵
for i=1:101
if x(i)<=0.25
y(i)=100*x(i).^2;
else if x(i)<=0.5
y(i)=100*x(i).*(1-x(i))-12.5;
else
y(i)=x(i).*(1-x(i));
end
end
end
Figure %创建图形窗口
plot(x,y); %绘制关于x,y的曲线运行结果如图5所示
图5
通过以上利用MATLAB绘图功能绘制分段函数图形问题的讨论,我们就会在此基础上加深对MATLAB强大功能的认识,在利用MATLAB解决其他问题时就有了实际的参考,下面就对物理中的分段函数问题结合MATLAB程序语言进行解决。
五、物理学中分段函数的应用
物理中经常会遇到一些复杂的分段函数图形,如果利用手工绘制或其他的绘制图形方式时,难免会造成图形与实际的偏差。
这样在观察图形获取图形参数时就会造成不必要的误差。
下面我们就讨论物理学中复杂分段函数利用MATLAB程序语言绘制图形的问题
问题八、两个分段函数的MATLAB实现
MATLAB程序如下:
clear;%清除内存变量和函数
t=0:0.01:18;%设置t的变化范围
d1=zeros(size(t));%定义d1是矩阵t同样大小的零矩阵
d2=zeros(size(t));%定义d2是矩阵t同样大小的零矩阵
N=length(t); %加图例
for i=1:N
if 0<=mod(t(i),6) & mod(t(i),6)<3
d1(i)=-(400/27)*(1/4*(mod(fix(t(i)),6)+t(i)-fix(t(i))).^4-2*(mod(fix( t(i)),6)+t(i)-fix(t(i))).^3+(9/2)*(mod(fix(t(i)),6)+t(i)-fix(t(i))).^ 2);
else
d2(i)=(100/6.75)*(1/4*(mod(fix(t(i)),6)+t(i)-fix(t(i))).^4-5*(mod(fix (t(i)),6)+t(i)-fix(t(i))).^3+36*(mod(fix(t(i)),6)+t(i)-fix(t(i))).^2-108*(mod(fix(t(i)),6)+t(i)-fix(t(i)))+108);
end
end
d=d1+d2;%定义d的表达式
plot(t,d);%绘制关于t,d的曲线
xlabel('t');%加x轴说明
ylabel('d'); %加y轴说明
grid on; %命令画网络线
运行结果如图6所示
图6
MATLAB程序如下:
clear; %清除内存变量和函数
t=0:0.01:12; %设置t的变化范围
d1=zeros(size(t)); %定义d1是矩阵t同样大小的零矩阵
d2=zeros(size(t)); %定义d2是矩阵t同样大小的零矩阵
d3=zeros(size(t)); %定义d3是矩阵t同样大小的零矩阵
N=length(t); %加图例
for i=1:N
if0<=mod(t(i),3)&mod(t(i),3)<=1
d1(i)=-139*(3*(mod(fix(t(i)),3)+t(i)-fix(t(i))).^4-8*(mod(fix(t(i)),3 )+t(i)-fix(t(i))).^3+6*(mod(fix(t(i)),3)+t(i)-fix(t(i))).^2);
elseif 1<2
d2(i)=-139;
else
d3(i)=139*(3*(mod(fix(t(i)),3)+t(i)-fix(t(i))).^4-32*(mod(fix(t(i)),3 )+t(i)-fix(t(i))).^3+126*(mod(fix(t(i)),3)+t(i)-fix(t(i))).^2-216*(mo d(fix(t(i)),3)+t(i)-fix(t(i)))+135);
end%结束if语句
end%结束for语句
d=d1+d2+d3 ;%定义d的表达式
plot(t,d); %绘制关于t,d的曲线
xlabel('t'); %加x轴说明
ylabel('d'); %加y轴说明
grid on; %命令画网络线
运行结果如图7所示
图7
以上我们讨论了利用MATLAB程序语言绘制物理学中复杂的分段函数问题,进一步加深了对MATLAB程序语言的认识。
同时也找到了一个很实用的学习工具。