1

Matlabs のプロット関数を使用して、2 つの行列 (それぞれ 1300x1 double) の比較を作成します。100 ごとに独自の色とマーカー タイプが必要なため、値は 100 単位でプロットされます。次のようになります。

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 System Error」が表示されます。このエラーの詳細が必要な場合は、喜んで提供いたします。

これは、ポイントが等しいため、正しくプロットできないことに関連していると確信しています。他の場合と同様に、問題なく動作します。

解決策が非常にきちんとしている必要はないので、回避策の提案をお願いしたいと思います (これはめったに起こりません)。

4

3 に答える 3

1

とても奇妙です。double の 1300 は何もなく、Matlab はそれを処理できるはずです。Figure に 13000 個の同じ値をプロットしようとしたところ、Matlab は気にしませんでした。

いずれにせよ、Matlab がクラッシュする理由は 100% わかりません (エラー メッセージ全体が役に立つかもしれません)。

ベクトル内で異なる値を見つける場所を見つけようとしていますか?

于 2012-05-22T09:23:27.013 に答える
0

Matlab2010bMac OS Xでもまったく同じ問題がありました。ループでプロットすると、 vector が all になることがありNaNs、Matlab がその後または直後にクラッシュしますが、常にではありません。

今このスレッドを読んでいると、異なるスレッド間の競合状態である可能性が非常に高いと思うので、Mathworks の担当者は本当にそれを修正する必要があります。

apause(0.1)を入れると、他のスレッドが最初に終了できる可能性が高くなります (ただし、実際には解決策ではありません)。

競合状態は、スレッドへのタスクの(ランダムな)割り当てなどに依存するため、たまにしか発生しない理由も説明します.

于 2012-10-05T07:07:21.887 に答える
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 に答える