第5章例题源程序.docx
《第5章例题源程序.docx》由会员分享,可在线阅读,更多相关《第5章例题源程序.docx(24页珍藏版)》请在冰点文库上搜索。
第5章例题源程序
例5.1在0≤X≤2区间内,绘制曲线y=2e-0.5xsin(2πx)。
x=0:
pi/100:
2*pi;
y=2*exp(-0.5*x).*sin(2*pi*x);
plot(x,y)
例5.2绘制曲线
t=-pi:
pi/100:
pi;
x=t.*cos(3*t);
y=t.*sin(t).*sin(t);
plot(x,y);
(1)当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
例如:
x=linspace(0,2*pi,100);
y=[sin(x);cos(x)];
plot(x,y)
(2)当x是向量,y是有一维与x同维的矩阵时,则绘制出多根不同色彩的曲线。
曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。
例如:
t=linspace(0,2*pi,100);
x=[t;t]’;
y=[sin(t);cos(t)]’;
plot(x,y)
(3)plot函数最简单的调用格式是只包含一个输入参数:
plot(x)。
例如:
t=0:
0.01:
2*pi;
x=exp(i*t);%x是一个复数向量
plot(x)
例如:
t=0:
0.01:
2*pi;
x=exp(i*t);%x是一个复数向量
y=[x;2*x;3*x];
plot(y)
2.含多个输入参数的plot函数
含多个输入参数的plot函数调用格式为:
plot(x1,y1,x2,y2,…,xn,yn)
例如:
x=linspace(0,2*pi,100);
plot(x,sin(x),x,2*sin(x),x,3*sin(x))
例5.3用不同线型和颜色在同一坐标内绘制曲线y=2e-0.5xsin(2πx)及其包络线。
x=(0:
pi/100:
2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
x1=(0:
12)/2;
y3=2*exp(-0.5*x1).*sin(2*pi*x1);
plot(x,y1,'k:
',x,y2,'b--',x1,y3,'rp');
例5.4用不同标度在同一坐标内绘制曲线y1=e-0.5xsin(2πx)及曲线y2=1.5e-0.1xsin(x)。
x1=0:
pi/100:
2*pi;
x2=0:
pi/100:
3*pi;
y1=exp(-0.5*x1).*sin(2*pi*x1);
y2=1.5*exp(-0.1*x2).*sin(x2);
plotyy(x1,y1,x2,y2);
例5.5绘制分段函数曲线并添加图形标注。
x=linspace(0,10,100);
y=[];
forx0=x
ifx0>=8
y=[y,1];
elseifx0>=6
y=[y,5-x0/2];
elseifx0>=4
y=[y,2];
elseifx0>=0
y=[y,sqrt(x0)];
end
end
plot(x,y)
axis([01002.5])%设置坐标轴
title('分段函数曲线');%加图形标题
xlabel('VariableX');%加X轴说明
ylabel('VariableY');%加Y轴说明
text(2,1.3,'y=x^{1/2}');%在指定位置添加图形说明
text(4.5,1.9,'y=2');
text(7.3,1.5,'y=5-x/2');
text(8.5,0.9,'y=1');
例5.6用图形保持功能在同一坐标内绘制曲线y=2e-0.5xsin(2πx)及其包络线。
x=(0:
pi/100:
2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
plot(x,y1,'b:
');
axis([0,2*pi,-2,2]);%设置坐标
holdon;%设置图形保持状态
plot(x,y2,'k');
legend('包络线','包络线','曲线y');%加图例
holdoff;%关闭图形保持
grid%网格线控制
例5.7在一个图形窗口中以子图形式同时绘制正弦、余弦、正切、余切曲线。
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=sin(x)./(cos(x)+eps);
ct=cos(x)./(sin(x)+eps);
subplot(2,2,1);
plot(x,y);
title('sin(x)');axis([0,2*pi,-1,1]);
subplot(2,2,2);
plot(x,z);
title('cos(x)');axis([0,2*pi,-1,1]);
subplot(2,2,3);
plot(x,t);
title('tangent(x)');axis([0,2*pi,-40,40]);
subplot(2,2,4);
plot(x,ct);
title('cotangent(x)');axis([0,2*pi,-40,40]);
请看下面的程序。
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=sin(x)./(cos(x)+eps);
ct=cos(x)./(sin(x)+eps);
subplot(2,2,1);%选择2×2个区中的1号区
stairs(x,y);title('sin(x)-1');axis([0,2*pi,-1,1]);
subplot(2,1,2);%选择2×1个区中的2号区
stem(x,y);title('sin(x)-2');axis([0,2*pi,-1,1]);
subplot(4,4,3);%选择4×4个区中的3号区
plot(x,y);title('sin(x)');axis([0,2*pi,-1,1]);
subplot(4,4,4);%选择4×4个区中的4号区
plot(x,z);title('cos(x)');axis([0,2*pi,-1,1]);
subplot(4,4,7);%选择4×4个区中的7号区
plot(x,t);title('tangent(x)');axis([0,2*pi,-40,40]);
subplot(4,4,8);%选择4×4个区中的8号区
plot(x,ct);title('cotangent(x)');axis([0,2*pi,-40,40]);
例5.8分别以条形图、填充图、阶梯图和杆图形式绘制曲线y=2e-0.5x。
x=0:
0.35:
7;
y=2*exp(-0.5*x);
subplot(2,2,1);bar(x,y,'g');
title('bar(x,y,''g'')');axis([0,7,0,2]);
subplot(2,2,2);fill(x,y,'r');
title('fill(x,y,''r'')');axis([0,7,0,2]);
subplot(2,2,3);stairs(x,y,'b');
title('stairs(x,y,''b'')');axis([0,7,0,2]);
subplot(2,2,4);stem(x,y,'k');
title('stem(x,y,''k'')');axis([0,7,0,2]);
例5.9绘制ρ=sin(2θ)cos(2θ)的极坐标图。
theta=0:
0.01:
2*pi;
rho=sin(2*theta).*cos(2*theta);
polar(theta,rho,'k');
例5.10绘制y=10x2的对数坐标图并与直角线性坐标图进行比较。
x=0:
0.1:
10;
y=10*x.*x;
subplot(2,2,1);
plot(x,y);
title('plot(x,y)');gridon;
subplot(2,2,2);
semilogx(x,y);
title('semilogx(x,y)');gridon;
subplot(2,2,3);
semilogy(x,y);
title('semilogy(x,y)');gridon;
subplot(2,2,4);
loglog(x,y);
title('loglog(x,y)');gridon;
fplot('[sin(x),cos(x)]',[0,2*pi,-1.5,1.5],1e-3,'r.')
例5.11用fplot函数绘制f(x)=cos(tan(πx))的曲线。
先建立函数文件myf.m:
functiony=myf(x)
y=cos(tan(pi*x));
再用fplot函数绘制myf.m函数的曲线:
fplot('myf',[-0.4,1.4],1e-4)
得到如图5.12所示曲线。
从图5.12中可看出,在x=0.5附近采样点十分密集。
也可以直接用fplot函数绘制f(x)=cos(tan(πx))的曲线:
fplot('cos(tan(pi*x))',[-0.4,1.4],1e-4)
例5.12绘制图形:
(1)某次考试优秀、良好、中等、及格、不及格的人数分别为:
7,17,23,19,5,试用饼图作成绩统计分析。
(2)绘制复数的相量图:
3+2i、5.5-i和-1.5+5i。
subplot(1,2,1);
pie([7,17,23,19,5]);
title('饼图');legend('优秀','良好','中等','及格','不及格');
subplot(1,2,2);
compass([3+2i,5.5-i,-1.5+5i]);title('相量图');
例5.13绘制空间曲线:
t=0:
pi/50:
2*pi;
x=8*cos(t);
y=4*sqrt
(2)*sin(t);
z=-4*sqrt
(2)*sin(t);
plot3(x,y,z,'p');
title('Linein3-DSpace');
text(0,0,0,'origin');
xlabel('X'),ylabel('Y'),zlabel('Z');grid;
例5.14已知6x=7:
29;
y=16:
35;
[x,y]=meshgrid(x,y);%在[7,29]×[16,35]区域生成网格坐标
z=2*x+5*y;
k=find(z==126);%找出解的位置
x(k)',y(k)'%输出对应位置的x,y即方程的解
例5.15用三维曲面图表现函数z=sin(y)cos(x)。
程序1:
x=0:
0.1:
2*pi;
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
mesh(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');
title('mesh');
程序2:
x=0:
0.1:
2*pi;
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
surf(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');
title('surf');
程序3:
x=0:
0.1:
2*pi;
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
plot3(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');
title('plot3-1');grid;
例5.16绘制两个直径相等的圆管的相交图形。
%两个等直径圆管的交线
m=30;
z=1.2*(0:
m)/m;
r=ones(size(z));
theta=(0:
m)/m*2*pi;
x1=r'*cos(theta);y1=r'*sin(theta);%生成第一个圆管的坐标矩阵
z1=z'*ones(1,m+1);
x=(-m:
2:
m)/m;
x2=x'*ones(1,m+1);y2=r'*cos(theta);%生成第二个圆管的坐标矩阵
z2=r'*sin(theta);
surf(x1,y1,z1);%绘制竖立的圆管
axisequal,axisoff
holdon
surf(x2,y2,z2);%绘制平放的圆管
axisequal,axisoff
title('两个等直径圆管的交线');
holdoff
例5.17分析由函数z=x2-2y2构成的曲面形状及与平面z=a的交线。
[x,y]=meshgrid(-10:
0.2:
10);
z1=(x.^2-2*y.^2)+eps;%第1个曲面
a=input('a=?
');
z2=a*ones(size(x));%第2个曲面
subplot(1,2,1);
mesh(x,y,z1);holdon;mesh(x,y,z2);%分别画出两个曲面
v=[-10,10,-10,10,-100,100];axis(v);grid;%第1子图的坐标设置
holdoff;
r0=abs(z1-z2)<=1;%求两曲面z坐标差小于1的点
xx=r0.*x;yy=r0.*y;zz=r0.*z2;%求这些点上的x,y,z坐标,即交线坐标
subplot(1,2,2);
plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),'*');%在第2子图画出交线
axis(v);grid;%第2子图的坐标设置
例5.18在xy平面内选择区域[-8,8]×[-8,8],绘制函数
的4种三维曲面图。
[x,y]=meshgrid(-8:
0.5:
8);
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);
subplot(2,2,1);
meshc(x,y,z);
title('meshc(x,y,z)')
subplot(2,2,2);
meshz(x,y,z);
title('meshz(x,y,z)')
subplot(2,2,3);
surfc(x,y,z)
title('surfc(x,y,z)')
subplot(2,2,4);
surfl(x,y,z)
title('surfl(x,y,z)')
例5.19绘制标准三维曲面图形。
t=0:
pi/20:
2*pi;
[x,y,z]=cylinder(2+sin(t),30);
subplot(1,3,1);
surf(x,y,z);
subplot(1,3,2);
[x,y,z]=sphere;
surf(x,y,z);
subplot(1,3,3);
[x,y,z]=peaks(30);
meshz(x,y,z);
例5.20绘制三维图形:
(1)绘制魔方阵的三维条形图。
(2)以三维杆图形式绘制曲线y=2sin(x)。
(3)已知x=[2347,1827,2043,3025],绘制三维饼图。
(4)用随机的顶点坐标值画出五个黄色三角形。
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')
例5.21绘制多峰函数的瀑布图和等高线图。
subplot(1,2,1);
[X,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');
例5.22从不同视点绘制多峰函数曲面。
subplot(2,2,1);mesh(peaks);
view(-37.5,30);%指定子图1的视点
title('azimuth=-37.5,elevation=30')
subplot(2,2,2);mesh(peaks);
view(0,90);%指定子图2的视点
title('azimuth=0,elevation=90')
subplot(2,2,3);mesh(peaks);
view(90,0);%指定子图3的视点
title('azimuth=90,elevation=0')
subplot(2,2,4);mesh(peaks);
view(-7,-10);%指定子图4的视点
title('azimuth=-7,elevation=-10')
例5.233种图形着色方式的效果展示。
z=peaks(20);colormap(copper);
subplot(1,3,1);surf(z);
subplot(1,3,2);surf(z);shadingflat;
subplot(1,3,3);surf(z);shadinginterp;
例5.24绘制两个球面,其中一个球在另一个球里面,将外面的球裁掉一部分,使得能看见里面的球。
[x,y,z]=sphere(20);
%生成外面的大球
z1=z;
z1(:
1:
4)=NaN;%将大球裁掉一部分
c1=ones(size(z1));
surf(3*x,3*y,3*z1,c1);
%生成里面的小球
holdon
z2=z;
c2=2*ones(size(z2));
c2(:
1:
4)=3*ones(size(c2(:
1:
4)));
surf(1.5*x,1.5*y,1.5*z2,c2);
colormap([0,1,0;0.5,0,0;1,0,0]);
gridon
holdoff
例5.25隐函数绘图应用举例。
subplot(2,2,1);
ezplot('x^2+y^2-9');axisequal
subplot(2,2,2);
ezplot('x^3+y^3-5*x*y+1/5')
subplot(2,2,3);
ezplot('cos(tan(pi*x))',[0,1])
subplot(2,2,4);
ezplot('8*cos(t)','4*sqrt
(2)*sin(t)',[0,2*pi])
例5.26在同一坐标下画红、绿两根不同曲线,希望获得绿色曲线的句柄,并对其进行设置。
x=0:
pi/50:
2*pi;
y=sin(x);
z=cos(x);
plot(x,y,'r',x,z,'g');
H=get(gca,'Children');%获取两曲线句柄向量H
fork=1:
length(H)
ifget(H(k),'Color')==[010]%[010]代表绿色
Hg=H(k);%获取绿色线条句柄
end
end
pause%便于观察设置效果
set(Hg,'LineStyle',':
','Marker','p');%对绿色曲线进行设置
例5.27建立一个图形窗口。
该图形窗口没有菜单条,标题名称为“图形窗口示例”,起始于屏幕左下角、宽度和高度分别为300像素点和150像素点,背景颜色为绿色,且当用户从键盘按下任意一个键时,将显示“Hello,KeyboardKeyPressed.”字样。
hf=figure('Color',[0,1,0],'Position',[1,1,300,150],...
'Name','图形窗口示例','NumberTitle','off','MenuBar','none',...
'KeyPressFcn','disp(''Hello,KeyboardKeyPressed.'')');
例5.28分别在4个不同的图形窗口绘制出正弦、余弦、正切、余切曲线。
要求先建立一个图形窗口并绘图,然后每关闭一个再建立下一个,直到建立第4个窗口并绘图。
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=tan(x);
ct=1./(t+eps);;
%命令组待用
C4=['figure(''Name'',''cotangent(x)'',''NumberTitle'',',...
'''off'');plot(x,ct);axis([0,2*pi,-40,40]);'];
C3=['figure(''Name'',''tangent(x)'',''DeleteFcn'',C4,',...
'''NumberTitle'',''off'');plot(x,t);axis([0,2*pi,-40,40]);'];
C2=['figure(''Name'',''cos(x)'',''DeleteFcn'',C3,',...
'''NumberTitle'',''off'');plot(x,z);axis([0,2*pi,-1,1]);'];
%先创建1个图形窗口并绘制曲线
figure('Name','sin(x)','DeleteFcn',C2,'NumberTitle','off');
plot(x,y);
axis([0,2*pi,-1,1]);
例5.29利用坐标轴对象实现图形窗口的任意分割。
clf;%清图形窗口
x=linspace(0,2*pi,20);
y=sin(x);
axes('Position',[0.2,0.2,0.2,0.7],'GridLineStyle','-.');
plot(y,x);title('sin(x)-1');
axes('Position',[0.4,0.5,0.2,0.1]);
stairs(x,y);title('sin(x)-2');
axes('Position',[0.55,0.6,0.25,0.3]);
stem(x,y);title('sin(x)-3');
axes('Position',[0.55,0.2,0.25,0.3]);
[x,y]=meshgrid(-8:
0.5:
8);
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);
mesh(x,y,z);title('mesh(x,y,z)');
例5.30利用曲线对象绘制曲线
和
。
t=0:
pi/100:
pi/2;
y1=sin(2*pi*t);
y2=sqrt(3)/2*exp(-4*t).*sin(4*sqrt(3)*t+pi/3);
figh=figure;
axes('GridLineStyle',':
','XLim',[0,pi/2],'YLi