Функция
rkfixed, описанная выше, использует
универсальный метод для решения
дифференциальных уравнений. Хотя метод
Рунге-Кутты, используемый этой функцией, не
всегда является самым быстродействующим, он
почти всегда приводит к искомому результату.
Однако имеются случаи, в которых можно
попробовать использовать некоторые специальные
функции Mathcad, предназначенные для решения
дифференциальных уравнений. Эти случаи
относятся к трем широким категориям задач:
- Решается не задача с начальными условиями
(задача Коши), а краевая задача (sbval и bvalfit).
- Cистема дифференциальных уравнений может иметь
некоторые специфические свойства, используя
которые, можно решить её более точно. Для решения
системы в этих случаях лучше использовать
специализированные функции Mathcad, чем функцию rkfixed.
Например, для решения жесткой системы (Stiffb, Stiffr);
для решения систем с гладкими решениями (Bulstoer)
или медленно изменяющимися решениями (Rkadapt).
- Требуется найти решение только в одной
фиксированной точке (bulstoer, rkadapt, stiffb и stiffr).
Можно также пробовать решать дифференциальное
уравнение разными методами, чтобы понять, какой
из них работает лучше всего. Иногда имеются
тонкие различия между дифференциальными
уравнениями, которые делают один метод решения
предпочтительнее другого.
Следующие разделы описывают использование
различных методов решения дифференциального
уравнения и те случаи, в которых они могут быть
полезны.
Гладкие системы
Когда известно, что решение является гладкой
функцией, лучше использовать функцию Bulstoer
вместо функции rkfixed. Функция Bulstoer
использует метод Bulirsch-Stoer в отличие от метода
Рунге-Кутты, используемого функцией rkfixed. В
этом случае найденное приближенное решение
будет немного более точным, чем то, которое
возвратила бы функция rkfixed.
Список аргументов и матрица, возвращаемая
функцией Bulstoer, те же, что и для функции rkfixed.
Bulstoer ( y, x1, x2, npoints, D)
y = |
Вектор начальных условий
размерности n, где n есть порядок
дифференциального уравнения или число уравнений
в системе (если решается система уравнений). |
x1, x2 = |
Граничные точки интервала, на
котором ищется решение дифференциального
уравнения. Начальные условия, заданные в векторе y,
— это значение решения в точке x1. |
npoints = |
Число точек (не считая начальной
точки), в которых ищется приближенное решение.
При помощи этого аргумента определяется число
строк (1 + npoints) в матрице, возвращаемой
функцией Bulstoer. |
D (x, y) = |
Функция, возвращающая значение в
виде вектора из n элементов, содержащих
первые производные неизвестных функций. |
Медленно изменяющиеся решения
Задавшись фиксированным числом точек, можно
аппроксимировать функцию более точно, если
вычислять ее значения в точках, расположенных
следующим образом: достаточно часто на тех
интервалах, где функция меняется быстро, и не
очень часто — где функция изменяется более
медленно. Если известно, что искомое решение
достаточно гладкое, может оказаться лучше
использовать функцию Rkadapt для поиска
приближенного решения. В отличие от функции rkfixed, которая
ищет приближенное решение с постоянным шагом,
функция Rkadapt проверяет, как быстро изменяется
приближенное решение, и адаптирует
соответственно размер шага. Этот адаптивный
контроль величины шага дает возможность функции Rkadapt
вычислять значение приближенного решения на
более мелкой сетке в тех областях, где оно
меняется быстро, и на более крупной — в тех
областях, где оно меняется медленно. Это
позволяет и повысить точность, и сократить время,
требуемое для решения уравнения.
Обратите внимание, что, хотя функция Rkadapt при
решении дифференциального уравнения использует
во внутренних расчетах переменный шаг,
возвращает приближенное решение она на
равномерной сетке (в равноотстоящих точках).
Функция Rkadapt имеет те же самые аргументы,
что и функция rkfixed. Матрица с приближенным
решением, возвращаемая функцией Rkadapt,идентична
по виду матрице, возвращаемой функцией rkfixed.
Rkadapt ( y, x1, x2, npoints, D)
y = |
Вектор начальных условий
размерности n, где n — порядок
дифференциального уравнения или число уравнений
в системе (если решается система уравнений). |
x1, x2 = |
Граничные точки интервала, на
котором ищется решение дифференциальных
уравнений. Начальные условия, заданные в векторе y,
— это значение решения в точке x1. |
npoints = |
Число точек (не считая начальной
точки), в которых ищется приближенное решение.
При помощи этого аргумента определяется число
строк (1 + npoints) в матрице, возвращаемой
функцией Rkadapt. |
D (x, y) = |
Функция, возвращающая значение в
виде вектора из n элементов, содержащих
первые производные неизвестных функций. |
Жесткие системы
Система дифференциальных уравнений,
записанная в виде:
y = Ax,
является жесткой системой, если матрица A
почти вырождена. В этом случае решение,
возвращаемое функцией rkfixed, может сильно
осциллировать или быть неустойчивым. При решении
жесткой системы необходимо использовать одну из
двух функций, специально разработанных для
решения жестких систем дифференциальных
уравнений: Stiffb и Stiffr. Они используют
соответственно Bulirsch-Stoer метод и Rosenbrock метод для
решения жестких систем.
Вид матрицы, возвращаемой этими функциями,
совпадает с возвращаемым функцией rkfixed.
Однако Stiffb и Stiffr требуют задания
дополнительных аргументов, которые описаны в
следующем разделе:
Stiffb ( y, x1, x2, npoints, D, J)
Stiffr ( y, x1, x2, npoints, D, J)
y = |
Вектор начальных условий
размерности n, где n — порядок ОДУ или
число уравнений в системе ОДУ, если решается
система. |
x1, x2 = |
Граничные точки интервала, на
котором ищется решение дифференциальных
уравнений. Начальные условия, заданные в векторе y,
— это значение решения в точке x1. |
npoints = |
Число точек (не считая
начальной), в которых ищется приближенное
решение. При помощи этого аргумента определяется
число строк (1 + npoints) в матрице, возвращаемой
функциями Stiffb или Stiffr. |
D (x, y) = |
n-мерный вектор, который
содержит первые производные неизвестных
функций. |
J (x, y) = |
Функция, которая возвращает
матрицу размером n x (n+1). Первый столбец содержит
производные D/x. Остальные строки и столбцы
представляют собой матрицу Якоби ( D/yk)
системы ОДУ. Например, если: , то |
Нахождение приближенного решения
только в конечной точке
Функции для численного решения
дифференциальных уравнений, описанные выше,
искали решение y(x) в равноотстоящих
точках на отрезке [x1, x2]. Однако часто
возникает задача, когда необходимо найти
приближенное решение только в конечной точке
интервала y(x). Хотя функции, описанные
выше, будут давать значение y(x2), при этом
они будут делать много ненужной дополнительной
работы, возвращая промежуточные значения y(x).
Если нужно только значение y(x2),
используйте функции, перечисленные ниже. Каждая
функция соответствует одной из функций,
описанной в предыдущих разделах, и обладает
аналогичными свойствами.
bulstoer ( y, x1, x2, acc, D, kmax, save)
rkadapt ( y, x1, x2, acc, D, kmax, save)
stiffb ( y, x1, x2, acc, D, J, kmax, save)
stiffr ( y, x1, x2, acc, D, J, kmax, save)
y = |
Вектор начальных условий
размерности n, где n — порядок
дифференциального уравнения или число уравнений
в системе (если решается система уравнений). |
x1, x2 = |
Граничные точки интервала, на
котором ищется решение дифференциальных
уравнений. Начальные условия, заданные в векторе y,
— это значения решения в точке x1. |
acc = |
Параметр, контролирующий
точность решения. Малое значение acc вынуждает
алгоритм брать меньшие шаги вдоль траектории,
что увеличивает точность решения. Значения acc,
близкие к 0.001, приводят к хорошей точности
решения. |
D (x, y) = |
Функция, возвращающая значение в
виде вектора из n элементов, содержащих
первые производные неизвестных функций. |
J (x, y) = |
Функция, возвращающая матрицу
размером . Первый столбец содержит производныеD/x.
Остальные строки и столбцы представляют собой
матрицу Якоби ( D/yk) системы дифференциальных
уравнений. |
kmax = |
Максимальное число
промежуточных точек, в которых ищется
приближенное решение. Значение kmax содержит
ограничение сверху на число строк матрицы,
возвращаемой этими функциями. |
save= |
Минимально допустимый интервал
между точками, в которых ищется приближенное
решение. Он определяет нижнюю границу различия
между любыми двумя числами в первом столбце
матрицы, возвращаемой функцией. |
|