1

我使用 Matlabs 绘图函数创建两个矩阵的比较(每个 1300x1 双)。这些值以数百为单位绘制,因为每一百个都需要自己的颜色和标记类型。它看起来像这样:

Start=1
for i=1:1:13
    plot(ArrayA(Start:Start+99,1),ArrayB(Start:Start+99,1));
    Start=Start+100;
end

为了便于阅读,我省略了标记和颜色的参数。

它通常工作正常,但有时,有一种特殊情况,矩阵中的所有值都等于某个标量值(或者至少有 1000 个左右,其余 300 个等于其他一些标量)。在这些情况下,我们可以确定 ArrayA 中的值逐个元素地等于 ArrayB 中的值。

发生这种情况时,整个 matlab 失败并给我“Matlab 系统错误”。如果您需要此错误的详细信息,我很乐意提供。

我很确定这与点是否相等有关,因此无法正确绘制,就像在其他情况下一样,它工作得很好。

我想请您提供解决方法的建议,因为解决方案不需要非常整洁(因为这种情况很少发生)。

4

3 回答 3

1

这很奇怪。双倍的 1300 不算什么,Matlab 应该能够处理。我只是尝试在一个图形上绘制 13000 个相同的值,而 Matlab 并没有打扰。

无论如何,我不能 100% 确定 Matlab 崩溃的原因(也许完整的错误消息可能有用),但如果您可以更具体地了解您要解决的问题,我们可能会找到不同的解决方案。

您是否试图在向量中找到不同值的位置?

于 2012-05-22T09:23:27.013 回答
0

尝试:

pause(.1)

在循环

或者,您可以尝试每次定义 1 个图并设置数据:

fig = figure;
hold on;
myplot = plot(NaN,NaN,'-')
for i = 1:100
   set(myplot,'XData',X(i),'YData',Y(i))
   dummy = dummy+1;
   drawnow;
end

其中 X 和 Y 是您各自的数据。

于 2012-05-23T07:20:44.243 回答
0

我在 Mac OS X 上遇到了完全相同的问题Matlab2010b:在循环中绘图,vector 有时会变成 all NaNs,Matlab 会在那时或不久之后崩溃,但并非总是如此。

现在阅读这个线程,我认为这很可能是不同线程之间的竞争条件,所以来自 Mathworks 的人应该真正解决这个问题。

放置 apause(0.1)会增加另一个线程首先完成的可能性(但这并不是真正的解决方案)。

竞争条件也可以解释为什么它只偶尔发生一次,因为它取决于任务(随机)分配给线程等。

于 2012-10-05T07:07:21.887 回答