多元函数绘图中MATLAB的应用
一、问题的提出
MATLAB语言是自20世纪80年代以来功能强、效率高、简单易学的一种科学计算语言。它的影响大,流行广。自1984年以来得到了广泛的发展与应用。近年来,MATLAB在我国科学研究和工程应用中发挥越来越大的作用。各高校积极推动计算机基础教育改革,计算机技术的飞速发展和全社会对计算就应用需求的不断增加,给计算机基础教育的发展提供了新的机遇。MATLAB具有友好的工作平台和编程环境、简单易用的程序语言、强大的科学计算机数据处理能力、出色的图形处理功能、应用广泛的模块集合工具箱、实用的程序接口和发布平台。在我们学习数学的同时,我们发现有很多东西只限于手工是很难完成的。举个多元函数的例子,比如当有一个很难的函数,我们必须解出它的值,并且还要在纸上画出它的图形来。对于我们来说这是一个比较难的问题。更难一点,老师让我们给它积分或者微分,这就更是难上加难了。这是我们不要忘了我们这门强大的科学语言MATLAB,它的功能我们已经了解。由此, 我们用MATLAB解决这些问题。
二、MATLAB绘制多元函数的图形问题(1)
例:画出函数
(1)
的图形,其中
。
用MATLAB作图的程序为
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); %生成三维图形
运行结果如图1所示。
图1 函数
的三维图形
如果画图1等高线
程序如下:
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
contour3(X,Y,Z,10); %画10条等高线
xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis'); %三个坐标轴的标记
title('Contour3 of Surface') %标题
grid on %画网格线
运行结果如图2所示。
图2 图1的三维等高线
三、MATLAB绘制多元函数的图形问题(2)
例: 二次曲面的函数如下
(2)
讨论参数a,b,c对其形状的影响。
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,
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示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 z1(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');%X,Y,Z轴的
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
hold off %停止
运行程序,当a=5,b=4,c=3,d=1,N=50时结果如图3所示。
图3 函数
当a=5,b=4,c=3,d=1,N=50时的图像
当a=5i,b=4,c=3,d=1,N=15时结果如图4所示。
图4 函数
当a=5i ,b=4,c=3,d=1,N=15时的图像
由此可得:参数不同其结果不同
二、三维绘图基本操作
1、三维线图
用来画三维曲线,三维曲线与一组(x,y,z)坐标相对应的点连接而成。绘图格式为:
plot3(X,Y,Z,'s')
plot3(X1,Y1,Z1,'s1',X2,Y2,Z2,'s2',...)
(1) X、Y、Z是同维向量时,则绘制以X、Y、Z元素为x、y、z坐标的三维曲线;
(2) X、Y、Z是同维矩阵时,则以X、Y、Z对应列元素为x、y、z坐标绘制多条曲线,曲线条数等于矩阵的列数;
(3) (X1,Y1,Z1,'s1')与(X2,Y2,Z2,'s2')的结构与作用和(X,Y, Z,'s')相同,表示同一指令绘两组以上曲线;
(4) s、s1、s2的意义与二维相同。
【例】绘单条三维曲线
t=(0:0.02:2)*pi; % 三维坐标用参数方程表示
x=sin(t);y=cos(t);z=cos(2*t); % t为参数,得到三个同维向量
plot3(x,y,z,'b-',x,y,z,'bd'); % 绘蓝色线和菱形的点
view([-82,58]); % 选择观察点
box on; % 显示坐标框
legend('链','宝石') % 图例
【例】绘多条三维曲线
t=(0:0.02:2)'.*pi; % 三维坐标用参数方程表示
x=sin(t);y=cos(t);z=cos(2*t); % t为参数,得到三个同维向量
r=0.1:0.1:1; % 画系数不同的10条曲线
x=x*r;y=y*r;z=z*r;
plot3(x,y,z);
view([-82,58]);box on;
2、三维网线图
以网格的形式显示三维图形。通常使用方形网格,所以网格上的每一格点必需有一三维坐标(x,y,z)与之相对应。绘图指令如下:
(1) mesh(Z)-以矩阵Z的列下标为x、行下标为y、矩阵的元素为z组成三维网格数据绘制网线图;
(2) mesh(X,Y,Z)-X、Y、Z是同维矩阵,分别以三个矩阵对应位置的元素x、y、z组成三维网格数据绘制网线图;
(3) mesh(X,Y,Z,C)-C为与其他三个矩阵同维,给出每个格点的用色矩阵。缺省时C=Z。(色表说明见后)
其中,画z=f(x,y)所代表的网格数据产生如下:
(1) x=x1:dx:x2;y=y
[X,Y]=meshgrid(x,y);
然后根据函数求出Z矩阵。
【例】用网线图表现函数
。
1:dy:y2;
X=ones(size(y))*x;
Y=y*ones(size(x));
(2) x=x1:dx:x2;y=y1:dy:y2;
clf; % 清图形窗口
x=-4:4;y=x; % x、y的取值范围都是-4到4
[X,Y]=meshgrid(x,y); % 形成采样点矩阵
Z=X.^2+Y.^2; % 计算函数值
mesh(X,Y,Z); % 绘网格图
colormap(hot); % 选用色图
3、三维曲面图
将网线图的网格填色,形成曲面图。格式为:
surf(Z)、surf(X,Y,Z)、surf(X,Y,Z,C)。含义同网线图。
【例】用曲面图表现函数
。
clf;x=-4:4;y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;
surf(X,Y,Z);
colormap(hot);
1:图形的透视
【例】透视效果演示
[X0,Y0,Z0]=sphere(30); % 产生单位球面的三维坐标
X=2*X0;Y=2*Y0;Z=2*Z0; % 产生半径为2的球面坐标
surf(X0,Y0,Z0); % 画单位球面
shading interp % 对球的着色进行浓淡细化处理
hold on; % 绘图保持
mesh(X,Y,Z) % 绘大球
colormap(hot); % 定义色表
hold off % 取消绘图保持
hidden off % 产生透视效果
axis equal,axis off % 坐标等轴并隐藏
2;图形的镂空
利用非数(NaN)对图形的剪切处理。
【例】演示利用NaN对图形剪切
t=linspace(0,2*pi,100); % 产生参数
r=1-exp(-t/2).*cos(4*t); % 旋转母线
[X,Y,Z]=cylinder(r,60); % 创建圆柱
ii=find(X<0&Y<0); % 确定x-y平面第四象限的坐标
%Z(ii)=NaN; % 剪切
surf(X,Y,Z);colormap(spring),shading interp
%light('position',[-3,-1,3],'style','local') % 设置光源