簡體   English   中英

在matlab中繪制3D圖形

[英]Plot 3D figure in matlab

例如,我知道如何在 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

有人可以告訴我怎么做嗎? 謝謝。

這實際上特定於 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);

結果阿克利函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM