質問: 1, i <= 1000, i++, q1=-100+RandomReal[] q2=-1+RandomReal[] A=A0+q1*A1+q2*A2 if[行列Aの固有値の実部が全て負,a=1,a=0] if[a==1,青い点プロット,赤い点プロット] ] しかし、これではうまくいきませんでした。For文をなくして q1=-100+RandomReal[] q2=-1+RandomReal[] A=A0+q1*A1+q2*A2 if[行列Aの固有値の実部が全て負,a=1,a=0] if[a==1,青い点プロット,赤い点プロット] としたときは青い点も赤い点もうまくいきます。(1点だけ) For[]内の動作を繰り返して、1000点プロットしたいのですが どうしたらよいでしょうか?よろしくお願いいたします。 プロットはListPlotでやっています。
回答: Forの中で何回もプロットするのではなく、Forの中ではプロットするためのデータを作り、Forの外で最後に1回プロットします。 blue = {}; red = {}; For[i = 0, i < 1000, i++, q1 = RandomReal[{-100, -99}]; q2 = RandomReal[{-1, 0}]; If[Max[Re@Eigenvalues[A0 + q1*A1 + q2*A2]] < 0, blue = Append[blue, {q1, q2}], red = Append[red, {q1, q2}]] ]; ListPlot[{blue, red}, PlotStyle -> {Blue, Red}] (* blueまたはredが0個のときの処理をしていませんので必要であれば追加してください *)