Spec-Zone.ru › Octave 9

24.2 Дифференциально-алгебраические уравнения

Функцию daspk можно использовать для решения ДАУ вида

0 = f (x-dot, x, t),    x(t=0) = x_0, x-dot(t=0) = x-dot_0

где x-dot — производная x. Уравнение решается с помощью решателя ДАУ Петцольда DASPK.

: [x, xdot, istate, msg] = daspk (fcn, x_0, xdot_0, t, t_crit)

Решить систему дифференциально-алгебраических уравнений.

daspk решает систему уравнений

0 = f (x, xdot, t)

где

x(t_0) = x_0, xdot(t_0) = xdot_0

Решение возвращается в матрицах x и xdot, причём каждой строке результирующих матриц соответствует один из элементов вектора t. Первый элемент t должен быть равен t_0 и соответствовать начальному состоянию системы x_0 и его производной xdot_0, так что первая строка выходной матрицы x равна x_0, а первая строка выходной матрицы xdot равна xdot_0.

Первый аргумент, fcn, — это строка, встроенная функция или дескриптор функции, задающий функцию f, вызываемую для вычисления вектора невязок системы уравнений. Он должен иметь вид

res = f (x, xdot, t)

где x, xdot и res — векторы, а t — скаляр.

Если fcn — массив строк из двух элементов или массив ячеек из двух строк, встроенных функций или дескрипторов функций, первый элемент задаёт описанную выше функцию f, а второй — функцию для вычисления модифицированной матрицы Якоби

df       df
jac = -- + c ------
      dx     d xdot

Функция модифицированной матрицы Якоби должна иметь вид

jac = j (x, xdot, t, c)

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

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

Пятый аргумент является необязательным и может использоваться для задания набора времён, за пределы которых решатель ДАУ не должен выполнять интегрирование. Это полезно для предотвращения затруднений, связанных с особенностями и точками разрыва производной.

После успешного вычисления значение istate будет больше нуля (как и в версии DASPK для Fortran).

Если вычисление завершилось неудачно, значение istate будет меньше нуля, а msg будет содержать дополнительные сведения.

Для задания необязательных параметров daspk можно использовать функцию daspk_options.

См. также: dassl.

: daspk_options ()
: val = daspk_options (opt)
: daspk_options (opt, val)

Запросить или задать параметры функции daspk.

При вызове без аргументов отображаются имена всех доступных параметров и их текущие значения.

При передаче одного аргумента возвращается значение параметра opt.

При вызове с двумя аргументами daspk_options задаёт параметру opt значение val.

Доступны следующие параметры:

"absolute tolerance"

Абсолютный допуск. Может быть вектором или скаляром. Если задан вектор, его размерность должна совпадать с размерностью вектора состояния, а относительный допуск также должен быть вектором той же длины.

"relative tolerance"

Относительный допуск. Может быть вектором или скаляром. Если задан вектор, его размерность должна совпадать с размерностью вектора состояния, а абсолютный допуск также должен быть вектором той же длины.

Локальная проверка погрешности, выполняемая на каждом шаге интегрирования, имеет вид

abs (local error in x(i))
       <= rtol(i) * abs (Y(i)) + atol(i)
"compute consistent initial condition"

Обозначив дифференциальные переменные в векторе состояния через «Y_d», а алгебраические переменные через «Y_a», ddaspk может решать одну из двух задач инициализации:

  1. По заданному Y_d вычислить Y_a и Y’_d
  2. По заданному Y’ вычислить Y.

В обоих случаях начальные значения заданных компонент передаются на вход, а начальные приближения неизвестных компонент также необходимо передать на вход. Установите для этого параметра значение 1, чтобы решить первую задачу, или 2, чтобы решить вторую (значение по умолчанию — 0, поэтому необходимо задать согласованный набор начальных условий).

Если для этого параметра задано ненулевое значение, необходимо также установить параметр "algebraic variables", указав, какие переменные задачи являются алгебраическими.

"use initial condition heuristics"

Задайте ненулевое значение, чтобы использовать описанные ниже эвристические параметры начальных условий.

"initial condition heuristics"

Вектор следующих параметров, управляющих вычислением начальных условий.

MXNIT

Максимальное число итераций Ньютона (по умолчанию — 5).

MXNJ

Максимальное число вычислений матрицы Якоби (по умолчанию — 6).

MXNH

Максимальное число пробных значений искусственного параметра шага, если параметру "compute consistent initial condition" задано значение 1 (по умолчанию — 5).

Обратите внимание, что максимально допустимое общее число итераций Ньютона равно MXNIT*MXNJ*MXNH, если параметру "compute consistent initial condition" задано значение 1, и MXNIT*MXNJ, если ему задано значение 2.

LSOFF

Задайте ненулевое значение, чтобы отключить алгоритм линейного поиска (по умолчанию — 0).

STPTOL

Минимальный масштабированный шаг в алгоритме линейного поиска (по умолчанию — eps^(2/3)).

EPINIT

Коэффициент допуска колебаний в проверке сходимости итераций Ньютона. Проверка применяется к вектору невязок, предварительно умноженному на приближённую матрицу Якоби. Для сходимости среднеквадратичная взвешенная норма этого вектора (масштабированного весами погрешности) должна быть меньше EPINIT*EPCON, где EPCON = 0.33 — аналогичная тестовая константа, используемая на временных шагах. Значение по умолчанию — EPINIT = 0.01.

"print initial condition info"

Задайте ненулевое значение, чтобы отображать подробные сведения о вычислении начальных условий (по умолчанию — 0).

"exclude algebraic variables from error test"

Задайте ненулевое значение, чтобы исключить алгебраические переменные из проверки погрешности. Необходимо также установить параметр "algebraic variables", указав, какие переменные задачи являются алгебраическими (по умолчанию — 0).

"algebraic variables"

Вектор той же длины, что и вектор состояния. Ненулевой элемент указывает, что соответствующий элемент вектора состояния является алгебраической переменной (то есть её производная явно не входит в систему уравнений).

Этот параметр требуется для параметров "compute consistent initial condition" и "exclude algebraic variables from error test".

"enforce inequality constraints"

Задайте одно из следующих значений, чтобы обеспечить соблюдение ограничений-неравенств, указанных параметром "inequality constraint types" (по умолчанию — 0).

  1. Проверять ограничения только при вычислении начальных условий.
  2. Проверять ограничения во время интегрирования.
  3. Использовать оба варианта 1 и 2.
"inequality constraint types"

Вектор той же длины, что и вектор состояния, задающий тип ограничения-неравенства. Каждый элемент вектора соответствует элементу состояния, и ему следует присвоить один из следующих кодов:

-2

Меньше нуля.

-1

Меньше или равно нулю.

0

Без ограничений.

1

Больше или равно нулю.

2

Больше нуля.

Этот параметр действует только в том случае, если параметр "enforce inequality constraints" ненулевой.

"initial step size"

На первом шаге дифференциально-алгебраических задач иногда возникают серьёзные трудности с масштабированием. Если вам хорошо известны особенности масштабирования задачи, можно облегчить её решение, задав начальный размер шага (по умолчанию вычисляется автоматически).

"maximum order"

Ограничить максимальный порядок метода решения. Значение этого параметра должно быть от 1 до 5 включительно (по умолчанию — 5).

"maximum step size"

Ограничение максимального размера шага позволяет избежать пропуска очень больших областей (по умолчанию не задано).

В Octave также включены DASSL, более ранняя версия DASPK, и DASRT, который можно использовать для решения ДАУ с ограничениями (условиями остановки).

: [x, xdot, istate, msg] = dassl (fcn, x_0, xdot_0, t, t_crit)

Решить систему дифференциально-алгебраических уравнений.

dassl решает систему уравнений

0 = f (x, xdot, t)

где

x(t_0) = x_0, xdot(t_0) = xdot_0

Решение возвращается в матрицах x и xdot, причём каждой строке результирующих матриц соответствует один из элементов вектора t. Первый элемент t должен быть равен t_0 и соответствовать начальному состоянию системы x_0 и его производной xdot_0, так что первая строка выходной матрицы x равна x_0, а первая строка выходной матрицы xdot равна xdot_0.

