Если использовать эту команду в любой графической функции, то объект (или часть объекта) будет окрашена в заданный цвет.

Разумеется, пакет 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);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату