Опубликован: 27.12.2010 | Доступ: свободный | Студентов: 813 / 130 | Оценка: 5.00 / 5.00 | Длительность: 18:38:00
ISBN: 978-5-9556-0117-5
Специальности: Математик
Лекция 3:

Элементы управления и динамика

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Оператор Dynamic[]

Обычные вводы-выводы в Mathematica статичные. Вывод результата уже вычисленного выражения не меняется при дальнейшем изменении переменных, входящих в выражение. Последнее полезно для наблюдения за историей вычислений.

In[14]:=х = 3; 
        х2
Out[15] = 9
In[16]:=x = 5
        х2
Out[16] = 5
Out[17] = 25

Заметим, что первый вывод Out[15] по-прежнему дает значение 9, хотя x уже поменялся.

Если хочется, чтобы вывод результата вычисления выражения менялся при изменении входящих в него переменных, можно использовать Dynamic:

In[18] := Dynamic [x2]
Out[18]=x2

Выполним следующие команды и обратим внимание на то, как будет меняться вывод предыдущей, т.е. Out[18] команды:

In[19]: = x = 7;
Out[18] = 49
In[20]:=x = ∫y d y;
Out[18]=y4/4
In[21]:=x = Plot[x2, {x,  -1, 1}];

Динамика и элементы управления. Сам по себе ползунок не влияет на значение аргумента x:

In[22]: = х = 0.5;
In[23] := Slider [x]

In[24]: = x
Out[24] = 0.5

Если ползунок использовать вместе с Dynamic, то переменная x будет динамически обновлять свое значение при перемещении ползунка:

In[25]:={Slider [Dynamic [x] ] , Dynamic [x]}

In[26]: = x 
Out[26] = 0.5

Приведем примеры использования динамики вместе с двумерным ползунком:

In[27] :={Slider2D [Dynamic [x] ] , Dynamic [x]}

In[28] := {Slider [Dynamic [k] ] ,
            Dynamic [Plot [Sin [k x] , {x, 0, 20π } ,
              PlotRange -> {{0, 20 π} ,{-1, 1}}]]}

Теперь сдвинем слайдер:


In[29] :={Slider2D [Dynamic [r] ] ,
           Dynamic[Plot3D[Cos[Norm[{x, y} - r] ] , {x, 0, 1}, 
            {y, 0, 1}, Mesh -> None] ]}

Приведем примеры использования динамики вместе с другими элементами управления:

In[30] : = Clear [x]
             {Manipulator[Dynamic[xl]], Dynamic[xl]} 
             {Checkbox[Dynamic[x2]], Dynamic[x2]} 
            Map[RadioButton[Dynamic[x3], #]  &, {1, 2, 3}] 
              {ColorSlider[Dynamic[col] ] , 
                Dynamic[Graphics[{col, Disk []}]]} 
               p = {0.5, 0.5} ;
               Graphics[Locator[Dynamic[p]], PlotRange -> 1] 
               Dynamic[p]

Out[37] = ImageScaled[ {0.4 8308 9, 0.58 4573} ] 
In[38] : = Clear [k, x, xl, x2 , p]

Локализация переменных. В приводимых ниже двух примерах ползунков оба они изменяются одинаково при изменении одного из них (так как x - глобальная переменная).

In[39]:={Slider [Dynamic [x] ] , Dynamic [x]} 
         {Slider[Dynamic[x]], Dynamic[x]}

Чтобы избавиться от такой зависимости, можно локализовать переменную x (по аналогии с тем, как это делалось в Module[] ).

In[41]:= 
      DynamicModule[{х}, {Slider[Dynamic[x]], Dynamic[x]}] 
      DynamicModule[{x}, {Slider[Dynamic[x]], Dynamic[x]}]

Локализация с помощью DynamicModule имеет свои преимущества, в частности, при сохранении проекта и выхода из него текущие значения локализованных переменных сохраняются (этого не происходит со значениями глобальных переменных и локальных переменных из Module ).

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >
Олег Корсак
Олег Корсак
Латвия, Рига
Александр Дронов
Александр Дронов
Россия, Воронеж, Воронежский государственный технический университет, 1995