Робертсон [1] создал систему автокаталитических химических реакций протестировать и сравнить числовые решатели для жестких систем. Реакции, константы уровня (k), и уровни реакции (V) для системы даны можно следующим образом:
Поскольку существуют значительные различия между уровнями реакции, числовые решатели рассматривают дифференциальные уравнения как жесткие. Для жестких дифференциальных уравнений некоторые числовые решатели не могут сходиться на решении, если размер шага не является чрезвычайно небольшим. Если размер шага является чрезвычайно небольшим, время симуляции может быть неприемлемо длинным. В этом случае необходимо использовать числовой решатель, разработанный, чтобы решить жесткие уравнения.
Система обыкновенных дифференциальных уравнений (ODE) имеет следующие характеристики:
Все уравнения являются обыкновенными дифференциальными уравнениями.
Каждое уравнение является производной зависимой переменной относительно одной независимой переменной, обычно время.
Количество уравнений равно количеству зависимых переменных в системе.
Используя уровни реакции, можно создать набор дифференциальных уравнений, описывающих уровень изменения для каждой химической разновидности. С тех пор существует три разновидности, в математической модели существует три дифференциальных уравнения.
Начальные условия: , и .
Создайте модель или откройте образцовый ex_hb1ode
.
Добавьте три блока Интегратора к своей модели. Маркируйте входные параметры A'
, B'
, и C'
, и выходными параметрами A
, B
и C
соответственно.
Добавьте Сумму, продукт и блоки Усиления, чтобы решить каждую дифференциальную переменную. Например, чтобы смоделировать C'
сигнала,
Добавьте блок Math Function и соедините входной параметр, чтобы сигнализировать о B
. Установите Параметр функции на square
.
Соедините вывод от блока Math Function до блока Gain. Установите параметр Усиления на 3e7
.
Продолжите добавлять остающиеся условия дифференциального уравнения к своей модели.
Смоделируйте начальное условие A
путем установки Начального параметра условия для блока A
Integrator к 1
.
Добавьте блоки, чтобы сохранить сигналы A
, B
и C
к переменной MATLAB yout
.
Создайте скрипт, который использует команду sim
, чтобы моделировать вашу модель. Этот скрипт сохраняет результаты симуляции в переменной MATLAB yout
. Поскольку моделирование имеет долговременный интервал, и B
первоначально изменяется очень быстро, графическое изображение значений на логарифмическом масштабе помогает визуально сравнить результаты. Кроме того, поскольку значение B
является маленьким относительно значений A
и C
, умножьте B
на прежде, чем построить график значений.
Введите следующие операторы в скрипт MATLAB®. Если вы создали свою собственную модель, замена ex_hblode
с именем вашей модели.
sim('ex_hb1ode') yout(:,2) = 1e4*yout(:,2); figure; semilogx(tout,yout); xlabel('Time'); ylabel('Concentration'); title('Robertson Reactions Modeled with ODEs')
Из меню Editor Simulink® выберите Simulation> Model Configuration Parameters:
— В панели Решателя, набор Время остановки к 4e5
и Решатель к ode15s (stiff/NDF)
.
— В панели Импорта Данных установите флажки Time и Output.
Запустите скрипт. Заметьте, что весь A
преобразован в C
.
Система дифференциальных алгебраических уравнений (DAE) имеет следующие характеристики:
Это содержит оба обыкновенных дифференциальных уравнения и алгебраические уравнения. Алгебраические уравнения не имеют никаких производных.
Только некоторые уравнения являются дифференциальными уравнениями, задающими производные некоторых зависимых переменных. Другие зависимые переменные заданы с алгебраическими уравнениями.
Количество уравнений равно количеству зависимых переменных в системе.
Некоторые системы содержат ограничения из-за законов сохранения, таких как сохранение массы и энергии. Если вы устанавливаете начальные концентрации , и , общая концентрация трех разновидностей всегда равна начиная с . Можно заменить дифференциальное уравнение для C′with следующее алгебраическое уравнение, чтобы создать набор дифференциальных алгебраических уравнений (ДАУ).
Дифференциальные переменные A
и B
исключительно определяют алгебраический переменный C
.
Начальные условия: A=1and B=0.
Внесите эти изменения в свою модель или в образцовый ex_hb1ode
или откройте образцовый ex_hb1dae
.
Удалите блок Integrator для вычисления C
.
Добавьте блок Sum и установите Список параметра знаков к + –.
Соедините сигналы A
и B
к минус входные параметры блока Sum.
Смоделируйте начальную концентрацию A
с блоком Constant, соединенным с плюс входной параметр блока Sum. Установите параметр Постоянного значения to 1
.
Соедините вывод блока Sum к разветвленному трубопроводу, соединенному с продуктом, и блокируется.
Создайте скрипт, который использует команду sim
, чтобы моделировать вашу модель.
Введите следующие операторы в скрипт MATLAB. Если вы создали свою собственную модель, замена ex_hbldae
с именем вашей модели.
sim('ex_hb1dae') yout(:,2) = 1e4*yout(:,2); figure; semilogx(tout,yout); xlabel('Time'); ylabel('Concentration'); title('Robertson Reactions Modeled with DAEs')
Из меню Simulink Editor выберите Simulation> Model Configuration Parameters:
— В панели Решателя, набор Время остановки к 4e5
и Решатель к ode15s (stiff/NDF)
.
— В панели Импорта Данных установите флажки Time и Output.
Запустите скрипт. Результаты симуляции, когда вы используете алгебраическое уравнение, эквивалентны для образцового моделирования с помощью только дифференциальные уравнения.
Некоторые системы содержат ограничения из-за законов сохранения, таких как сохранение массы и энергии. Если вы устанавливаете начальные концентрации , и , общая концентрация трех разновидностей всегда равна начиная с .
Можно заменить дифференциальное уравнение для C′with, алгебраическое уравнение смоделировало использование блока Algebraic Constraint и блока Sum. Блок Algebraic Constraint ограничивает свой входной сигнал F (z) обнулять и выводит алгебраическое состояние z. Другими словами, блок вывод является значением, должен был произвести нуль во входном параметре. Используйте следующее алгебраическое уравнение для входного параметра к блоку.
Дифференциальные переменные A
и B
исключительно определяют алгебраический переменный C
.
Начальные условия: , и .
Внесите эти изменения в свою модель или в образцовый ex_hb1ode
или откройте образцовый ex_hb1dae_acb
.
Удалите блок Integrator для вычисления C
.
Добавьте блок Algebraic Constraint. Установите параметр Исходного предположения на 1e-3
.
Добавьте блок Sum. Установите Список параметра знаков к – +++.
Соедините сигналы A
и B
к плюс входные параметры блока Sum.
Смоделируйте начальную концентрацию A
с блоком Constant, соединенным с минус входной параметр блока Sum. Установите параметр Постоянного значения на 1
.
Соедините вывод блока Algebraic Constraint к разветвленному трубопроводу, соединенному с продуктом и входными параметрами блока Out.
Создайте ответвление из вывода блока Algebraic Constraint к финалу плюс входной параметр блока Sum.
Создайте скрипт, который использует команду sim
, чтобы моделировать вашу модель.
Введите следующие операторы в скрипт MATLAB. Если вы создали свою собственную модель, замена ex_hbl_acb
с именем вашей модели.
sim('ex_hb1dae_acb') yout(:,2) = 1e4*yout(:,2); figure; semilogx(tout,yout); xlabel('Time'); ylabel('Concentration'); title('Robertson Reactions Modeled with DAEs and Algebraic Constraint Block')
Из меню Simulink Editor выберите Simulation> Model Configuration Parameters:
— В панели Решателя, набор Время остановки к 4e5
и Решатель к ode15s (stiff/NDF)
.
— В панели Импорта Данных установите флажки Time и Output.
Запустите скрипт. Результаты симуляции, когда вы используете блок Algebraic Constraint, эквивалентны для образцового моделирования с помощью только дифференциальные уравнения.
Используя Algebraic Constraint блок создает алгебраический цикл в модели, Если вы устанавливаете Алгебраический параметр Цикла на Моделирование warning (
> Образцовые Параметры конфигурации> Диагностика> Алгебраический Цикл), следующие индикаторы сообщения в Диагностическом Средстве просмотра во время моделирования.
Для этой модели алгебраический решатель цикла смог найти решение для моделирования, но алгебраические циклы не всегда имеют решение, и они не поддержаны для генерации кода. Для получения дополнительной информации об алгебраических циклах в моделях Simulink и как удалить их, смотрите Алгебраические Циклы.
[1] Робертсон, H. H. “Решение набора уравнений уровня реакции”. Числовой Анализ: Введение (редактор Дж. Уолша). Лондон, Нажатие England:Academic, 1966, стр 178–182.