Участник:Филимонова Юлия/Решение начальной задачи Коши для системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4-го порядка
Решение задачи Коши для системы ОДУ методом Рунге-Кутта | |
Последовательный алгоритм | |
Последовательная сложность | [math]4 m n[/math] |
Объём входных данных | [math]n + 3[/math] |
Объём выходных данных | [math]m(n + 1)[/math] |
Параллельный алгоритм | |
Высота ярусно-параллельной формы | ? |
Ширина ярусно-параллельной формы | ? |
Основные авторы описания: Филимонова Юлия
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Методы Рунге-Кутты (распространено неправильное название Методы Рунге-Кутта) — важное семейство численных алгоритмов решения обыкновенных дифференциальных уравнений и их систем. Данные итеративные методы явного и неявного приближённого вычисления были разработаны около 1900 года немецкими математиками К. Рунге и М. В. Куттой.
Формально, методом Рунге-Кутты является модифицированный и исправленный метод Эйлера, они представляют собой схемы второго порядка точности. Существуют стандартные схемы третьего порядка, не получившие широкого распространения. Наиболее часто используется и реализована в различных математических пакетах (Maple, MathCAD, Maxima) стандартная схема четвёртого порядка. Классический метод Рунге-Кутты четвёртого порядка столь широко распространён, что его часто называют просто методом Рунге-Кутты, опуская порядок.
1.2 Математическое описание алгоритма
Рассмотрим задачу Коши для системы обыкновенных дифференциальных уравнений размерности [math]n[/math]
[math]\dot{x} = f(t, x),\ t_0 \leqslant t \leqslant t_1,\ x(t_0) = x_0.[/math]
Здесь [math]x(t), x_0 \in \mathbb{R}^n,\ t, t_0, t_1 \in \mathbb{R}, f: \mathbb{R} \rightarrow \mathbb{R}^n[/math].
Введем равномерную сетку
[math]t_i = t_0 + ih,\ i = \overline{1, n},\ h = \frac{t_1 - t_0}{m},[/math]
[math]x(t_i) = x_i.[/math]
Тогда приближенное значение в последующих точках вычисляется по итерационной формуле
[math]x_{i+1} = x_i + \frac{h}{6} (K_1 + 2 K_2 + 2 K_3 + K_4).[/math]
Вычисление нового значения происходит в четыре стадии:
[math]K_1 = f (t_i, x_i),[/math]
[math]K_2 = f (t_i + \frac{h}{2}, x_i + \frac{h}{2} K_1),[/math]
[math]K_3 = f (t_i + \frac{h}{2}, x_i + \frac{h}{2} K_2),[/math]
[math]K_4 = f (t_i + h, x_i + h K_3).[/math]
1.3 Вычислительное ядро алгоритма
В описанной выше вычислительной схеме наиболее трудоемкой является операция обращения к функции [math]f[/math] при вычислении коэффициентов [math]K_i[/math], эта операция является вычислительным ядром.
1.4 Макроструктура алгоритма
Макроструктура алгоритма представлена одним шагом итерационного процесса, описанного в пункте 1.2. Основной макрооперацией алгоритма является операция обращения к функции [math]f[/math], и основное внимание будет уделено распараллеливанию этой операции.
1.5 Схема реализации последовательного алгоритма
Приведем здесь псевдокод
начало;
ввод начальных параметров ([math]x_0, t_0, t_1, m[/math]);
цикл по числу узлов сетки: [math]i = \overline{1,m-1}[/math]
цикл по числу стадий: [math]j = \overline{1,4}[/math]
цикл по числу компонент вектора [math]x:\ k = \overline{1,n}[/math]
вычисление коэффициентов [math]K_{j, k}^{i}[/math];
конец цикла по [math]k[/math];
конец цикла по [math]j[/math];
цикл по числу компонент вектора [math]x:\ k = \overline{1,n}[/math]
вычисление [math]y_{j}^{i+1}[/math];
конец цикла по [math]k[/math];
цикл по числу компонент вектора [math]x:\ k = \overline{1,n}[/math]
сохранение [math]y_{j}^{i} = y_{j}^{i+1}[/math];
конец цикла по [math]k[/math];
вывод [math]y^{i+1}[/math];
конец цикла по [math]n[/math];
конец;
1.6 Последовательная сложность алгоритма
В данном алгоритме производится четыре операции обращения к функции [math]f[/math] (порядка [math]n m[/math] арифметических операций) и шестнадцать операций сложения векторов и умножения вектора на число (порядка [math]n[/math] арифметических операций). Поскольку операция обращения к функции является более сложной, то сложность последовательного алгоритма можно считать равной [math]4 n m[/math].
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
Последовательная схема алгоритма дает основание для организации параллельных вычислений с помощью декомпозиции. Пусть доступно [math]p[/math] процессоров (для определенности будем считать, что размерность системы [math]n[/math] кратна количество процессоров [math]p[/math]: [math]n = qp[/math]). На каждый из процессоров распределяется и вычисляется последовательно [math]q[/math] компонент векторов коэффициентов. Далее расчеты проводятся следующим образом:
1. На каждом процессоре вычисляется q соответствующих компонент вектора [math][K_1][/math] по формуле [math][K_1] = [f(t_i, x_i)][/math]. Проводится сборка вектора [math][K_1][/math] целиком на каждом процессоре.
2-4. Аналогичным образом проводятся вычисления и сборка векторов [math][K_2], [K_3], [K_4][/math].
5. На каждом процессоре вычисляется q соответствующих компонент вектора [math][x_{i+1}][/math] по формуле [math][x_{i+1}] = [x_i] + \frac{h}{6} ([K_1] + 2 [K_2] + 2 [K_3] + [K_4])[/math]. Проводится сборка вектора [math][x_{i+1}][/math] целиком на каждом процессоре. Если вычисления не закончены, то сохраняется [math][x_{i}] = [x_{i+1}][/math], осуществляется переход на 1.
Алгоритм производит четыре обращения к функции [math]f[/math], шестнадцать операций сложения векторов и умножения вектора на число и четыре операции глобальной сборки векторов.
1.9 Входные и выходные данные алгоритма
На вход алгоритма подаются следующие данные:
- вектор начальных значений [math]x_0[/math] размерности [math]n[/math];
- границы временного интервала [math]t_0, t_1[/math];
- частота дискретизации [math]m[/math].
Общий размер входных данных [math]n + 3[/math].
На выходе получаются следующие данные:
- вектор времени [math]t[/math] размерности [math]m[/math];
- матрица значений [math]x[/math] ([math]m[/math] векторов длины [math]n[/math]) размерности [math]m n[/math].
Общий размер выходных данных [math]m + m n[/math].