Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Модели и методы проектных решений - файл SODERJ.docx


Модели и методы проектных решений
скачать (297.1 kb.)

Доступные файлы (33):

SODERJ.docx245kb.28.04.2009 16:13скачать
Zadan.txt1kb.11.03.2009 19:28скачать
числа.txt143kb.13.04.2009 00:10скачать
Data.dcu
Data.dfm
Data.~dfm
Data.pas
Data.~pas
ImModel.dcu
ImModel.dfm
ImModel.pas
MathModel.dcu
MathModel.ddp
MathModel.~ddp
MathModel.dfm
MathModel.~dfm
MathModel.pas
MathModel.~pas
MathProject.cfg
MathProject.dof
MathProject.dpr
MathProject.~dpr
MathProject.dproj
MathProject.dproj.2007
MathProject.dproj.local
MathProject.identcache
MathProject.res
Zadacha.dcu
Zadacha.ddp
Zadacha.dfm
Zadacha.~dfm
Zadacha.pas
Zadacha.~pas

содержание
Загрузка...

SODERJ.docx

Реклама MarketGid:
Загрузка...
Содержание

1. Введение……………………………………………………………………….. 2

2. Объект проектирования………………………………………………………..2

3. Математическая модель заданного объекта………………………….............2

4. Метод оптимизации…………………………………………………………...4

5. Оптимизация объекта проектирования…………………………………….....8

6. Проверка работоспособности спроектированного объекта………………....9

7. Выводы…………………………………………………………………….......11

Литература……………………………………………………………………….10

Приложение………………………………………………………...……………13

  1. 

  2. Введение

Задание: Найти методом Ритца распределение температуры по длине трубчатого реактора синтеза полиэтилена (используя линейный закон T=T0+T1L), при котором длина трубы реактора будет минимальной:

2000C2H4 (-C2H4-)2000 ,

=1, E =68 000 Дж/моль, А =120 000, D = 0.025 м, У0.9, =130кг/м3, v=0.1м3/с, , 470 Т0 540 К, -1Т1 2.

При имитационном моделировании выходная координата Спол , входная координата: Сэт , М0 =3000 моль/м3 , К=1200 exp(-0.06dt).

  1. Объект проектирования

Объектом проектирования является реактор для получения полиэтилена из этилена.

2000C2H4 (-C2H4-)2000

Реактор по своему типу является трубчатым, поэтому используют пренебрежения характерные для математической модели «Идеальное вытеснение».

  1. ^ Математическая модель заданного объекта

Для описания рассматриваемого объекта целесообразно использовать математическую модель «Идеальное вытеснение». Используется для описания трубчатых реакторов.








где l - длина трубы реактора, u - скорость движения среды по трубе.



Также изменение концентраций веществ зависит от протекающих внутри аппарата химических реакций.

,

где si – стехиометрический коэффициент i-ого вещества;

k – константа скорости реакции;

сi – концентрация исходных веществ;

αi – порядок реакции по i-ому веществу.

Таким образом, изменение концентрации веществ происходит за счет:

1) идеального вытеснения;

2) протекающих химических реакций.

Тогда математическая модель будет выглядеть следующим образом:

∂C1t,l∂t=-U∂C1t,l∂l-kSC1t,l∂C2t,l∂t=-U∂C2t,l∂l+kSC1t,lk=Ae-ERTT=T0+lT1

где C1= C2H4

C2= (-C2H4-)2000

C1, C2 - входные концентрации исходных веществ, даны в процентах, необходимо перевести в кг/моль:

ρ – средняя плотность реакционной среды;

μ – молекулярная масса вещества;



μ1=0.06 моль/кг – молекулярная масса изопропилового спирта;

μ2=0.032 моль/кг – молекулярная масса воды.

U=Vπd2/4

ν – объемный расход реакционной среды через аппарата

d – диаметр трубы

Для решения дифференциальных уравнений, входящих в систему использовался метод Эйлера.

  1. ^ Метод оптимизации

