matlab怎么画出4维函数图形
你的 v 是关于 x, y, z 的函数,对应的图形是由四维空间内所有满足v = f(x,y,z)的点 (x,y,z,v) 的集合。而人类视觉能够看到的最大空间是三维空间,超过3维空间一般就得靠想象了。 所以,据我所知,matlab 里并没有所谓的 4维画图函数。也就是说你是没法在一个三维空间体现四维图像 v=f(x,y,z) 的全貌 (即 点(x,y,z,v) 的集合) 的。不过,很多时候,我们未必需要关心这个4维图形的全貌,我们也许只关心这个4维空间里某一个截面上(如 v = 常数)的图形。比如固定x y, z, v 中某一个后,得到的是一个3维函数。对于这个3维函数图形,我觉得,你可以有以下三种处理方法:
1. 如果这个3维函数有显式的话,你可以用mesh画图
例如: v = f(x,y,z) = x^2 + y^2 + z^3 查看 v = 10 的三维图形。我们可以求出3维显式函数:z = (10 - x^2 - y^2)^(1/3)
2. 如果这个3维函数没有显式,你可以用 Mupad 提供的三维隐函数画图
例如: v = f(x,y,z) = x*y*z*ln(1+x^2+y^2+z^2) 查看 v = 10 的三维图形。很显然,我们无法求出这个函数在 v = 10 的显式表达式,所以,只好用3维隐函数作图。好在 Matlab 的符号引擎 Mupad 为我们提供了3维隐含作图的函数,可以直接使用。只不过,我们需要先在command window 里输入 mupad 来启动一个notebook
本帖最后由 winner245 于 2013-8-13 10:06 编辑
你的 v 是关于 x, y, z 的函数,对应的图形是由四维空间内所有满足v = f(x,y,z)的点 (x,y,z,v) 的集合。而人类视觉能够看到的最大空间是三维空间,超过3维空间一般就得靠想象了。 所以,据我所知,matlab 里并没有所谓的 4维画图函数。也就是说你是没法在一个三维空间体现四维图像 v=f(x,y,z) 的全貌 (即 点(x,y,z,v) 的集合) 的。不过,很多时候,我们未必需要关心这个4维图形的全貌,我们也许只关心这个4维空间里某一个截面上(如 v = 常数)的图形。比如固定x y, z, v 中某一个后,得到的是一个3维函数。对于这个3维函数图形,我觉得,你可以有以下三种处理方法:
1. 如果这个3维函数有显式的话,你可以用mesh画图
例如: v = f(x,y,z) = x^2 + y^2 + z^3 查看 v = 10 的三维图形。我们可以求出3维显式函数:z = (10 - x^2 - y^2)^(1/3)
[x,y] = meshgrid(linspace(-2,2));
z = (10 - x.^2 - y.^2).^(1/3);
mesh(x,y,z)
复制代码
2. 如果这个3维函数没有显式,你可以用 Mupad 提供的三维隐函数画图
例如: v = f(x,y,z) = x*y*z*ln(1+x^2+y^2+z^2) 查看 v = 10 的三维图形。很显然,我们无法求出这个函数在 v = 10 的显式表达式,所以,只好用3维隐函数作图。好在 Matlab 的符号引擎 Mupad 为我们提供了3维隐含作图的函数,可以直接使用。只不过,我们需要先在command window 里输入 mupad 来启动一个notebook,在notebook里再输入:
plot(plot::Implicit3d(x*y*z*ln(1+x^2+y^2+z^2)-10, x = -10..10, y = -10..10, z = -10..10), Scaling = Constrained)
复制代码
给个mupad的代码和图形截图:
3. 无论是否有显式,matlab 还提供一种画切片图形的函数slice,slice做出的图是在切片上用颜色表示v的值
以 v = f(x,y,z) = x*y*z*exp(-(x^2+y^2+z^2)) 为例,假设我们希望看 v = f(x,y,z) 在 x = 0, y = 1, z = 1 这些平面切片的图形,我们可以用以下代码:
[x,y,z] = meshgrid(linspace(-2,2));
v = x.*y.*z.*exp(-(x.^2+y.^2+z.^2));
xslice = 0; yslice = 1; zslice = 1;
slice(x,y,z,v,xslice,yslice,zslice)
xlabel('x'); ylabel('y'); zlabel('z');
colormap hsv
复制代码
得到图形为: