нефтехимическое производство

Оглавление сайта

Главная

  Приветствие

  Что нового

  Системные требования

  Общая блок-схема

  Запуск программы

  Панель "Расчет"

  Панель "Аппараты"

  Панель "Потоки"

  Панель "Схема"

  Встроенный Паскаль

  Работа с AutoCAD

  Объектная модель

  Оглавление банка ФХС

  Как создать библиотеку

  Подключение библиотеки

  Как собрать схему

  Выполнение расчета

  Структурный анализ

  Отладка

  Загрузка и сохранение

  Итерационные расчеты

  Работа с ФХС

  Использование в учебном процессе

  Синтез аммиака

  Синтез метанола

  Производство бензола

  Производство азотной кислоты

  Производство серной кислоты

  Процесс Клауса

  Контакты

  Как получить программу

  Лицензия

Скачать

Видеоурок

Организация итерационных расчетов
Предыдущий Начало Следующий

Организация итерационных расчетов
            Поверочный расчет химико-технологической схемы без рециклов требует только правильно задать последовательность аппаратов на форме "Аппараты".
            В случае наличия в схеме рециклов или расчетных связей между аппаратами - так называемого проектного расчета схемы, когда заданы некоторые условия на выходе схемы, требуется организация итерационного процесса сходимости. И та, и другая задачи сводятся к решению системы нелинейных уравнений:
            F1(X1,X2,...XN)=0
            F2(X1,X2,...XN)=0
            ...
            FN(X1,X2,...XN)=0
Заметим, что хорошо поставленная задача описывается невырожденной системой уравнений, в частности, число уравнений равно числу неизвестных.
            Для описания задачи сходимости требуется задать, какие из параметров аппаратов и потоков являются "иксами" - итерационными переменными, и описать арифметические выражения для Fi(X) - невязок / дисбалансов уравнений и требуемую точность решения.
            Организация сходимости в системе Комфорт производится на двух уровнях: на уровне схемы и на уровне расчета отдельного аппарата. В первом случае ее описывает технолог во время сборки схемы для расчета, во втором - разработчик расчетного модуля.
               Для организации сходимости на уровне схемы используются два псевдо-аппарата: ConvOpen - начало сходимости и ConvClose - конец сходимости. И тот и другой псевдо-аппараты могут быть вставлены в схему на форме "Аппараты" нажатием кнопок "Вставить до" или "Вставить после". В "начале сходимости" задаются итерационные переменные, в "конце сходимости" - расчет функций невязок. Эти действия записываются в виде команд встроенного в Комфорт интерпретатора упрощенного языка Паскаль.
организация сходимости технологических расчетов
Основные команды начала сходимости:
ArgApp(
            <номер или наименование аппарата> , <номер или наименование параметра>
             ,<нижняя граница поиска> , <верхняя граница поиска>
); //задание параметра аппарата в качестве итерационной переменной

ArgFlow(
            <номер или наименование потока> , <номер или наименование параметра>
             ,<нижняя граница поиска> , <верхняя граница поиска>
); //задание параметра потока в качестве итерационной перменной

AbsRel( <абсолютный пробный шаг> , <относительный пробный шаг> );
  //задание пробного шага для всех итерационных переменных.

Например:
            for I:=1 to 11 do
                         ArgFlow( 9 , I , 0.0 , 1e5 );
            for J in (4,6,9,10) do
                        ArgApp( J , 1, -1e5, +1e5);
Здесь итерационными переменными являются параметры с 1-ого по 11-ый потока 9 и первый параметр каждого из аппаратов с номерами 4,6,9,10.

В "конце сходимости" основной является функция вычисления невязок Disbal и функции значений параметров аппаратов и потоков:
DisBal   ( <формула невязок> , <точность> , <наименование для контрольной печати> );
GetApp ( <номер или наименование аппарата> , <номер или наименование параметра> );
GetFlow( <номер или наименование потока>    , <номер или наименование параметра> );;

Например:
for iComp:=1 to 11 do
   DisBal(  
      GetFlow(15,iComp) - GetFlow(9,iComp)
      ,1e-4
      ,'рецикл('||iComp||')'
   );
