web-dev-qa-db-ja.com

数学のループ内にプロットを表示する方法

ループ内のプロットをmmaで表示する良い方法があるかどうか疑問に思います。通常、Plot関数の出力は、たとえば次のコードでは表示されません。

For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]

ご協力いただきありがとうございます。

編集

私の 前の質問 に関連して、私はすでにForループを持っています。たとえば、このFor[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]。この事実を踏まえて、Forループ内に「任意のキーを押して続行...」のようなものを作成し、ランダムなキーを押すたびにプロットを更新したいと思います。誰かが完全に機能するコードを与えることができますか?

13
Qiang Li

Printを使用するだけです:

For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}] // Print]

またはMonitor

Monitor[For[i = 1, i <= 10, i++, p = Plot[Sin[i*x], {x, -Pi, Pi}]; 
  Pause[0.5]], p]

(ここでは、プロットを表示する時間を与えるために一時停止が使用されています。ループはここではかなり高速です。必要に応じて削除してください)

[〜#〜]編集[〜#〜]
リクエストに応じて、mouseクリックによって制御されるバージョンがグラフをクリックします(キーを押すとグラフにフォーカスが必要になるため、クリックする必要がありますとにかく)

Monitor[For[i = 1, i <= 10, , p = Plot[Sin[i*x], {x, -Pi, Pi}]], 
EventHandler[p, {"MouseDown" :> i++}]]

これは、これを行うためのかなり愚かな方法です。ループはプロットを継続的に再描画します。したがって、わずかに(ただしまだ醜い)バージョンは次のようになります。

s = True;
Monitor[
 For[i = 1, i <= 10, ,
  If[s,
   (* Put main loop body here*) 
   p = Plot[Sin[i*x], {x, -Pi, Pi}] 
   (* end of main body *) ;
   s = False (* prevents continuous re-evaluating main body *)
   ]
  ]
 , EventHandler[p, {"MouseDown" :> (i++; s = True)}]
 ]
17

Forループを使用する代わりに、プロットのリストを返すだけです。

Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]

enter image description here

それらすべてを1つのプロットとして連結する場合は、Show[listOfPlots]はそれを行う1つの方法です:

Show[Table[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10}]]

enter image description here

[〜#〜]更新[〜#〜]

DynamicEventHandlerを使用する簡単な方法の1つを次に示します。

DynamicModule[{i = 1},
 EventHandler[Dynamic[Plot[Sin[i*x], {x, -Pi, Pi}]],
  {"KeyDown" :> i++}
  ]

そして、これがAnimateで作られたもう少し凝ったインターフェースです。

Animate[Plot[Sin[i*x], {x, -Pi, Pi}], {i, 1, 10, 1}, AnimationRunning -> False]
13
Michael Pilat

本当にユーザーにプロット間でキーを押してもらいたい場合、最も簡単な方法は次のようになります。

For[i = 1, i <= 10, i++, 
    If[!ChoiceDialog[Plot[Sin[i*x], {x, -Pi, Pi}], 
         WindowTitle -> "Plot #" <> ToString[i] 
                                 <> ":  Press OK or Enter to continue"],
    Abort[]]]

enter image description here

5
Simon