[英]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.