当太多的值相同时,Matlab图失败

时间:2012-05-22 08:57:58

标签: matlab plot

我使用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系统错误”。如果您需要此错误的详细信息,我很乐意提供。

我很确定这与点相等有关,因此无法正确绘图,因为在其他情况下,它的工作正常。

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

3 个答案:

答案 0 :(得分:1)

很奇怪。 1300的双重是没有,Matlab应该能够处理。 我只是尝试在一个数字上绘制13000个相同的值,Matlab没有打扰。

无论如何,我不是100%确定为什么Matlab崩溃(也许完整的错误信息可能有用),但如果你可以更具体地解决你试图解决的问题,我们可能会找到一个不同的解决方案。

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

答案 1 :(得分: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是您的相应数据。

答案 2 :(得分:0)

我在Mac OS X上的Matlab2010b上遇到完全相同的问题:在循环中绘图,向量有时会变成全部NaNs,Matlab会在当时或之后不久崩溃但不总是崩溃。

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

使用pause(0.1)会增加其他线程首先完成的概率(但实际上并不是解决方案)。

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