簡體   English   中英

繪制函數的3D曲面

[英]Plotting a 3d surface of a function

我正在從軟件開發轉向人工智能的過程中學習Matlab。 我一直在學習M語言,但目前遇到了一些障礙。

我正在嘗試生成Rastrigin函數的3d表面。

**rastm.m**
function y = rast(x)
n = 2; 
s = 0;
for j = 1:n
    s = s+(x(j)^2-10*cos(2*pi*x(j))); 
end
y = 10*n+s;

下面是正在執行的代碼test.m

**test.m**
syms f(x,y)
f(x,y) = s;
fsurf(f,[-5.12 5.12 -5.12 5.12]);
zlim([0 80])

執行代碼時,將生成正確比例的3d圖形,但表面完全平坦。 我想我誤解了對test.m第二行調用的Z坐標的計算的引用

f(x,y) = s;

我使用rast(x)的方式不正確,但是我不太清楚為什么

謝謝

除非您有明確的使用符號數學的情況,否則建議您避免使用符號數學,並以數字方式進行數學運算,因為ML / AI畢竟是數值方法。

您可以在2D中將Rastrigrid函數定義為:

[x1,x2]=meshgrid(-5.12:0.01:5.12,-5.12:0.01:5.12);
f =20+x1.^2+x2.^2-10*(cos(2*pi*x1)+cos(2*pi*x2));

或在函數內部

function y = rast2D(x1,x2)
   f =20+x1.^2+x2.^2-10*(cos(2*pi*x1)+cos(2*pi*x2));
end

或者,如果您具有“全局優化工具箱”,則可以使用rastriginsfcn 它的行為似乎沒有記錄,但易於遵循:

[x1,x2]=meshgrid(-5.12:0.01:5.12,-5.12:0.01:5.12);
f=rastriginsfcn([x1(:) x2(:)]);
f=reshape(f,size(x1));

我試圖提出一個行為類似的功能。 我會做:

function f=myRastrigrid(x)
   d=size(x,2);
   f=10*d+sum(x.^2-10*cos(2*pi*x),2);
end

這兩種情況都輸出surf(x1,x2,f,'linestyle','none');axis tight

在此處輸入圖片說明


出於好奇,這就是3D的樣子:

在此處輸入圖片說明

暫無
暫無

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

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