Курсовая работа: Численные методы при решении задач
{ printf ("\nОшибка распределения памяти\n");
abort (); // Прервать, если не удалось
}
// Распределяем память между массивами:
// Для метода Рунге-Кутта 4 порядка
k2 = k1 + n; k3 = k2 + n; k4 = k3 + n;
// 4 пердыдущих значения функции
y0 = k4 + n; y1 = y0 + n; y2 = y1 + n; y3 = y2 + n;
// Для временного массива сбора данных
ya = y3 + n;
// Для метода Адамса
q0 = ya + n; q1 = q0 + n; q2 = q1 + n; q3 = q2 + n;
h = (tk - tn) / m; // Шаг
eps = fabs (eps); // Абсолютное значение погрешности
start: // Отсюда начинаются вычисления
xi = tn; // Начало промежутка
// Вычисляем значения функции y0...y3, т.е. y[i-3] ... y[0]
// Первое значение системы уравнений уже дано: y ...
///////////////////////////////////////////////////////////////////////
// - Метод Рунге-Кутта 4 порядка - //
///////////////////////////////////////////////////////////////////////
for (j = 0; j < n; j++) y0[j] = y[j]; // Копируем его в y0
f (y0, q0, xi); // Заполняем q0, основываясь на значениях из y0
for (j = 0; j < n; j++) q0[j] *= h; // Делаем q0
xi += h; // Следующий шаг
// ... а остальные 3 добываем с помощью метода Рунге-Кутта 4 порядка.
for (i = 0; i < 3; i++) // i - КАКОЕ ЗНАЧЕНИЕ УЖЕ ЕСТЬ
{ // А ВЫЧИСЛЯЕМ ЗНАЧЕНИЯ Y[i+1]!!!!
// Сначала нужны коэффициенты k1