График mathematica с манипуляцией не показывает выходных данных

#wolfram-mathematica

#wolfram-mathematica

Вопрос:

Изначально я пытался визуализировать функцию с 4 параметрами с помощью Plot3D и манипулировать ползунками (с двумя параметрами, управляемыми ползунками, а другие изменяются в плоскости «x-y»). Однако я не получаю никаких выходных данных, когда мои параметры, не отображаемые на графике, управляются с помощью Manipulate?

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

 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}, тогда как график Manipulate пуст в диапазоне {0, 1}.

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

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

Ответ №1:

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

mu In 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 прокручивается в поле зрения.

Комментарии:

1. спасибо, это работает хорошо и обобщено на график с четырьмя параметрами, который я действительно пытался.

Ответ №2:

Другой способ преодолеть 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]}]
  

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

Определите g внутри manipulate

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