我使用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系统错误”。如果您需要此错误的详细信息,我很乐意提供。
我很确定这与点相等有关,因此无法正确绘图,因为在其他情况下,它的工作正常。
我想请教您一个解决方法的建议,因为解决方案不需要非常整洁(因为这种情况很少发生)。
答案 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)
会增加其他线程首先完成的概率(但实际上并不是解决方案)。
竞争条件也可以解释为什么它只会偶尔发生一次,因为它取决于线程等任务的(随机)分配。