Ритца и Галёркина методы, широко распространённые прямые методы решения главным образом вариационных задач и краевых задач математического анализа.

  Метод Ритца применяется большей частью для приближённого решения вариационных задач и тех краевых задач, которые сводятся к вариационным. Пусть задан функционал V [(x)] (или более сложный функционал) и требуется найти такую функцию у (х), принимающую в точках x0 и xi заданные значения a = у (х0) и b = у (х1), на которой функционал [(x)] будет достигать экстремумаЗначения исследуемого на экстремум функционала [(x)] рассматриваются не на всех допустимых в данной задаче функциях у (х), а лишь на всевозможных линейных комбинациях вида

ynx=i=1waiφi(x)

с постоянными коэффициентами aiсоставленных из n первых функций некоторой выбранной системы j1(x)j2(х),..., jп (х),... (от удачного выбора этой 

системы функций зависит эффективность применения метода к решению конкретных задач). Необходимым условием выбора системы функций j1(х) является требование, чтобы функции уп(х) удовлетворяли условиям уп (хо) = a и y(x1) = a для всех значений параметров a1. При таком выборе функций уп (х) функционал [(x)] превращается в функцию Ф (а1, a2,..., an) коэффициентов ai, последние выбирают так, чтобы эта функция достигала экстремума, т. е. определяют их из системы уравнений

 ∂Ф∂aj=0 j=1,2,…,n.

  Например, пусть требуется решить задачу о минимуме интеграла

01y'2-y2-2xydx

при условии (0) = (1) = 0. В качестве функций j(x) можно взять x(1 — х)тогда

yn=i=1waixi(1-x)

  Если n = 2, то y2=x1-x(a1+a2x). Для определения коэффициентов a1 и a2 получаем после вычислений два уравнения

35a1+310a2=16

20a1+13105a2=120

  Решением этих уравнений являются числа a1 = 71/369 и a= 7/41. Следовательно,y2x=x1-x(71369+741x). Полученное приближённое решение отличается от точного на величину порядка 0,001.



  Найденное этим методом приближённое решение уп (х) вариационной задачи при некоторых условиях, касающихся в основном полноты системы функций j(x),стремится к точному решению у (х)когда n ® ¥.

  Метод был предложен в 1908 немецким математиком В. Ритцем (W. Ritz). Теоретическое обоснование метода дано сов. математиком Н. М. Крыловым (1918).



^ Блок-схема метода оптимизации
Fnc

да

да

нет

нет да

да нет

нет

да



5. Оптимизация объекта проектирования

При оптимизации объекта проектирования в качестве критерия выступает длина трубы реактора, а в качестве варьируемых параметров – распределение температуры в реакторе.

В результате выполнения программы были получены следующие данные: минимальная длинна трубы реактора «при которой входная концентрация вещества Сin*(1-Y)» равна 6,24 м и достигается при данном распределении температуры (см. рис1)

Т0=540

Т1=2

Рис. 1

Для проверки работоспособности метода, проведём несколько опытов.



На вход подадим данное распределение температуры. Например: 470<T0<600 -1<T1<3

Результат L=1,55 (длина уменьшилась). Видно, что метод стремится к минимуму длины трубы, которое будет достигаться при максимальной температуре. Т0=600 Т1=3

На вход подадим данное распределение температуры. Например: 420<T0<460 -4<T1<-2



Результат L=30 (длина увеличилась). Метод стремится к максимуму температуры. Т0=460 Т1=-2



^ 6. Проверка работоспособности спроектированного объекта

Проверку работоспособности спроектированного объекта проводится методом имитационного моделирования.

В качестве выходной координаты принимается – Спол, входной координаты – Сэт.

Построим генератор случайного процесса со следующими характеристиками.

Математическое ожидание: M0=3000 моль/м3;

Корреляционная функция: K=1200exp(-0,06dt);

тогда дисперсия σ2=1200,

параметр аппроксимации α=0,06.

Для построения генератора случайного процесса воспользуемся приближенной функцией вида:

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



Выходная координата лежит в диапазоне [201.5;206.5], не выходя за его пределы. Следовательно, объект является устойчивым и работоспособным.



7. Выводы

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

Далее методом Ритца была проведена оптимизация объекта по полученной математической модели, выявлены оптимальные параметры (концентрация этилена на выходе реактора, температура в нем) из заданного интервала, при которых достигается минимальная длина трубы реактора.

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



Литература

1. Построение математических моделей химико-технологических объектов \Дудников Е.Г., Балакирев В.С., Кривсунов В.Н., Цирлин А.М. – Л.: Химия. 1970. - 312 с.

2. Шеннон Р. Имитационное моделирование систем - искусство и наука. – М.: Мир, 1975. - 502 с.

3. Закгейм А.Ю. Введение в моделирование химико-технологических процессов. М.: Химия, 1982. - 288 с.

4. Общая химическая технология / Под ред И. П. Мухленова. В 2 ч. – М.: Высшая школа, ч. 2, 1984. - 264 с.

5. Бояринов А. И., Кафаров В. В. Методы оптимизации в химической технологии. – М.: Химия, 1975. - 500 с.

6. Бусленко В. Н. Автоматизация имитационного моделирования сложных систем. – М.: Наука. 1977. - 239 с.



Приложение

Описание программы

Общие сведения

Программа называется MathProject, написана на языке программирования Delphi, в среде разработки CodeGear RAD Studio 2009.

Функциональное назначение программы

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

Описание логической структуры программы

Программа состоит из 2 частей:

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

  2. Проверка математической модели на работоспособность методом имитационного моделирования. С помощью генератора случайных чисел формируется случайная последовательность, далее она проходит через фильтр, который формирует случайный процесс с заданным мат.ожиданием и корреляционной функцией. Эта последовательность будет являться колебаниями объемного расхода вещества, поступающего на вход реактора. Она подается на вход мат.модели динамики, и исследуется выходная величина (концентрация полиэтилена). Если ее колебания не покидают заданных пределов, то полученная мат.модель является работоспособной.

Используемые технические средства



Программа была написана в среде разработки CodeGear RAD Studio 2009на компьютере под управлением операционной системой Windows Vista Ultimate.

Вызов и загрузка программы

Запуск программы осуществляется через файл MathProject.exe. Программа состоит из 2 окон.

  1. Ввод данных. Есть метка «постановка задачи», в которой можно уточнить задание. При необходимости можно изменить данные для расчёта или наоборот вставить их по умолчанию. После ввода всех данных нужно нажать на метку «выполнить». Видимыми станут графики: распределение концентрации и распределение температуры. В верхнем текстовом окне появится рассчитанное значение длинны трубы. В нижнем коэффициенты распределения температуры. Используется статический режим.



  1. 

  2. Имитационное моделирование.

Необходимо в меню «график» сгенерировать случайные числа, случайные процессы и кореллировать их. Затем нажать «выполнить». Появятся 2 графика. Первый график будет показывать случайный процесс сформировавшийся в результате применения метода имитационного моделирования. Эта последовательность является колебаниями концентрации вещества, поступающего на вход реактора. Второй график показывает как эти колебания влияют на изменения концентрации целевого продукта на выходе.

Увеличенный вид выходной концентрации



Входные данные

Предъэкспоненциальные множители A = 120000;

Энергия активации Уравнения Аррениуса Е = 68 000 Дж/моль;

Объемный расход v = 0,1 м3/с;

Концентрация этилена = 20 %;

Диаметр трубы d=0,025 м;

Степень превращения вещества =0,9;

Плотность реакционной среды ρ = 130 кг/м3;

Точность 0,1;

Выходные данные

Длина трубы L=6,28 м;

T0=540;

T1=2;



Текст программы

Представлен не весь текст.

unit MathModel;

interface

uses

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

Dialogs, Menus, ExtCtrls, ComCtrls, StdCtrls, TeeProcs, TeEngine, Chart,

Series, Gauges;

Type …

uses Zadacha, Data, ImModel;

{$R *.dfm}

function ProcToMol(C_in: double): double;

begin

ProcToMol:=C_in*ro/(100*M_etil);

end;

function Ft(n:Word;t:real):real;

var i:Word;

Wr:real;

begin

Wr:=1;

for i:=0 to 1 do

begin

Wr:=Wr*t;

end;

Ft:=Wr;

end;

function Tgr(t:real):real;

var t11,t00: double;

begin

t11:=Temp[0]+t*Temp[1];

t00:=Temp[0];

Tgr:=(t-t00)*(t-t11);

end;

function Wo(t:real):real;

begin

Wo:=Temp[0]+t*Temp[1];

end;

function X(t:real):real;

var Wr:real;

i:Word;

begin

Wr:=Temp[0]+t*Temp[1];

X:=Wr;

end;

function Func(znach:integer):double;

var t,dt,J:double;

i,q:integer;

C_1: double;

K: double;

begin

dt:=0.1;

q:=Round(L/dt);

t:=0;

J:=0;

C_1:=ProcToMol(Cvh);

Rg:=8.31;

for i:=1 to q do

begin

K:=Acons*exp((-E)/(Rg*X(t)));

C_1:=C_1*(1-dt*(2000*K*Pi*D*D/(V*4)));

J:=J+(c_1);

t:=t+dt;

if t=L then

break;



end;

Func:=J;

end;

function Fnc(h:double;n:integer):real;

var i:integer;

begin

SetLength(Ai,2);

SetLength(Bi,2);

SetLength(Si,2);

SetLength(Temp,2);

Bi[0]:=T02;

Bi[1]:=T12;

Ai[0]:=T01;

Ai[1]:=T11;

for i:=0 to 1 do

begin

Temp[n]:=h;

end;

Fnc:=Func(i);

end;

function MZS(a,b:double;n:Word):double;

var xi1,xi2,ai,bi,ki:double;

begin

ki:=(3-Sqrt(5))/2;

ai:=a;

bi:=b;

repeat

xi1:=ai+ki*(bi-ai);

xi2:=bi-ki*(bi-ai);

if Fnc(xi1,n)>Fnc(xi2,n) then

ai:=xi2

else

bi:=xi1;

until Abs(xi2-xi1)<Toch;

itog:=(xi2+xi1)/2;

MZS:=itog;

end;

procedure TMainForm.Label2Click(Sender: TObject);

var i,j: integer;

K: double;

T0,T1,T: double;

m_s: double;

dl: double;

sch: double;

C_1: double;

Cprint: double;

Ai: array of integer;

Bi: array of double;

dt: integer;

Si: array of double;

yi1,yi2,yi0,a,b:double;

y1,y2:double;

begin

MainForm.Gauge1.Visible:=true;

MainForm.Gauge1.Progress:=0;

//Инициализация переменных

Data1.Button1Click(Sender);

T01:=StrToInt(Edit1.Text);

T02:=StrToInt(Edit2.Text);

T11:=StrToInt(Edit3.Text);

T12:=StrToInt(Edit4.Text);

Cvh:=StrToInt(Edit5.Text);

D:=StrToFloat(Edit6.Text);

Y:=StrToFloat(Edit7.Text);

V:=StrToFloat(Edit8.Text);

for i:=0 to 1 do

begin

MainForm.Chart1.Series[i].Clear;

MainForm.Chart2.Series[i].Clear;

end;

MainForm.Chart1.Series[0].Clear;

MainForm.Chart1.Series[2].Clear;



dl:=0.01;

L:=30;

n:=Round(L/dl);

T0:=T01; T1:=T11;

Cm:=ProcToMol(Cvh);

Rg:=8.31;

dt:=1;

C_1:=Cm;

for i:=1 to n do

begin

sch:=sch+dl;

T:=T0+T1*sch;

K:=Acons*exp((-E)/(Rg*T));

C_1:=C_1*(1-dl*(2000*K*Pi*D*D/(V*4)));

Cprint:= C_1*(100*M_etil)/ro;

MainForm.Chart1.Series[0].AddXY(sch,Cprint);

MainForm.Chart1.Series[1].AddXY(sch,Cvh*(1-Y));

MainForm.Gauge1.Progress:=Round(98*i/n);

MainForm.Chart2.Series[0].AddXY(sch,T);

end;

//процедура оптимизации

toch:=StrToFloat(Edit9.Text);

SetLength(Ai,2);

SetLength(Bi,2);

SetLength(Si,2);

SetLength(Temp,2);

Bi[0]:=T02;

Bi[1]:=T12;

Ai[0]:=T01;

Ai[1]:=T11;

Temp[0]:=T01;

Temp[1]:=T11;

Si[0]:=5;

Si[1]:=0.1;

for i:= 0 to 1 do

begin

yi1:=Ai[i];

yi2:=yi1+Si[i];

if Fnc(yi1,i)>Fnc(yi2,i) then

begin

while Fnc(yi1,i)>Fnc(yi2,i) do

begin

if(yi2>=Bi[i]) then

break;

yi0:=yi1;

yi1:=yi2;

yi2:=yi2+Si[i];

end;

a:=yi0;

b:=yi2;

end

else

begin

yi1:=yi2;

yi2:=Ai[i];

while Fnc(yi2,i)<Fnc(yi1,i) do

begin

yi0:=yi1;

yi1:=yi2;

yi2:=yi2-Si[i];

if (yi2<Bi[i]) then

break;

end;

a:=yi2;

b:=yi0;

end;

Min:=MZS(a,b,i);

end;

//вывод

for i:=0 to 1 do

begin

MainForm.Chart1.Series[i].Clear;



MainForm.Chart2.Series[i].Clear;

end;

Cm:=ProcToMol(Cvh);

Rg:=8.31;

dt:=1;

C_1:=Cm;

sch:=0; n_:=0;

SetLength(Conc,n);

for i:=1 to n do

begin

sch:=sch+dl;

T:=Temp[0]+Temp[1]*sch;

K:=Acons*exp((-E)/(Rg*T));

C_1:=C_1*(1-dl*(2000*K*Pi*D*D/(V*4)));

Conc[i-1]:=C_1;

n_:=n_+1;

Cprint:= C_1*(100*M_etil)/ro;

MainForm.Chart1.Series[0].AddXY(sch,Cprint);

if Cprint<=Cvh*(1-Y) then

begin

break;

end;

MainForm.Gauge1.Progress:=Round(98*i/n);

MainForm.Chart2.Series[0].AddXY(sch,T);

end;

L:=sch;

n:=Round(L/dl);

i:=0;

while Conc[i]>0 do

begin

i:=i+1;

end;

SetLength(Conc,i);

MainForm.Memo1.Clear;

MainForm.Edit11.Text:=FloatToStr(L);

MainForm.Memo1.Lines.Add('T0='+FloatToStr(Temp[0]));

MainForm.Memo1.Lines.Add('T1='+FloatToStr(Temp[1]));

StatusBar1.Panels.Items[0].Text:='Готово';

MainForm.Gauge1.Progress:=100;

MainForm.Gauge1.Visible:=false;

end;

end.

sch: double;

implementation

uses MathModel, Data;

{$R *.dfm}

function TFormImModel.gett(a,b:real):real;

begin

gett:=a+b;

end;

function TFormImModel.getl(a,b:real):real;

begin

getl:=u*(a-b);

end;

function TFormImModel.C0_l(l_:double):double;

var i:integer;

begin

//C0_1:=Conc[l1];

for i := 0 to n_ do

begin

if i>=l_/0.01 then

begin

C0_l:=Conc[i-1];

break;

end;



end;

end;

function TFormImModel.C0_t(t_:real):real;

var i: integer;

begin

t_:=abs(t_);

for i := 0 to tau*11 do

begin

if (i>=t_*10-0.5) and (i<=t_*10+0.5) then

begin

C0_t:=MasSpr[i];

break;

end;

end;

//C0_t:=27+4*sin(t_);

end;

procedure SluchChisla();

Var i: integer;

begin

kol_vo:=StrToInt(FormImModel.Edit3.Text);

SetLength(MasSCH,round(L/0.01));

SetLength(MasSCH1,round(L/0.01));

m:=0; sig:=0;

MasSCH[0]:=1;

MasSCH1[0]:=1;

for i:=1 to round(L/0.01) do

begin

MasSCH[i]:=abs(longint(L1*MasSCH[i-1]) mod longint(L2));

end;

for i:=1 to round(L/0.01) do

begin

MasSCH1[i]:=extended(MasSCH[i]/L2)-0.5;

m:=m+MasSCH1[i];

FormImModel.Memo1.Lines.Add(FloatToStr(i)+' '+FloatToStr(MasSCH1[i-1]));

end;

m:=m/round(L/0.01);

for i := 0 to round(L/0.01) do

begin

sig:=sig+(MasSCH1[i]-m)*(MasSCH1[i]-m);

end;

sig:=sig/round(L/0.01);

end;

procedure SluchProc();

var i,k,j: integer;

begin

kol_vo:=round(L/0.01);

SetLength(MasSpr,kol_vo);

a1:=1;

a2:=1;

i:=0;

for k:= 0 to kol_vo do

begin

MasSpr[k]:=0;

for i:= 1 to k do

begin

MasSpr[k]:=MasSpr[k]+MasSCH1[k-i-1]*sqrt(sigma0/(sig*alfa0*a2))*a1*exp(-a2*alfa0*(i-1));

end;

MasSpr[k]:=MasSpr[k]/(10)+M0;

FormImModel.Memo2.Lines.Add(FloatToStr(i-1)+' '+FloatToStr(MasSpr[k]));

end;

end;

procedure TFormImModel.Button1Click(Sender: TObject);

begin

Data1.Show;

Data1.Visible:=true;

end;

procedure TFormImModel.Button2Click(Sender: TObject);



begin

FormImModel.Visible:=false;

MainForm.Visible:=true;

end;

procedure TFormImModel.ImModelCreate(Sender: TObject);

begin

L1:=1220703125;

L2:=262144;

sigma0:=StrToFloat(FormImModel.Edit4.Text);

alfa0:=StrToFloat(FormImModel.Edit5.Text);

Tau:=StrToInt(FormImModel.Edit1.Text);

{ }

end;

procedure TFormImModel.Label2Click(Sender: TObject);

var i,j:integer;

a,b,ts,C01_,C1_,dC1_,C2_,C02_,dC2_,over,K,tochn,diam:real;

begin

SetLength(MasCin,round(tau/0.1));

SetLength(MasCout,round(tau/0.1));

FormImModel.Memo3.Clear; diam:=D*10;

FormImModel.Memo3.Visible:=true;

sigma0:=StrToFloat(FormImModel.Edit4.Text);

tochn:=StrToFloat(FormImModel.Edit6.Text);

Temper:=Temp[0]+Temp[1]*L;

K:=Acons*exp((-E)/(Rg*Temper));

u:=V/(Pi*((diam*diam)/4));

j:=0;

C01_:=0; C02_:=0; C1_:=0; C2_:=0;

ts:=L/u;

FormImModel.Memo3.Lines.Add('t'+' '+'L'+' '+'Cin'+' '+'Cout');

a:=0;b:=-ts/2;

while b<=Tau/2 do

begin

{if (b>=(-ts/2)) and (b<=0) then

begin C01_:=0;

a:=-b;

over:=b+ts; end; }

if (b>0) and (b<=(Tau-ts)/2) then

begin C01_:=C0_t(2*b);

a:=b;

over:=b+ts; end;

if (b>(Tau-ts)/2) then

begin C01_:=C0_t(2*b);

a:=b;

over:=-b+Tau; end;

// FormImModel.Chart1.Series[0].AddXY(round(gett(a,b)),C02_);

// FormImModel.Chart2.Series[1].AddXY(round(gett(a,b)),C01_);

C1_:=C01_;

C2_:=C02_;

a:=a+tochn;

while a<=over do

begin

Temper:=Temp[0]+Temp[1]*getl(a,b);

K:=Acons*exp((-E)/(Rg*Temper));

C1_:=C1_*(1-tochn*(2000*k*Pi*D*D/(V*4)));

dC2_:=C1_*K;

C2_:=C2_+dC2_*tochn;

MasCin[Round(gett(a,b)*10)-1]:=C1_;

//MasCout[Round(gett(a,b)*10)]:=C2_;

// FormImModel.Chart1.Series[0].AddXY(round(gett(a,b)),C2_);

// FormImModel.Chart2.Series[1].AddXY(round(gett(a,b)),C1_);

FormImModel.Memo3.Lines.Add(FloatToStr(gett(a,b))+' '+FloatToStr(getl(a,b))+' '+FloatToStr(C1_)+' '+FloatToStr(C2_));

a:=a+tochn;

end;

// MasCin[Round(gett(a,b)*10)]:=C1_;

MasCout[Round(gett(a,b)*10)]:=C2_;

b:=b+tochn;

end;

j:=j+1;

FormImModel.Memo3.Lines.Add('END');



//вывод

FormImModel.Chart1.Series[0].Clear;

