unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series;

type

TForm1 = class(TForm)

Memo1: TMemo;

Chart1: TChart;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Memo2: TMemo;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Label3: TLabel;

Chart2: TChart;

Edit2: TEdit;

Label4: TLabel;

Series3: TFastLineSeries;

Edit3: TEdit;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Series1: TLineSeries;

Memo3: TMemo;

Series2: TLineSeries;

Memo4: TMemo;

procedure FormCreate(Sender: TObject);{выводнаэкранэксперимен-тальныхданных}

procedure Button3Click(Sender: TObject); {очисткатекстовыхполей}

procedure Button1Click(Sender: TObject); моделирование}

procedure Button2Click(Sender: TObject); {очисткаэкрана}

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

var i, m:integer;

tt, cc:array [1..9] of real;

c:array [1..100000] of real;

t, dt, k:real;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

memo1.Clear;

memo2.Clear;

memo3.Clear;

memo4.clear;

tt[1]:=0; cc[1]:=1000;

tt[2]:=10; cc[2]:=600;

tt[3]:=20; cc[3]:=390;

tt[4]:=30; cc[4]:=240;

tt[5]:=40; cc[5]:=150;

tt[6]:=50; cc[6]:=100;

tt[7]:=60; cc[7]:=60;

tt[8]:=70; cc[8]:=30;

tt[9]:=80; cc[9]:=15;

for i:=1 to 9 do begin

memo1.Lines[0]:=memo1.Lines[0]+' '+floattostr(tt[i]);

memo2.Lines[0]:=memo2.Lines[0]+' '+floattostr(cc[i]);

НЕ нашли? Не то? Что вы ищете?

end;

i:=0;

while cc[i]>15 do begin

i:=i+1;

series1.AddXY(tt[i],(cc[i]),'');

series2.AddXY((tt[i]),ln(cc[i]),'');

end;

memo3.Lines[0]:='зеленая - расчет, красная - эксперимент';

memo4.Lines[0]:='ln(cc[i])';

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

//memo1.Lines. Clear;

//memo2.Lines. Clear;

edit1.Text:='';

edit2.Text:='';

edit3.Text:='';

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

i:=0;

while cc[i]>15 do begin

i:=i+1;

series1.AddXY(tt[i],(cc[i]),'');

series2.AddXY((tt[i]),ln(cc[i]),'');

end;

dt:=strtofloat(edit1.Text);

m:=strtoint(edit3.text);

k:=(ln(cc[1])-ln(cc[m]))/(ln(cc[1])*(tt[9]-tt[8]));

edit2.Text:=floattostr(k);

c[1]:=cc[1]; i:=1; t:=0;

while c[i]>0.001 do begin

series3.AddXY(t, c[i],'');

inc(i);

c[i]:=c[i-1]-k*c[i-1]*dt;

t:=t+dt;

end; end;

procedure TForm1.Button2Click(Sender: TObject);

begin

chart1.series[0].Clear;

chart1.Series[1].Clear;

chart2.Series[0].Clear;

end;

end.

Рис. 16 Форма примера № 4

Рис. 17 Рабочее окно запуска программы

Рис. 18 Ввод данных

Рис. 19 Окно выполненной программы, красная зависимость – экспериментальная, зеленая - теоретическая

Аналогично предыдущей задаче, работу можно выполнить в пакете Mathcad. Модель решения та же самая, но исполнение – проще.

Рис. 20 Файл Mathcad с программой, исходными данными и теоретической зависимостью (ломанная кривая, т. е. – дискретная)

Рис. 21 Файл Mathcad с экспериментальной зависимостью (плавная кривая, без разрывов)

Рис. 22 Файл Mathcad с программой, исходными данными и теоретической зависимостью (ломанная кривая, т. е. – дискретная) зависимостью для определения k

Рис. 23Файл Mathcad с данными расчетов

Аналогично предыдущей задаче, моделировать химическую реакцию можно и в excel. Ниже приводятся соответствующие рисунки.

Рис. 24 Файл Excel с исходными данными и экспериментальной зависимостью

Рис. 25Файл Excel с исходными данными и экспериментальной зависимостью для определения k

Рис. 26Файл Excel с исходными данными и теоретической зависимостью

Пример №5

¾ В ходе изучения термического разложения динитроксида на золоте при 990оС получены следующие кинетические данные:

время, мин 30 53 100

степень превращения, % 32 50 73

Определить порядок реакции n и константу скорости k с помощью вычислительной машины. Для решения задачи надо подготовить четыре вычислительных блока: блок, моделирующий собственно химическую реакцию, блок, воспроизводящий экспериментальную кривую,

