[英]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
,即在我們的例子中只有x
和y
)。 該函數獨立作用於每一行,因此您可以同時計算任意數量的點。
當你創建一個meshgrid
時
x = -3:3;
y = -3:3;
[X,Y] = meshgrid(x,y);
你會得到兩個矩陣X
和Y
,但你不能直接將它們輸入ackley()
- 你必須創建一個輸入矩陣,如頂部所示,每行對應一個點。 您可以使用冒號運算符:
從X
和Y
列向量,然后再次連接它們:
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.