3个变量的函数的轮廓图

matlab matlab-figure contour figure

2407 观看

1回复

16488 作者的声誉

因为我们可以如下制作f=(x.^2) + (y.^2);2-D的轮廓图:

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

然后我们可以f=(x.^2) + (y.^2);使用3-D 绘制等高线图contour3

我们可以f=(x.^2) + (y.^2) + (z.^2);在3-D中绘制等高线图吗

作者: Sardar Usama 的来源 发布者: 2016 年 3 月 29 日

回应 (1)


2

1784 作者的声誉

决定

matlab函数可以满足isosurface您的要求。但是,您也可以使用其他替代方法来获得所需的结果,例如使用surf。我将介绍这两种方法。

方法1:使用 isosurface

我们需要创建域xyz再生成与价值观三维网格,以便我们能够评估功能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

这是输出:

等值面的f(x,y,z)= x ^ 2 + y ^ 2 + z ^ 2的轮廓

方法2:使用 surf

与前面的方法一样,为了使函数轮廓化f(x,y,z) = x^2 + y^2 + z^2,我们需要将函数匹配到一个常数值,即f(x,y,z) = k,其中k您选择的任何常数值。

如果我们孤立z来讲kxy我们有: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

这是输出:

f(x,y,z)= x ^ 2 + y ^ 2 + z ^ 2的轮廓与冲浪


参考文献

我从David Arnold的文章 “ Matlab中的复数和绘图”中汲取了一些想法,这很值得一读,它将帮助您了解如何绘制生成复数的函数。

作者: codeaviator 发布者: 29.03.2016 10:24
32x32