首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >绘制函数的三维曲面

绘制函数的三维曲面
EN

Stack Overflow用户
提问于 2017-03-30 08:16:04
回答 1查看 1K关注 0票数 0

当我从软件开发转向人工智能的时候,我正在学习Matlab。我一直在学习M语言,目前我遇到了一些障碍。

我正在尝试生成Rastrigin函数的三维曲面。

代码语言:javascript
运行
复制
**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

代码语言:javascript
运行
复制
**test.m**
syms f(x,y)
f(x,y) = s;
fsurf(f,[-5.12 5.12 -5.12 5.12]);
zlim([0 80])

当代码被执行时,三维图形的比例是正确的,但是曲面是完全平坦的。我想我误解了在test.m第二行中提到的Z坐标的计算。

代码语言:javascript
运行
复制
f(x,y) = s;

我使用rast(x)不正确,但我不太清楚为什么

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 08:44:21

除非你有一个使用符号数学的明确案例,否则我建议你避免使用符号数学,做你的数字数学,因为ML/AI毕竟是数值方法。

您可以在2D中定义Rastrigrid函数,如:

代码语言:javascript
运行
复制
[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));

或在函数内部

代码语言:javascript
运行
复制
function y = rast2D(x1,x2)
   f =20+x1.^2+x2.^2-10*(cos(2*pi*x1)+cos(2*pi*x2));
end

或者,如果您有“全局优化工具箱”,则可以使用rastriginsfcn。它的行为似乎没有记录,但很容易理解:

代码语言:javascript
运行
复制
[x1,x2]=meshgrid(-5.12:0.01:5.12,-5.12:0.01:5.12);
f=rastriginsfcn([x1(:) x2(:)]);
f=reshape(f,size(x1));

我试着想出一个行为类似的函数。我会这样做:

代码语言:javascript
运行
复制
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中的样子:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43112145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档