Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2017, 02:07   #1
Mangaka
Новичок
Джуниор
 
Регистрация: 12.01.2017
Сообщений: 1
Смущение Моделирование динамических режимов ректификационной установки

Кому не сложно, пожалуйста сделайте описание каждой строчки того что происходит в данном коде
Код:
Цитата:
program Project;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows;
const

Fr = 500;
xf = 0.6;
N = 50;
Nf = 20;
KPD = 0.45;
R = 10;
a = 1.35;
h = 665;
rsm = 76;
rp = 539;
b1 = 640;
x0z = 0.23;
xnp1z = 0.973;
S = 0.0009;
E = 0.0001;
Tmax = 3;
Hb = 8;
dh = 0.0025;

var
x, y, x1, y1: array [0..N+1] of double;
txt: text;
D, V, W, L, F_1, xf1, Mcp, G, b2, C, Cz, Lmin, Lmax, dL, T: double;
i: integer;

procedure STATB06;
var
Dmin, Dmax, xNp1, yim1ZV: double;
i: integer;
begin
x[0] := x0z;
y[0] := x0z;
Dmax := Fr;
Dmin := Fr * (xf - x[0]) / (1 - x[0]);
repeat
D := (Dmin + Dmax) / 2;
W := Fr - D;
L := R * D;
V := D + L;
xNp1 := (Fr * xf - W * x0z) / D;
x[1] := (V * y[0]+ W*x[0]) / (L + Fr);
for i := 2 to N+1 do
begin
yim1ZV := (a * x[i-1]) / (1 + (a - 1) * x[i-1]);
y[i-1] := y[i-2] + KPD * (yim1ZV - y[i-2]);
if i < Nf then
x[i] := x[i-1] - V *(y[i-2] - y[i-1]) / (L + Fr) { исчерпывающая часть }
else if i = Nf then
x[i] := ((L + Fr) * x[i-1] - V * (y[i-2] - y[i-1]) - Fr * xf) / L { питание }
else
x[i] := (V * (y[i-1] - y[i-2])) / L + x[i-1] { укрепляющая часть }
end;
if abs(x[N+1] - xNp1) <= E then break;
if x[N+1] > xNp1 then Dmax := D else Dmin := D;
until false;
end;

function f1(x1, x0, y0: double): double; { куб }
begin
Result := ((L + F_1) * x1 - V * y0 - W * x0) / Hb
end;

function f2(x1, x0, y1, y0: double): double; { исчерпывающая часть }
begin
Result := ((L + F_1) * (x1 - x0) + V * (y0 - y1)) / Hb
end;

function f3(x1, x0, y1, y0: double): double; { укрепляющая часть }
begin
Result := (L * (x1 - x0) + V * (y0 - y1)) / Hb
end;

function f4(x1, y0: double): double; { дефлегматор }
begin
Result := (V * y0 - (L + D) * x1) / Hb
end;

function f5(x1, x0, y1, y0: double): double; { тарелка питания }
begin
Result := (L * x1 + Fr * xf - (L + Fr) * x0 + V * (y0 - y1)) / Hb
end;

procedure EULER;
var
i, j: integer;
begin
for i := 1 to 50 do
begin
for j := 0 to N+1 do
begin { решение системы дифференциальных уравнений }
if j = 0 then x1[j] := x1[j] + dh * f1(x1[1], x1[0], y1[0])
else if j < Nf then x1[j] := x1[j] + dh * f2(x1[j+1], x1[j], y1[j], y1[j-1])
else if ((j > Nf) and (j < N+1)) then x1[j] := x1[j] + dh * f3(x1[j+1], x1[j], y1[j], y1[j-1])
else if j = (N+1) then x1[j] := x1[j] + dh * f4(x1[j], y1[j-1])
else x1[j] := x1[j] + dh * f5(x1[j+1], x1[j], y1[j], y1[j-1])
end;
y1[0] := x1[0];
for j := 1 to N+1 do y1[j] := y1[j-1] + KPD * (a * x1[j] / (1 + (a - 1) * x1[j]) - y1[j-1]);
end;
end;

begin
SetConsoleCP(1251);
SetConsoleOutPutCP(1251);
assign(txt, 'results.txt');
rewrite(txt);
STATB06;
Mcp := (xf * 72 + (1 - xf) * 86);
G := (Mcp * V * rsm) / rp;
b2 := G * h * S;
Cz := (b1 * Fr + b2) * (x[N+1] - x[0]) / (Fr * (xf - x[0]));
writeln(txt, 'Статика:');
writeln(txt, 'F = ', Fr, ' D = ', D:6:3, ' W = ', W:6:3, ' L = ', L:8:3, ' Cz = ', Cz:8:3);
for i := 0 to N do writeln(txt, 'x[',i,'] = ', x[i]:6:3, ' y[', i, '] = ', y[i]:6:3);
writeln(txt, 'x[', N+1,'] = ', x[N+1]:6:3);
Lmin := 0.5 * L;
Lmax := (0.5 + 1) * L;
dL := (Lmax - Lmin) * 0.01;
F_1 := Fr + 0.05 * Fr;
xf1 := xf + xf * 0.05;
Mcp := (xf1 * 72 + (1 - xf1) * 86);
T := 0;
writeln(txt, 'Динамика:');
repeat
L := Lmin;
repeat
D := L / R;
V := L + D;
W := F_1 - D;
for i := 0 to N+1 do
begin
x1[i] := x[i];
y1[i] := y[i];
end;
EULER;
G := (Mcp * V * rsm) / rp;
b2 := G * h * S;
C := (b1 * F_1 + b2) * (x1[N+1] - x1[0]) / (F_1 * (xf1 - x1[0]));
if (x1[0] <= x0z) and (x1[N+1] >= xNp1z) and (x1[N+1] <= 1) and (C <= Cz) then break;
L := L + dL;
until L > Lmax;
for i := 0 to N+1 do
begin
x[i] := x1[i];
y[i] := y1[i];
end;
writeln(txt, 'T = ', T:0:2, ' x[0] = ', x[0]:0:3, ' x[', N+1,'] = ', x[N+1]:0:3, ' C = ', C:0:3, ' L = ', L:0:3);
T := T + 0.25;
until T > Tmax;
writeln(txt, 'В конце:');
writeln(txt, 'F = ', Fr, ' D = ', D:6:3, ' W = ', W:6:3, ' L = ', L:8:3, ' C = ', C:8:3);
for i := 0 to N do writeln(txt, 'x[', i, '] = ', x[i]:6:3, ' y[', i, '] = ', y[i]:6:3);
writeln(txt, 'x[', N+1, '] = ', x[N+1]:6:3);
Close(txt);
writeln('Complete!');
readln;
end.
Mangaka вне форума Ответить с цитированием
Старый 12.01.2017, 09:24   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Тут всё расписано:
http://www.studfiles.ru/preview/2609665/
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Access - [!!!] Отображение режимов в разных окнах jaketaylor Microsoft Office Access 1 22.05.2011 23:52
расчет режимов резания (фрезерования) all_in Помощь студентам 1 08.05.2011 13:16
Получение списка режимов VESA vladimir0108 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 28.03.2011 08:26
Тестирование всех режимов видеоадаптера. Neriell Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.11.2009 22:24
Тестирование режимов видеоадаптера Neriell Помощь студентам 0 16.11.2009 20:52