gpt4 book ai didi

algorithm - 在 Matlab 中绘制轮廓图需要帮助

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:14 24 4
gpt4 key购买 nike

我正在尝试绘制 Shifted Schwefel Problem 函数的轮廓,但一直出现此错误: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 值?

最佳答案

有几点需要注意:

1.) 正如 Jacob Robbins 在他的评论中正确指出的那样,您应该避免使用 Matlab 函数中的名称作为变量名称(在您的例子中为 minmax)。一种非常简单的方法是只使用大写字母作为变量名。

2.) 你说你的 f 只是一个输出是正确的(尽管在这种情况下 one 输出不是一个数字,而是一个向量)。也就是说,因为您没有在循环内为其分配任何索引。

3.) 是的,contoursurfc 都至少需要 2x2 - 因为它们在网格上绘制信息,而网格本身位于本质上至少 2x2

4.) 在您的特定情况下,可能不需要两个循环。您似乎只是在操纵 x-vector 并且您的网格是规则的。因此你可能想试试这个循环:

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-grid .此外,现在您的 contoursurfc 命令将生成绘图。

5.) 最后一条评论:您的函数输出与网络搜索“Shifted Schwefel 函数”的结果非常不同。但是您对 Shifted Schwefel 函数的实现是否正确的问题应该作为一个新问题提出。

关于algorithm - 在 Matlab 中绘制轮廓图需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17381230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com