Mathematica Plot с Manipulate не показывает вывод - PullRequest
4 голосов
/ 31 октября 2011

Сначала я пытался визуализировать функцию с четырьмя параметрами с помощью ползунков Plot3D и Manipulate (два параметра управляются ползунками, а другие изменяются в плоскости "x-y"). Тем не менее, я не получаю никакого вывода, когда мои непостроенные параметры управляются Манипулятором?

Следующий пример 1d-графика повторяет то, что я вижу в более сложной попытке построения:

Clear[g, mu]
g[ x_] = (x Sin[mu])^2 
Manipulate[ Plot[ g[x], {x, -10, 10}], {{mu, 1}, 0, 2 \[Pi]}] 
Plot[ g[x] /. mu -> 1, {x, -10, 10}] 

График с фиксированным значением mu имеет ожидаемый параболический выход в автоматически выбранном интервале {0,70}, тогда как график Манипулирования является пустым в диапазоне {0, 1}.

Я подозревал, что PlotRange не был выбран с хорошими значениями по умолчанию при использовании элемента управления ползунка mu, но добавление в PlotRange вручную также не показывает вывод:

Manipulate[ Plot[ g[x], {x, -10, 10}, PlotRange -> {0, 70}], {{mu, 1}, 0, 2 \[Pi]}]

Ответы [ 2 ]

8 голосов
/ 31 октября 2011

Это потому, что параметры Manipulate являются локальными.

mu в Manipulate[ Plot[ g[x], {x, -10, 10}], {{mu, 1}, 0, 2 \[Pi]}] отличается от глобального mu, которое вы очистили в предыдущей строке.

Я предлагаю использовать

g[x_, mu_] := (x Sin[mu])^2
Manipulate[Plot[g[x, mu], {x, -10, 10}], {{mu, 1}, 0, 2 \[Pi]}]

Следующее также работает, но оно продолжает изменять значение глобальной переменной, что может вызвать неожиданности позже, если вы не обратите внимание, поэтому я не рекомендую это:

g[x_] := (x Sin[mu])^2
Manipulate[
 mu = mu2;
 Plot[g[x], {x, -10, 10}],
 {{mu2, 1}, 0, 2 \[Pi]}
]

Может случиться, что вы Clear[mu], но обнаружите, что оно получает значение в тот момент, когда объект Manipulate прокручивается в поле зрения.

2 голосов
/ 01 ноября 2011

Еще один способ преодолеть локализацию Manipulate - это ввести функцию в Manipulate[]:

Manipulate[Module[{x,g},
  g[x_]=(x Sin[mu])^2;
  Plot[g[x], {x, -10, 10}]], {{mu, 1}, 0, 2 \[Pi]}]

или даже

Manipulate[Module[{x,g},
  g=(x Sin[mu])^2;
  Plot[g, {x, -10, 10}]], {{mu, 1}, 0, 2 \[Pi]}]

Оба из которых дают

Define g inside manipulate

Module[{x,g},...] предотвращает нежелательные побочные эффекты в глобальном контексте. Это дает простое определение g: у меня было Manipulate[] ed графиков с десятками настраиваемых параметров, что может быть громоздким при передаче всех этих параметров в качестве аргументов функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...