описывает вычисление невязок между параметрами с 1-ого по 11-ый для потоков 15-ого и 9-ого с требуемой точностью 1e-4. Поток 9-ый является входным, а его параметры заданы как итерационные переменные. Поток 15-ый является выходным, вместе 9-ый и 15-ый потоки описывают "разорванный рецикл", по которому ведутся итерации сходимости.

            Следует отметить, что задание номеров аппаратов и потоков в описании сходимости не всегда неудобно - при редактировании схемы эти номера могут измениться. Удобнее пользоваться наименованиями аппаратов и потоков.
Например:
            iFlow:=GetFlowIndex('Поток на входе в реактор');
            for I:=1 to 11 do
                         ArgFlow( iFlow , I , 0.0 , 1e5 );
или
            iApp:=GetAppIndex('Испаритель К3');
            ArgApp( iApp , 2 , 0.01 , 0.99 );

            Группы "начало" - "конец" сходимости могут быть вложены одна в другую.

В системе Комфорт имеется несколько методов решения систем нелинейных уравнений:
            NEWTON - метод Ньютона
            SIMPLE - метод простых итераций
            WOLFE - метод Вольфа
            RTF - решение одного уравнения методом Мюллера (квадратичной аппроксимации)
Выбор метода задается командой  Method(...); в начале или конце сходимости.

Метод Ньютона
            В системе Комфорт по умолчанию используется Method('Newton') - модифицированный метод Ньютона, который для некорректных задач ищет минимум суммы квадратов невязок. 
            В окрестности точки начального приближения X0 делаются пробные шаги по каждой из переменных:
             DXi = Abs(Xo) * RelStep + AbsStep
размер пробных шагов для всех переменных задается командой
            AbsRel( <AbsStep> , <RelStep> );
Затем аппроксимируется матрица частных производных |dFi/dXj| и решается система линейных уравнений:
            F0 + |dFi/dXj| * (X - X0) = 0
из которой находят новое приближение к корню X.
В начале сходимости описываются итерационные переменные:
- параметры аппарата
            ArgApp (
                  <имя или индекс аппарата>
                , <имя или индекс параметра>
               [, <нижняя> [,<верхняя граница поиска>] ]
             );
            Например: ArgApp(10,2); //второй параметр 10-го аппарата.
            или ArgApp('Десорбер1',2); //по имени аппарата в схеме
или
- параметры потока
            ArgFlow(
             <имя или индекс потока> 
            , <имя или индекс параметра>
            [,<нижняя> [,<верхняя граница поиска>] ]
             );
            Например: ArgFlow(20,1,0.001,1e4);
            //первый параметр двадцатого потока в диапазоне от 0.001 до 10000.
В конце сходимости невязки уравнений описываются командами
            DisBal(
              <невязка>
              ,<точность>
             [,<наименование>]
            );
   Например: for I:=1 to 10 do DisBal( GetFlow(4,I) - GetFlow(5,I) , 1e-6 );
В ряде случаев требуется ограничить шаг, который метод Ньютона пытается сделать, с помощью команды: Coef( <значение> ); Обычно, значение берут в диапазоне 0.5 - 1.0.
Команда Iteration (<MaxIter> , <PrintStep> ); служит для задания максимального числа итераций MaxIter (одна итерация = одно решение системы линейных уравнений), и шага печати PrintStep. Шаг печати = 0, печать подавлена, шаг = 10, печать на 1, 11, 21... итерациях.
 
Метод простых итераций
            Часто, особенно для сходимости по разорванным рециклам, т.е. для решения системы уравнений вида X=F(X) хорошо работает метод простых итераций - Method('SIMPLE');
В начале сходимости, также как и для метода Ньютона, задаются итерационные переменные - командами ArgFlow и/или ArgApp.
В конце сходимости используются команды
Func( <новое значение итерационной переменной> [,точность] );
Например, в начале сходимости:
            iFlow:=GetFlowIndex('П2 рецикл');
            N:=4;
            for I:=1 to N do
                        ArgFlow(iFlow,I,0.0001,10000);
