Компания ALT Linux
Опубликован: 24.03.2015 | Доступ: свободный | Студентов: 553 / 138 | Длительность: 19:00:00
Лекция 6:

Моделирование с Maxima

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >

6.3 Моделирование динамических систем

Многие модели, основанные на нелинейных дифференциальных уравнениях, демонстрируют совершенно удивительные свойства, причем решение большинства из них можно получить лишь численно.

Модели, основанные на задачах Коши для ОДУ, часто называют динамическими системами, подчёркивая, что, как правило, они содержат производные по времени t и описывают динамику некоторых параметров. Проблемы, связанные с динамическими системами, на самом деле весьма разнообразны и зачастую не сводятся к простому интегрированию ОДУ.

6.3.1 Моделирование системы химических реакций

Рассмотрим другой пример. Исследуем систему из трех дифференциальных уравнений, описывающих модель химической кинетики:

A \rightarrow B\\B \rightarrow C

Система соответствующих дифференциальных уравнений

\frac{dc_A}{dt} = - k_1 c_A\\
\frac{dc_B}{dt} = k_1 c_A - k_2 c_B\\
\frac{dc_C}{dt} = k_2 c_B

Начальные условия:

c_A = 1, c_B = 0, c_C = 0

Результаты решения приведены на рис.6.6.

Кинетика химических реакций

увеличить изображение
Рис. 6.6. Кинетика химических реакций
(%i1)	eq1:'diff(ca(t),t)=-k1*ca(t);
	eq2:'diff(cb(t),t)=k1*ca(t)-k2*cb(t);
	eq3:'diff(cc(t),t)=k2*cb(t);
(\%o1)\  \frac{d}{d\,t}\,\mathrm{ca}\left( t\right) =-k1\,\mathrm{ca}\left( t\right)\\ 
(\%o2)\  \frac{d}{d\,t}\,\mathrm{cb}\left( t\right) =k1\,\mathrm{ca}\left( t\right) -k2\,\mathrm{cb}\left( t\right) \\
(\%o3)\  \frac{d}{d\,t}\,\mathrm{cc}\left( t\right) =k2\,\mathrm{cb}\left( t\right) \\
(%i4)	atvalue(ca(t),t=0,1);
(\%o4)\  1
(%i5)	atvalue(cb(t),t=0,0);
	atvalue(cc(t),t=0,0);
(\%o5)\  0\\
(\%o6)\  0
(%i7)	sol:desolve([eq1,eq2,eq3],[ca(t),cb(t),cc(t)]);
(\%o7)\  [\mathrm{ca}\left( t\right) ={e}^{-k1\,t},\mathrm{cb}\left( t\right) =\frac{k1\,{e}^{-k1\,t}}{k2-k1}-\frac{k1\,{e}^{-k2\,t}}{k2-k1},\\
\mathrm{cc}\left( t\right) =\frac{k1\,{e}^{-k2\,t}}{k2-k1}-\frac{k2\,{e}^{-k1\,t}}{k2-k1}+1]
(%i8)	ratsimp(sol);
(\%o8)\  [\mathrm{ca}\left( t\right) ={e}^{-k1\,t},\mathrm{cb}\left( t\right) =\frac{\left( k1\,{e}^{k2\,t}-k1\,{e}^{k1\,t}\right) \,{e}^{-k2\,t-k1\,t}}{k2-k1},\\
\mathrm{cc}\left( t\right) =\frac{\left( \left( \left( k2-k1\right) \,{e}^{k1\,t}-k2\right) \,{e}^{k2\,t}+k1\,{e}^{k1\,t}\right) \,{e}^{-k2\,t-k1\,t}}{k2-k1}]
(%i9)	k1:0.1; k2:0.5; ev((sol));
(\%o9)\  0.1\\
(\%o10)\  0.5\\
(\%o11)\  [\mathrm{ca}\left( t\right) ={e}^{-0.1\,t},\mathrm{cb}\left( t\right) =0.25\,{e}^{-0.1\,t}-0.25\,{e}^{-0.5\,t},\mathrm{cc}\left( t\right) =-1.25\,{e}^{-0.1\,t}+0.25\,{e}^{-0.5\,t}+1]
(%i12)	plot2d([%e^(-0.1*t),0.25*%e^(-0.1*t)-0.25*%e^(-0.5*t),
-1.25*%e^(-0.1*t)+0.25*%e^(-0.5*t)+1],[t,0,50],
	[gnuplot_preamble,"set grid"],
	[gnuplot_term,"png size 500,500"],
	[gnuplot_out_file,"chem.png"]);

