绘制函数的3d表面

时间:2017-03-30 08:16:05

标签: matlab function math graph

我正在学习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])

执行代码时,会生成正确比例的三维图形,但曲面完全平坦。我想我误解了对测试的第二行调用的Z坐标计算的引用.m

f(x,y) = s;

我正在使用rast(x),但我无法弄明白为什么

谢谢

1 个答案:

答案 0 :(得分:3)

除非您明确使用符号数学,否则我建议您避免使用符号数学,因为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

enter image description here

对于好奇,这就是它在3D中的样子:

enter image description here