В конце сходимости:
            iFlow2:=GetFlowIndex('П7 рецикл');
            N:=4;
            for I:=1 to N do begin
                        Y2:=GetFlow(iFlow2,I);
                        Func(Y2,0.001);
            end;
            Method('Simple');
            Coef(0.8);
            Iteration(1000,10);
Команда Iteration имеет тот смысл, что для метода Ньютона. Команда Coef( <Coef> ) означает, что новое приближение берется по формуле Xнов = Coef * F(X) + ( 1 - Coef ) * X .

Метод Вольфа
            Недостатком метода Ньютона является то, что, прежде чем сделать следующий шаг к корню, требуется сделать N малых пробных шагов по каждой из координат. В методе Вольфа, также, как в методе Ньютона, решение строится из линейной аппроксимации системы нелинейных уравнений.
            Пусть имеется N+1 точки Xj, в которых вычислены функции Yj=F(Xj). Решим систему линейных уравнений:
            SUM Zj * Yj = 0
            SUM Zj       = 1
и найдем новое приближение Xнов = SUM Zj * Xj. Вычислим Yнов = F(Xнов) заменим наихудшую с точки зрения нормы |Yj| пару (Xj, Yj) в симплексе (N+1) точек на (Xнов,Yнов). Такой подход позволяет существенно экономить объем вычислений и, в частности, использовать для построения симлекса точек метод простых итераций.
            Таким образом, имеется две модификации метода Вольфа:
·    решение системы нелинейных уравнений общего вида F(X)=0
·     и решение системы уравнений X=F(X) с построением симплекса точек методом простых итераций.
Формально, вторая модификация отличается от первой использованием комады Func вместо DisBal.

Модификация метода Вольфа с решением уравнений общего вида F(X)=0
В начале сходимости описываем:
            iFlow:=GetFlowIndex('П2 рецикл');
            N:=4;
            for I:=1 to N do
                        ArgFlow(iFlow,I,0.0001,10000);
В конце сходимости:
            iFlow1:=GetFlowIndex('П2 рецикл');
            iFlow2:=GetFlowIndex('П7 рецикл');
            N:=4;
            for I:=1 to N do begin
                        Y1:=GetFlow(iFlow1,I);
                        Y2:=GetFlow(iFlow2,I);
                        Disbal(Y2-Y1,0.001);
            end;
            Method('Wolfe');
            Iteration(1000,10);

Модификация метода Вольфа с методом простых итераций
В начале сходимости описываем:
            iFlow:=GetFlowIndex('П2 рецикл');
            N:=4;
            for I:=1 to N do
            ArgFlow(iFlow,I,0.0001,10000);
В конце сходимости:
            iFlow2:=GetFlowIndex('П7 рецикл');
            N:=4;    
            for I:=1 to N do begin
                        Y2:=GetFlow(iFlow2,I);
                        Func(Y2,0.001);
            end;
            Method('Wolfe');
            Coef(0.8);
            Iteration(1000,10);

Метод Мюллера
      Для поиска корня одного нелинейного уравнения можно использовать метод квадратичной аппроксимации Мюллера. Продемонстрируем его на классическом примере. Известно, что кубическое уравнение Y(X) = X**3 - 2*X - 5 = 0 на отрезке (2,3) имеет один корень 2.0945514815.
            Создадим новую ХТС. Добавим в нее один поток со значением первого параметра 2.0. Добавим в схему два "аппарата" - начало и конец сходимости.
В начале сходимости зададим
            ArgFlow(1,1,2.0,3.0);
            Method('RTF');
            AbsRel(1,0);
В конце сходимости
            X:=GetFlow(1,1);
            Y:=X*X*X-2*X-5;
            Disbal(Y,1e-10);

Находясь в поле "Команды" и нажав правую кнопку мыши
расчет материально-теплового баланса технологической схемы
можно выполнить вставку шаблонов команд для организации сходимости разными методами
  

Организация итерационных расчетов
Предыдущий Начало Следующий