Несколько более сложная задача — моделирование кинетики параллельно-последовательных реакций, протекающих по схеме:

A \rightarrow B\\
B + C \rightarrow A\\
B \rightarrow C

В зависимости от констант скорости химических реакций данная система может быть довольно жёсткой.

Пример командного файла для решения жёсткой системы ОДУ в Maxima (данная система нелинейна, поэтому используем метод Рунге-Кутта, однако расчёты затрудняются жёсткостью системы):

load("dynamics");
load("draw");
k1:0.1; k2:100; k3:10;
eq1:-k1*ca+k3*cb*cc;
eq2:k1*ca-k3*cb*cc-k2*cb;
eq3:k2*cb;
t_range:[t,0,100,0.01];
sol: rk([eq1,eq2,eq3],[ca,cb,cc],[1,0,0],t_range)$
len:length(sol);
t:makelist(sol[k][1],k,1,len)$
ca:makelist(sol[k][2],k,1,len)$
cb:makelist(sol[k][3],k,1,len)$
cc:makelist(sol[k][4],k,1,len)$
draw2d(title="Chemical system",xlabel="ca",ylabel="cb",
	grid=true,points_joined =true,points(t,ca),
	points(t,cb),points(t,cc),terminal=eps);

Данная система достаточно трудно решается при помощи функции rk. Увеличение констант до k2 = 1000 и k3 = 100 делает задачу практически неразрешимой средствами пакета dynamics.

Простейшим классическим примером существования автоколебаний в системе химических реакций является тримолекулярная модель "Брюсселятор", предложенная в Брюсселе Пригожиным и Лефевром (1965). Основной целью при изучении этой модели было установление качественных типов поведения, совместимых с фундаментальными законами химической и биологической кинетики. В этом смысле брюсселятор играет роль базовой модели, такую же как гармонический осциллятор в физике, или модели Вольтерра в динамике популяций.

Изменение концентраций при моделировании автоколебательной химической реакции (брюсселятора)

увеличить изображение
Рис. 6.7. Изменение концентраций при моделировании автоколебательной химической реакции (брюсселятора)

В рамках данной книги брюсселятор рассматривается как пример автоколебательной системы.

Описание модели брюсселятора в Maxima приведено в следующем командном файле:

load("dynamics");
load("draw");
B:0.5;
eq1:-(B+1)*y0+y0^2*y1+1;
eq2:B*y0-y0^2+1;
t_range:[t,0,10,0.1];
sol: rk([eq1,eq2],[y0,y1],[1,1],t_range)$
len:length(sol);
t:makelist(sol[k][1],k,1,len)$
y0:makelist(sol[k][2],k,1,len)$
y1:makelist(sol[k][3],k,1,len)$
draw2d(title="Brusselator",xlabel="t",ylabel="y0,y1",
grid=true,points_joined = true,
points(t,y0),points(t,y1),terminal=eps);

Графическая иллюстрация (автоколебательный режим в системе) — на рис.67., а фазовые портреты — на рис.6.8 и рис.6.9.

Фазовый портрет для брюсселятора (В=0.5)

увеличить изображение
Рис. 6.8. Фазовый портрет для брюсселятора (В=0.5)
Фазовый портрет для брюсселятора (В=2.5)

увеличить изображение
Рис. 6.9. Фазовый портрет для брюсселятора (В=2.5)

При проведении расчётов следует обратить внимание на жёсткость системы ОДУ, описывающей брюсселятор, в частности, при B = 2.5 для построения приведённой иллюстрации необходимо было уменьшить шаг по времени до 0.002. При очередном запуске командного файла, содержащего команды загрузки пакетов, рекомендуется перезапустить Maxima.

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >