我正在尝试绘制Shifted Schwefel问题函数的轮廓,但仍然存在此错误:Z必须是2x2或更大的大小。我已经搜索了这个论坛和我帮助了一点的信息,但无法解决上述错误。我从这个论坛获得的信息让我尝试了这段代码:
min = -50;
max = 50;
steps = 20;
c = linspace(min, max, steps); % Create the mesh
[x, y] = meshgrid(c, c); % Create the grid
%o=-50+100*rand(1,2);
%c = c - repmat(o,1,10);
for I=1:length(x)
for J=1:length(y)
o=-50+100*rand(1,2);
x=x-repmat(o,20,10);
f = max(abs(x), [], 2);
end
end
figure,
contour(x,y,f);
figure,
surfc(x, y,f);
现在我的错误是z,其中f的值至少是2x2或更大。我知道我的f只接受一个输入,因此只输出一个。我尝试在嵌套的for循环中使用它,但仍然给我一组矢量而不是至少2x2的矩阵。如果输入是两个,那么问题就没问题,但问题是,它是一个输入。有谁知道我如何使这个“f”输出至少2x2的矩阵,以便我可以绘制轮廓的z?
答案 0 :(得分:0)
有几点需要注意:
1。)正如雅各布罗宾斯在评论中正确指出的那样,你应该避免使用Matlab函数中的名称作为变量名(在你的情况下min
和max
)。一种非常简单的方法是仅使用大写字母表示变量名称。
2。)你说f
只是一个输出是正确的(虽然在这种情况下一个输出不是一个数字,而是一个向量)。也就是说,因为你没有在循环中为它分配任何索引。
3。)是的,contour
和surfc
都需要至少2x2
- 因为它们会在网格上绘制信息,而网格本身至少是2x2
。
4.。)在您的特定情况下,可能不需要两个循环。你似乎只是操纵x
- 向量,你的网格是常规的。因此,您可能想尝试这个循环:
for I=1:length(x)
o=-50+100*rand(1,2);
x=x-repmat(o,20,10);
f(:,I) = max(abs(x), [], 2);
end
现在,f
的大小为20x20
,与x
- 和y
- 网格相对应。此外,现在您的contour
和surfc
命令将生成图表。
5.。)最后一条评论:您的功能输出和“Shifted Schwefel功能”的网络搜索结果非常不同。但是,如果你实施Shifted Schwefel功能是正确的,那么这个问题应该被问到一个新的问题。