FormImModel.Chart2.Series[1].Clear;

for I := 0 to 100-1 do

begin

FormImModel.Chart2.Series[1].AddXY(i/10,MasCin[i]);

FormImModel.Chart1.Series[0].AddXY(i/10,MasCout[i]);

end;

Имитационное моделирование



procedure TFormImModel.N3Click(Sender: TObject);

var i: integer;

begin

FormImModel.ImModelCreate(Sender);

SluchChisla();

SluchProc();

FormImModel.Chart1.Series[0].Clear;

for I := 1 to kol_vo do

begin

FormImModel.Chart1.Series[0].AddXY(i,MasSpr[i]);

end;

end;

procedure TFormImModel.N4Click(Sender: TObject);

var i,k,s: integer;

m1,sig1,sum,sum0: double;

begin

SetLength(MasKor,kol_vo);

SetLength(MasKor2,kol_vo);

sigma0:=StrToFloat(FormImModel.Edit4.Text);

while true do

begin

for k:= 0 to kol_vo do

begin

MasSpr[k]:=0;

for i:= 1 to k do

begin

MasSpr[k]:=MasSpr[k]+MasSCH1[k-i-1]*sqrt(sigma0/(sig*alfa0*a2))*a1*exp(-a2*alfa0*(i-1));

end;

MasSpr[k]:=MasSpr[k]/(10)+M0;

end;

m1:=0;

for I := 0 to kol_vo do

begin

m1:=m1+MasSpr[i];

end;

m1:=m1/kol_vo;

sig1:=0;

for I := 0 to kol_vo do

begin

sig1:=sig1+(MasSpr[i]-m1)*(MasSpr[i]-m1);

end;

sig1:=sig1/kol_vo;

for s := 0 to 100 do

begin

MasKor[i]:=0;

for I := 0 to kol_vo-s do

begin

MasKor[s]:=MasKor[s]+(MasSpr[i]-m1)*(MasSpr[i+s]-m1);

end;

MasKor[s]:=MasKor[s]/(kol_vo-s);

end;

for I := 0 to 100 do

begin

MasKor2[i]:=1200*exp(-(i)*0.06);

end;

sum:=0;

for I := 0 to 100 do

begin

sum:=sum+(MasKOr[i]-MasKor2[i])*(MasKOr[i]-MasKor2[i]);



end;

if (sum > sum0) and (sum0 > 0)then

begin

a2:=a2+0.01;

break;

end

else

begin

sum0:=sum;

a2:=a2-0.01;

end;

sum0:=-1;

end;

while true do

begin

for k:= 0 to kol_vo do

begin

MasSpr[k]:=0;

for i:= 1 to k do

begin

MasSpr[k]:=MasSpr[k]+MasSCH1[k-i-1]*sqrt(sigma0/(sig*alfa0*a2))*a1*exp(-a2*alfa0*(i-1));

end;

MasSpr[k]:=MasSpr[k]/(10)+M0;

end;

m1:=0;

for I := 0 to kol_vo do

begin

m1:=m1+MasSpr[i];

end;

m1:=m1/kol_vo;

sig1:=0;

for I := 0 to kol_vo do

begin

sig1:=sig1+(MasSpr[i]-m1)*(MasSpr[i]-m1);

end;

sig1:=sig1/kol_vo;

for s := 0 to 100 do

begin

MasKor[i]:=0;

for I := 0 to kol_vo-s do

begin

MasKor[s]:=MasKor[s]+(MasSpr[i]-m1)*(MasSpr[i+s]-m1);

end;

MasKor[s]:=MasKor[s]/(kol_vo-s);

end;

for I := 0 to 100 do

begin

MasKor2[i]:=sig1*exp(-(i)*alfa0);

end;

sum:=0;

sum:=abs(sig1-sigma0)/sigma0;

if (sum > sum0) and (sum0 > 0)then

begin

a1:=a1-0.01;

break;

end

else

begin

sum0:=sum;

a1:=a1+0.01;

end;

end;

FormImModel.Memo1.Clear;

for I := 1 to kol_vo do

begin

FormImModel.Memo1.Lines.Add(IntToStr(i)+' '+FloatToStr(MasSpr[i]));

end;

end;




Скачать файл (297.1 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации