3 个变量的函数的等高线图

Contour plot of a function of 3 variables

因为我们可以在二维中绘制 f=(x.^2) + (y.^2); 的等高线图,如下所示:

[x,y]= meshgrid(-10:10, -10:10);
contour(x,y, (x.^2)+(y.^2));

我们可以使用 contour3

在 3-D 中绘制 f=(x.^2) + (y.^2); 的等高线图

我们可以在 3-D

中绘制 f=(x.^2) + (y.^2) + (z.^2); 的等高线图吗

matlab 函数isosurface 可以完成您的要求。但是,您也可以使用其他替代方法来达到您想要的结果,例如使用 surf。我将介绍这两种方法。

方法一:使用isosurface

我们需要为 xyz 创建域,然后使用这些值生成 3D 网格,以便我们可以计算函数 f(x,y,z) = x^2 + y^2 + z^2 .然后,我们将给常量 k 赋值,并将所有这些信息提供给 isosurface,以便我们可以获得满足条件的 (x,y,z) 值族:f(x,y,z) = k.请注意,这个轮廓实际上是球体!最后,我们可以使用 patch 生成具有这些值的表面。

迭代地为 k 赋予不同的值并查看与这些值关联的轮廓是非常有趣的。

% Value for x, y and z domain.
a = 10;

% Domain for x ,y and z.
x = linspace(-a,a);
y = linspace(-a,a);
z = linspace(-a,a);

% Generate a 3D mesh with x, y and z.
[x,y,z] = meshgrid(x,y,z);

% Evaluate function (3D volume of data).
f = x.^2 + y.^2 + z.^2;

% Do contours from k = 0 to k = 100 in steps of 1 unit.
for k = 0:100
    % Draw the contour that matches k.
    p = patch(isosurface(x,y,z,f,k));
    isonormals(x,y,z,f,p)
    p.FaceColor = 'red';
    p.EdgeColor = 'none';

    % Adjust figure properties.
    title(sprintf('Contours of f(x,y,z) = x^2 + y^2 + z^2\nwith f(x,y,z) = k = %d',k));
    xlabel('x-axis');
    ylabel('y-axis');
    zlabel('z-axis');
    axis equal;
    grid on;
    box on;
    axis([-10 10 -10 10 -10 10]);
    camlight left;
    lighting phong;

    % Update figure.
    drawnow;

    % Clear axes.
    cla;
end

这是输出:

方法二:使用surf

和前面的方法一样,要对函数f(x,y,z) = x^2 + y^2 + z^2进行等高线,我们需要将函数匹配到一个常量值,这里是f(x,y,z) = k,其中k是任意常量值你选。

如果我们根据 kxy 来隔离 z,我们有:z = ± sqrt(k-x.^2-y.^2),所以我们有 xyz。现在,让我们迭代地给 k 不同的值,看看我们用 surf 函数得到的结果!

% Do contours from k = 0 to k = 100 in steps of 1 unit.
for k = 0:100
    % Find the value where: k - x^2 - y^2 = 0
    a = sqrt(k);

    % Domain for x and y.
    x = linspace(-a,a);
    y = linspace(-a,a);
    [x,y] = meshgrid(x, y);

    % Isolate z in terms of k, x and y.
    z = sqrt(k-x.^2-y.^2);

    % Find complex entries in z.
    i = find(real(z)~=z);

    % Replace complex entries with NaN.
    z(i) = NaN;

    % Draw upper hemisphere of surface.
    surf(x,y,z,'FaceColor','red','EdgeColor','none');
    hold on;
    % Draw lower hemisphere of surface.
    surf(x,y,-z,'FaceColor','red','EdgeColor','none');

    % Adjust figure properties.
    title(sprintf('Contours of f(x,y,z) = x^2 + y^2 + z^2\nwith f(x,y,z) = k = %d',k));
    xlabel('x-axis');
    ylabel('y-axis');
    zlabel('z-axis');
    axis equal;
    grid on;
    box on;
    axis([-10 10 -10 10 -10 10]);
    camlight left;
    lighting phong;

    % Update figure.
    drawnow;
    hold off;
end

这是输出:


参考资料

我从 David Arnold's article "Complex Numbers and Plotting in Matlab" 中汲取了一些想法,非常值得一读,将帮助您了解如何绘制生成的函数复数。