【问题标题】:Plot 3D figure in matlab在matlab中绘制3D图形
【发布时间】:2021-04-15 03:41:31
【问题描述】:

例如,我知道如何在 matlab 中绘制这个简单的函数

 % simple demo
function z=myfun(x,y)
z=1./((x+y)^2+y^2+5);

这段代码是我在matlab中绘制图形的方式。

 x=-3:3;
y=-3:3;
[X,Y]=meshgrid(x,y);
Z=myfun(X,Y);
surf(X,Y,Z)

但是如果对于一些复杂的功能我不知道该怎么做。有一个函数叫Ackley Function,

function [out]=ackley(in)

% dimension is # of columns of input, x1, x2, ..., xn
n=length(in(1,:));

x=in;
e=exp(1);

out = (20 + e ...
   -20*exp(-0.2*sqrt((1/n).*sum(x.^2,2))) ...
   -exp((1/n).*sum(cos(2*pi*x),2)));
return

有人可以告诉我怎么做吗?谢谢。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    这实际上特定于 Ackley 函数的此实现:该函数假定您的输入如下所示:

    x_1    y_1    (...)
    x_2    y_2    (...)
     .      .     (.
     .      .       .
     .      .        .)
    

    其中列数是维度(n=2,即在我们的例子中只有xy)。该函数独立作用于每一行,因此您可以同时计算任意数量的点。

    当你用

    创建meshgrid
    x = -3:3;
    y = -3:3;
    [X,Y] = meshgrid(x,y);
    

    您将获得两个矩阵XY,但您不能直接将它们输入ackley() - 您必须创建一个如顶部所示的输入矩阵,其中每一行对应一个点。您可以使用冒号运算符:XY 组成列向量,然后再次连接它们:

    in = [X(:), Y(:)];
    

    现在你有了正确的结构,可以调用ackley

    out = ackley(in);
    

    但输出现在是列向量,而不是矩阵。因此,您必须 reshape 它成为一个矩阵:

    Z = reshape(out, size(X));
    

    最后,你可以像往常一样绘制图表了:

    surf(X, Y, Z);
    

    【讨论】:

    • 非常感谢,您的回答很清楚。欣赏它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多