Подтвердить что ты не робот

Как показать графики внутри цикла в математике

Мне интересно, есть ли у вас хорошие способы показать графики внутри цикла в mma. Обычно вывод функции Plot не отображается, например, в следующем коде:

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

Спасибо за вашу помощь.

Edit

В связи с предыдущим вопросом у меня уже есть цикл For, например, как этот For[i = 1, i <= 10, i++, Plot[Sin[i*x], {x, -Pi, Pi}]]. Учитывая этот факт, я хочу иметь что-то вроде "нажать любую клавишу, чтобы продолжить..." внутри цикла For, а затем обновить график каждый раз, когда я нажимаю любой случайный ключ. Может ли кто-нибудь дать полный рабочий код?

4b9b3361

Ответ 1

Просто используйте 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]

(Пауза используется здесь, чтобы дать время для просмотра графика, цикл довольно быстрый здесь. Удалите, если необходимо)

ИЗМЕНИТЬ
По запросу версия, управляемая щелчками мыши на графике (нажатие клавиш требует, чтобы график имел фокус, поэтому вам нужно щелкнуть в любом случае)

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)}]
 ]

Ответ 2

Просто верните список графиков вместо использования цикла For:

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

enter image description here

Если вы хотите, чтобы все они были объединены как один график, Show[listOfPlots] - это один из способов сделать это:

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

enter image description here

UPDATE

Здесь один простой способ с использованием Dynamic и EventHandler:

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]

Ответ 3

Если вы действительно хотите, чтобы пользователь нажал клавишу между графиками, самым простым способом может быть

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