在Matlab中的轮廓图中需要帮助

时间:2013-06-29 14:29:25

标签: algorithm matlab function matlab-figure

我正在尝试绘制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?

1 个答案:

答案 0 :(得分:0)

有几点需要注意:

1。)正如雅各布罗宾斯在评论中正确指出的那样,你应该避免使用Matlab函数中的名称作为变量名(在你的情况下minmax)。一种非常简单的方法是仅使用大写字母表示变量名称。

2。)你说f只是一个输出是正确的(虽然在这种情况下一个输出不是一个数字,而是一个向量)。也就是说,因为你没有在循环中为它分配任何索引。

3。)是的,contoursurfc都需要至少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 - 网格相对应。此外,现在您的contoursurfc命令将生成图表。

5.。)最后一条评论:您的功能输出和“Shifted Schwefel功能”的网络搜索结果非常不同。但是,如果你实施Shifted Schwefel功能是正确的,那么这个问题应该被问到一个新的问题。