Первый аргумент, fcn, — это строка, встроенная функция или дескриптор функции, задающий функцию f, вызываемую для вычисления вектора невязок системы уравнений. Он должен иметь вид

res = f (x, xdot, t)

где x, xdot и res — векторы, а t — скаляр.

Если fcn — массив строк из двух элементов или массив ячеек из двух строк, встроенных функций или дескрипторов функций, первый элемент задаёт описанную выше функцию f, а второй — функцию для вычисления модифицированной матрицы Якоби

df       df
jac = -- + c ------
      dx     d xdot

Функция модифицированной матрицы Якоби должна иметь вид

jac = j (x, xdot, t, c)

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

Начальные состояния и производные не обязательно должны быть согласованными. Однако на практике DASSL не очень хорошо справляется с поиском согласованного набора, поэтому лучше убедиться, что при начальных значениях функция принимает значение ноль.

Пятый аргумент является необязательным и может использоваться для задания набора времён, за пределы которых решатель ДАУ не должен выполнять интегрирование. Это полезно для предотвращения затруднений, связанных с особенностями и точками разрыва производной.

После успешного вычисления значение istate будет больше нуля (как и в версии DASSL для Fortran).

Если вычисление завершилось неудачно, значение istate будет меньше нуля, а msg будет содержать дополнительные сведения.

Для задания необязательных параметров dassl можно использовать функцию dassl_options.

См. также: daspk, dasrt, lsode.

: dassl_options ()
: val = dassl_options (opt)
: dassl_options (opt, val)

Запросить или задать параметры функции dassl.

При вызове без аргументов отображаются имена всех доступных параметров и их текущие значения.

При передаче одного аргумента возвращается значение параметра opt.

При вызове с двумя аргументами dassl_options задаёт параметру opt значение val.

Доступны следующие параметры:

"absolute tolerance"

Абсолютный допуск. Может быть вектором или скаляром. Если задан вектор, его размерность должна совпадать с размерностью вектора состояния, а относительный допуск также должен быть вектором той же длины.

"relative tolerance"

Относительный допуск. Может быть вектором или скаляром. Если задан вектор, его размерность должна совпадать с размерностью вектора состояния, а абсолютный допуск также должен быть вектором той же длины.

Локальная проверка погрешности, выполняемая на каждом шаге интегрирования, имеет вид

abs (local error in x(i))
       <= rtol(i) * abs (Y(i)) + atol(i)
"compute consistent initial condition"

Если значение ненулевое, dassl попытается вычислить согласованный набор начальных условий. Обычно этот способ ненадёжен, поэтому лучше задать согласованный набор и оставить для этого параметра значение 0.

"enforce nonnegativity constraints"

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

"initial step size"

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

"maximum order"

Ограничить максимальный порядок метода решения. Значение этого параметра должно быть от 1 до 5 включительно.

"maximum step size"

Ограничение максимального размера шага позволяет избежать пропуска очень больших областей (по умолчанию не задано).

"step limit"

Максимальное число шагов интегрирования, выполняемых за один вызов базового кода Fortran.

: [x, xdot, t_out, istat, msg] = dasrt (fcn, g, x_0, xdot_0, t)
: … = dasrt (fcn, g, x_0, xdot_0, t, t_crit)
: … = dasrt (fcn, x_0, xdot_0, t)
: … = dasrt (fcn, x_0, xdot_0, t, t_crit)

Решить систему дифференциально-алгебраических уравнений.

dasrt решает систему уравнений

0 = f (x, xdot, t)

где

x(t_0) = x_0, xdot(t_0) = xdot_0

с функциональными условиями остановки (поиск корней).

Решение возвращается в матрицах x и xdot, причём каждой строке результирующих матриц соответствует один из элементов вектора t_out. Первый элемент t должен быть равен t_0 и соответствовать начальному состоянию системы x_0 и его производной xdot_0, так что первая строка выходной матрицы x равна x_0, а первая строка выходной матрицы xdot равна xdot_0.

Вектор t задаёт верхнюю границу длительности интегрирования. Если условие остановки выполнено, вектор t_out будет короче вектора t, а его последний элемент будет соответствовать моменту выполнения условия остановки и может не совпадать ни с одним элементом вектора t.

Первый аргумент, fcn, — это строка, встроенная функция или дескриптор функции, задающий функцию f, вызываемую для вычисления вектора невязок системы уравнений. Он должен иметь вид

res = f (x, xdot, t)

где x, xdot и res — векторы, а t — скаляр.

Если fcn — массив строк из двух элементов или массив ячеек из двух строк, встроенных функций или дескрипторов функций, первый элемент задаёт описанную выше функцию f, а второй — функцию для вычисления модифицированной матрицы Якоби

df       df
jac = -- + c ------
      dx     d xdot

Функция модифицированной матрицы Якоби должна иметь вид

jac = j (x, xdot, t, c)

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

g_out = g (x, t)

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

Если имя функции ограничений не задано, dasrt решает ту же задачу, что и daspk или dassl.

Обратите внимание: из-за численных ошибок в функциях ограничений, вызванных округлением и погрешностью интегрирования, DASRT может возвращать ложные корни или один и тот же корень для двух или более близких значений T. Если предполагается наличие таких ложных корней, пользователю следует рассмотреть возможность уменьшения допусков погрешности или повышения точности вычисления функций ограничений.

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

Третий и четвёртый аргументы dasrt задают начальные условия состояний и их производных, а четвёртый аргумент задаёт вектор выходных времён, для которых требуется решение, включая время, соответствующее начальному условию.

Начальные состояния и производные не обязательно должны быть согласованными. Однако на практике DASSL не очень хорошо справляется с поиском согласованного набора, поэтому лучше убедиться, что при начальных значениях функция принимает значение ноль.

Шестой аргумент является необязательным и может использоваться для задания набора времён, за пределы которых решатель ДАУ не должен выполнять интегрирование. Это полезно для предотвращения затруднений, связанных с особенностями и точками разрыва производной.

После успешного вычисления значение istate будет больше нуля (как и в версии DASSL для Fortran).

Если вычисление завершилось неудачно, значение istate будет меньше нуля, а msg будет содержать дополнительные сведения.

Для задания необязательных параметров dasrt можно использовать функцию dasrt_options.

См. также: dasrt_options, daspk, dasrt, lsode.

: dasrt_options ()
: val = dasrt_options (opt)
: dasrt_options (opt, val)

Запросить или задать параметры функции dasrt.

При вызове без аргументов отображаются имена всех доступных параметров и их текущие значения.

При передаче одного аргумента возвращается значение параметра opt.

При вызове с двумя аргументами dasrt_options задаёт параметру opt значение val.

Доступны следующие параметры:

"absolute tolerance"

Абсолютный допуск. Может быть вектором или скаляром. Если задан вектор, его размерность должна совпадать с размерностью вектора состояния, а относительный допуск также должен быть вектором той же длины.

"relative tolerance"

Относительный допуск. Может быть вектором или скаляром. Если задан вектор, его размерность должна совпадать с размерностью вектора состояния, а абсолютный допуск также должен быть вектором той же длины.

Локальная проверка погрешности, выполняемая на каждом шаге интегрирования, имеет вид

abs (local error in x(i)) <= ...
      rtol(i) * abs (Y(i)) + atol(i)
"initial step size"

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

"maximum order"

Ограничить максимальный порядок метода решения. Значение этого параметра должно быть от 1 до 5 включительно.

"maximum step size"

Ограничение максимального размера шага позволяет избежать пропуска очень больших областей.

"step limit"

Максимальное число шагов интегрирования, выполняемых за один вызов базового кода Fortran.

Дополнительные сведения о реализации DASSL см. в книге K. E. Brenan и др., Численное решение задач Коши для дифференциально-алгебраических уравнений, North-Holland (1989), DOI: https://doi.org/10.1137/1.9781611971224.

© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Differential_002dAlgebraic-Equations.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API