В уравнении (Т) производим замену: С = С0(1-x), где С0 – начальная концентрация. Получаем: (Т*). Для вычисления степени превращения x необходим дополнительный сумматор: - (-x = (1-x) – 1). ( константа скорости реакции должна получиться 2.1×10-4 с-1.

Задание аналогично предыдущему, подробно не рассматривается, имеются код программы и различные этапы ее выполнения.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Math, ExtCtrls, TeeProcs, TeEngine, Chart, Series;

type

TForm1 = class(TForm)

Memo1: TMemo;

Chart1: TChart;

Edit1: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Chart2: TChart;

Edit2: TEdit;

Label6: TLabel;

Series2: TFastLineSeries;

Edit3: TEdit;

Label7: TLabel;

Edit4: TEdit;

Label8: TLabel;

Memo2: TMemo;

Series4: TFastLineSeries;

Memo3: TMemo;

Memo4: TMemo;

Series3: TLineSeries;

Series1: TLineSeries;

procedureFormCreate(Sender: TObject); {вывод на экран экперимен-тальных данных и построение полулогарифмической зависимости}

procedure Button2Click(Sender: TObject); {очисткатекстовыхполей}

procedure Button3Click(Sender: TObject); {очисткаграфиков}

procedure Button1Click(Sender: TObject); {основнаяпрограмма}

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

i:integer;

tt, al:array [0..3] of real;

k, dt, t,c, n:real;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

tt[0]:=0; al[0]:=0;

tt[1]:=30; al[1]:=0.32;

tt[2]:=53; al[2]:=0.5;

tt[3]:=100; al[3]:=0.73;

memo1.Clear;

memo2.Clear;

memo3.Clear;

memo4.Clear;

for i:=0 to 3 do begin

memo1.Lines[0]:=memo1.Lines[0]+' '+floattostr(tt[i]);

memo2.Lines[0]:=memo2.Lines[0]+' '+floattostr(al[i]);

series1.AddXY(tt[i],1-al[i],'');

series2.AddXY(tt[i],Ln(1-al[i]),'')

end;

k:= abs(ln(1-al[3])-ln(1-al[1]))/(tt[3]-tt[1]);

edit2.Text:=floattostr(k);

n:=100*(ln(al[3])-ln(al[1]))/((ln((1-al[1])/(1-al[3])))*(tt[3]-tt[1]));

//n:=(ln((1-al[1])/(1-al[3]))+(ln(tt[1]/tt[3])))/(ln((1-al[3])/(1-al[1])));

edit3.Text:=floattostr(n);

memo3.Lines[0]:='зеленая - эксперимент, красная - расчет';

memo4.Lines[0]:='зеленая -Ln(1-al[i]), красная - 1-al[i] ';

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

edit1.Text:='';

edit4.text:='';

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

series3.Clear;

series4.Clear;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

c:=strtofloat(edit1.text);

dt:=strtofloat(edit4.text);

t:=0;

while c>0.001 do begin

series3.AddXY(t, c,'');

t:=t+dt;

c:=c-k*power(c, n)*dt;

end;

c:=strtofloat(edit1.text);

for i:=0 to 3 do

series4.AddXY(tt[i],c*(1-al[i]),'');

end;

end.

Рис. 27 Исходная форма.

Рис. 28 Окно программы с расчетом константы скорости (k) и порядка реакции (n)

Рис. 29 Окно программы, ввод данных с клавиаткры

Рис. 30 Рабочее окно с экспериментальной и теоретической зависимостями.

Рис. 31 Рабочее окно, ввод новых данных

Рис. 32Рабочее окно с экспериментальной и теоретической зависимостями.

Задания для лабораторных работ

Все задания, приведенные в пособии, взяты из книг , Финякин моделирование химико-технологических процессов на аналоговых вычислительных машинах. Лабораторный практикум ( М., Химия, 1984) [1] и К. Эберт, Х. Эдерер Компьютеры. Применение в химии. Пер. с нем., под ред. (М., Мир, 1988) [13].

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

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

aA + bB Û cC

cC – aA – bB = 0

где а, b, с – количество молей вещества А, В и С и называются стехиометрическими коэффициентами реакции.

В отличие от стехиометрической схемы механизм химической реакции раскрывает элементарные стадии превращения исходных компонентов в конечные продукты. Скорость химической реакции (u)–есть изменение количества молей компонента (ni), происходящее в единицу времени (dt) в единице объема (dV). Кинетическое уравнение реакции записывается в виде:

ui =

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10