Ознакомительная версия.
Рис. 10.8. Вызов окна задания интегралов
Задав, к примеру, вычисление неопределенного интеграла можно получить окно с заданным интегралом. Но можно (см. рис. 10.9) задать в панели ввода и любое другое подынтегральное выражение, а также указать переменную интегрирования. Кнопка Clear очищает окно, а кнопка Integrate обеспечивает вычисление интеграла, что и показано на рис. 10.7. Если нажать кнопку OK, то вычисленное значение интеграла будет перенесено в строку вывода. А кнопка Cancel обеспечивает отказ от данной операции.
Рис. 10.9. Вывод окна задания и вычисления неопределенных интегралов
Еще один пример (файл mmp2)
> with(Maplets[Elements]): maplet3d := Maplet([["Enter a function of 'x' and 'y':", TextField['TF3d']()], Plotter['PL1'](),
[Button("Plot", Evaluate('PL1' = 'plot3d(TF3d, x = 0..10, y=0..10)'} ), Button("OK", Shutdown(['TF3d']))]]): result := Maplets[Display](maplet3d);
обеспечивает вывод диалогового окна построения графиков трехмерных объектов, представленных функций функцией двух переменных. Это окно представлено на рис. 10.10 и позволяет в диалоговом режиме задать построение функции двух переменных х и у и построить график этой функции.
Рис. 10.10. Вызов и применение окна построения трехмерного графика, заданной в его поле функции
10.8.3. Управление цветом
Пакет Maplets можно использовать для эффективного (и эффектного) управления цветом. Для этого достаточно использовать команду:
> with(Maplets[Examples]):
GetColor('title' = "Get Color");
При исполнении этой команды появляется окно задания цвета, показанное на рис. 10.11. В этом окне имеется три вкладки дня установки цвета в одной из трех цветовых систем: Swathes, HSB и RGB. Все они дают разные способы задания цвета в интерактивном режиме. Рис. 10.11 демонстрирует наиболее распространенный способ задания цвета в системе RGB. При этом с помощью ползунковых регуляторов можно задать интенсивность каждой составляющей света. Red — красной, Green — зеленой и Blue — синей. В части окна Preview (Предварительный Просмотр) можно наблюдать за изменением цвета текста, основы и пикселей.
Рис. 10.11. Окно задания цвета
Если после установки подходящего цвета нажать кнопку OK, то будет сформирована строка с командами задания выбранного цвета. Для примера, показанного на рис. 10.11, эта строка имеет вид:
>
Если использовать эту команду в любой графической функции, то объект (или часть объекта) будет окрашена в заданный цвет.
Разумеется, пакет Maplets предназначен, прежде всего, для создания диалоговых и прочих окон и элементов интерфейса при создании программных модулей. С пакетом пока не все гладко — иногда окна появляются с заметной задержкой, случаются и сбои при работе с ними. Кроме того, пользователь, уже привыкший к простоте и наглядности работы с обычными документами в одном общем для всех объектов окне, может критически оценивать представленные выше возможности. Тем не менее, корпорация MapleSoft явно сделала ставку на широкое применение маплет-средств для разработки обучающих средств с повышенной наглядностью и работой в интерактивном (диалоговом) режиме.
10.9. Моделирование RLC-цепи с применением маплет-интерфейса
10.9.1. Подготовка процедуры моделирования и тестового примера
Теперь рассмотрим пример на моделирование последовательной RLС-цепи, подключенной к источнику напряжения с заданной произвольно временной зависимостью v(t). Наша задача заключается в нахождении тока i(t) из решения системы из двух дифференциальных уравнений заряда:
где q(t) — временная зависимость заряда в конденсаторе С и i(t) — искомая временная зависимость тока в цепи. Полный текст документа, решающего данную задачу представлен в файле RCL_maplets.
Maple-процедура lrc, позволяющая вычислять i(t) по этой системе дифференциальных уравнений представлена ниже:
> restart;
> lrc := proc(L, R, С, q0, i0, tf, v)
local de, ics, sol, q, i, p;
de :=L*diff(q(t),t,t)+ R*diff(q(t),t)+(1/C)*q(t)= v;
ics :=q(0) = q0,D(q)(0)= i0;
sol :=dsolve({de, ics},q(t), range=0..tf,numeric);
plots[odeplot](sol, [[t,v,color=red],[t, diff(q(t),t), color=blue]],
t=0..tf,legend=["v(t)", "i(t)"], numpoints=1000);
end proc:
Подготовим тестовый пример. Пусть L=250 mH, С=500 mF, R=100 mOhm, v(t)=sin(10*t)*exp(t/2) при нулевых начальных условиях и интервале времени от 0 до 5 обращение к процедуре lrc имеет вид
> lrc(.25, .1, .5, 0, 0, 5, sin(10*t)*ехр(-t/2));
и ведет к построению графика переходных процессов — v(t) и i(t), показанного на рис. 10.12.
Рис. 10.12. Временные зависимости v(t) и i(t) при моделировании LCR-цепи
Нетрудно заметить, что переходные процессы достаточно сложны, хотя и вполне понятны читателю, разбирающемуся в радиотехнических цепях.
10.9. 2. Подготовка окна маплет-интерфейса
Теперь зададимся целью построить окно маплет-интерфейса, имеющего следующие детали:
• поле для задания индуктивности L в mH;
• слайдеры для задания резистивности R в mOhm и емкости С в mF;
• поля для задания начальных значений q0 и i0 и конечного времени t;
• поле для задания временной зависимости i(t) по умолчанию sin(10*t);
• кнопки Plot для построения графиков временных зависимостей v(t) и i(t) и Close для закрытия окна;
• подокно для отображения графиков временных зависимостей v(t) и i(t).
Поскольку построение маплет-интерфейса уже было подробно описано, приведем процедуру lrc_maplet, реализующую эти возможности:
> lrc_maplet : = proc()
local OPTIONS, COMMAND, WINDOW, MAPLET,LINE1,LINE2, LINE3, LINE4, LINE5, LINE6, L, R, C, q0, i0, tf, v;
use Maplets, Maplets[Elements] in L, R,C,q0,i0,tf: = 1/10,1/10,1/10,0,0,10;
v := sin(10*t);
OPTIONS:= title="RLC Circuit Simulator";
COMMAND:= Evaluate(function="lrc_simulate");
LINE1:= "L(mH):",TextBox[L_](value=L*1000, onchange=COMMAND);
LINE2 := "R (mOhm): ", Slider[R_]
(value=R*1000,lower=0,upper=1*1000, majorticks=100, minorticks=10,filled=true,onchange=COMMAND);
LINE3 := "C (mF): ", Slider[C_](value=C*1000, lower=0, upper=1*1000,majorticks=100, minorticks=10, filled=true, onchange=COMMAND);
LINE4 := "q0: ", TextBox[q0_](value=q0,onchange=COMMAND), "i0: ", TextBox[i0_](value=i0, onchange=COMMAND),"tf: ", TextBox[tf_](value=tf, onchange=COMMAND);
LINE5 := "v(t): TextBox[v_](value=v,onchange=COMMAND), Button("Plot", COMMAND), Button("Close", Shutdown());
LINE6 := Plotter[p_]();
WINDOW := Window[W_](OPTIONS,[[LINE1],[LINE2],[LINE3],[LINE4],[LINE5],[LINE6]]);
MAPLET := Maplet(WINDOW); Display(MAPLET);
end use;
end proc:
10.9.3. Организация связи между процедурой моделирования и маплет-интерфейсом
Следующая процедура служит для связи между процедурой моделирования RLC-цепи и процедурой задания маплет-окна:
> lrc_simulate := proc()
local L, R, С, q0, i0, tf, v, p;
use Maplets[Tools] in
L := Get(L_(value)::algebraic, corrections=true);
R := Get(R_(value)::algebraic, corrections=true);
С := Get(С_(value)::algebraic, corrections=true);
L, R, С := (L, R, C)/1000; # преобразование mH -> H, etc.
q0 := Get(q0_(value)::algebraic, corrections=true);
i0 := Get(i0_ (value)::algebraic, corrections=true);
tf := Get(tf_(value)::algebraic, corrections=true);
v := Get(v_(value)::algebraic, corrections=true);
p := lrc(L, R, C, q0, i0, tf, v);
Set(p_(value) = p);
end use;
end proc:
В эту процедуру включены проверки на алгебраичность вводимых с маплет-окна параметров.
10.9.4. Моделирование RLC-цепи в окне маплет-интерфейса
Теперь все готово к началу моделирования RLС-цепи с применением маплет-интерфейсного окна. Для этого достаточно исполнить команду:
> lrc_maplet();
Появится окно, представленное на рис. 10.13 поначалу с пустым подокном вывода графиков. Графики, показанные на рис. 10.13, появятся после активизации кнопки Plot.
Рис. 10.13. Моделирование RLC-цепи с параметрами, заданными по умолчанию
При параметрах взятых по умолчанию частота собственных колебаний RLC-контура близка к частоте синусоидального воздействия и наблюдаются нарастающие почти синусоидальные колебания тока — случай сам по себе интересный, хотя и хорошо известный.
А теперь зададим в окне данные для тестового примера. Для этого изменим значения L, С (R остается прежним) и конечное время tf, а также изменим временную зависимость v(t) добавив в нее экспоненциальный член. Запустив моделирование кнопкой Plot, получим новый рисунок 10.14. Сравнив его с тестовым примером (рис. 10.14) убеждаемся в полной идентичности расчетных переходных процессов.
Рис. 10.14. Моделирование RLC-цепи в маплет-окне с параметрами тестового примера
Следует отметить, что кнопка Plot должна нажиматься только при изменении параметров, вводимых в полях. При перемещении слайдеров для R и С перестройка графиков происходит автоматически. Это позволяет наглядно оценивать переходные процессы при плавном изменении этих параметров. На рис. 10.15 показан случай, когда движком слайдера значительно уменьшена емкость С, что привело к близости частот синусоидальной компоненты входного сигнала и собственной частоты контура. В итоге получен еще один интересный вариант переходного процесса — вначале амплитуда ставших почти синусоидальными колебаний тока нарастает, но затем падает (из-за экспоненциального уменьшения входного напряжения).
Ознакомительная версия.