matlab实验五
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五曲面绘图
【实验目的】
1.了解二元函数图形的制作。
2.空间曲面等高线的制作。
3.学习掌握MATLAB软件有关的命令。
【实验内容】
画出函数2
2y
=的图形,并画出其等高线。
x
z+
【实验准备】
1.曲线绘图的MATLAB命令
MATLAB中主要用mesh,surf命令绘制二元函数图形。
可以用help mesh, help surf查阅有关这些命令的详细信息
【实验方法与步骤】
练习1画出函数2
2y
=的图形,不妨将区域限制在
z+
x
⨯
-
x。用MATLAB作图的程序代码为:
(-
y
∈
)
]3,3
,
[
]3,3
[
>>clear;
>>x=-3:0.1:3; %x的范围为[-3,3]
>>y=-3:0.1:3; %y的范围为[-3,3]
>>[X,Y]=meshgrid(x,y); %将向量x,y指定的区域转化为矩阵X,Y
>>Z=sqrt(X.^2+Y.^2); %产生函数值Z
>>mesh(X,Y,Z)
结果如图5.1。图5.1是网格线图,如果要画完整的曲面图,只需将上述的MATLAB 代码mesh(X,Y,Z)改为surf(X,Y,Z), 结果如图5.2
图5.1 锥面图5.2 锥面
要画等高线,需用contour,contour3命令.其中contour为二维等高线, contour3为三维等高线,如画图5.1的三维等高线, MATLAB代码为:>>clear;
>>x=-3:0.1:3;
>>y=-3:0.1:3;
>>[X,Y]=meshgrid(x,y);
>>Z=sqrt(X.^2+Y.^2);
>>contour3(X,Y,Z,10) %画10条等高线
>>xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis') %三个坐标轴的标记>>title('Contour3 of Surface') %标题
>>grid on %画网格线
结果如图5.3.
图5.3 等高线
如画图5.1的二维等高线, MATLAB代码为:
>>clear; x=-3:0.1:3; y=-3:0.1:3;
>>[X,Y]=meshgrid(x,y); Z=sqrt(X.^2+Y.^2);
>> contour(X,Y,Z,10)
>>xlabel('X-axis'),ylabel('Y-axis')
>>title('Contour of Surface')
>>grid on
结果如图5.4.
图5.4 等高线
如果要画1=z 的等高线,则用命令
>>clear; x=-3:0.1:3; y=-3:0.1:3;
>>[X,Y]=meshgrid(x,y); Z=sqrt(X.^2+Y.^2);
>> contour(X,Y,Z,[1 1])
结果如图5.5。
图5.5 等高线
练习1中,函数值22y x z +=可简单算出。在有些情况下,函数值),(y x f z =不能简单算出。这是因为x 和y 的值可能是非均匀间隔的甚至是随机分布的,也
可能使用了不同的坐标系,比如非长方形的网。出现这些情况时,MATLAB 中的函数griddata 就用来产生经查值后的均匀间隔数据以作图。
练习2 二次曲面的方程如下
d c
z b y a x =++22
2222 讨论参数c b a ,,对其形状的影响。
本练习的关键在于如何作出三维曲面图形,特别注意在给定y x ,值求z 时,若有开方运算,一是会出现虚数,二是对实数也有正负两个解。为了使虚数不出现在绘图中,采用了一种技巧,就是将虚数都换成非数(NaN). MATLAB 代码为:
>>a=input('a='); b=input('b='); c=input('c=');
>>d=input('d='); N=input('N='); %输入参数,N 为网格线数目
>>xgrid=linspace(-abs(a), abs(a),N); %建立x 网格坐标
>>ygrid=linspace(-abs(b), abs(b),N); %建立y 网格坐标
>>[x,y]=meshgrid(xgrid,ygrid); %确定N N ⨯个点的x,y 网格坐标
>>z=c*sqrt(d-y.*y/b^2-x.*x/a^2); u=1; %u=1,表示z 要取正值
>>z1=real(z); %取z 的实部z1
>>for k=2:N-1 %以下7行程序的作用是取消z 中含虚数的点
>>for j=2:N-1
if imag(z(k,j))~=0 z1(k,j)=0; end
if all(imag(z([k-1:k+1],[j-1:j+1])))~=0 za(k,j)=NaN; end
end
end
>>surf(x,y,z1), hold on %画空间曲面
>>if u==1 z2=-z1; surf(x,y,z2); %u=1时加画负半面axis([-abs(a),abs(a), -abs(b), abs(b), -abs(c), abs(c)]);
end
>>xlabel('x'),ylabel('y'),zlabel('z')
>>hold off
运行程序,当20
d
=N
c
b
a时的结果见图5.6,
=
=
,3
,4
,5=
=
,1
当15
d
=N
=
c
b i
a时的结果见图5.7,
,5=
,1
,3
,4
=
=
当10
d
=N
=
c i
b i
a时的结果见图5.8,
,5=
,1.0
=
,3
,4
=
图5.6 椭球面