Курсовая работа: Численные методы при решении задач

// Продолжить интегрирование?

if (xi < tk) goto again; // Да.

// Если первый раз здесь, то просчитать ещё раз с шагом h/2

if (flag == 0)

flag = 1; // Сравнивать уже будет с чем

else

{

// Не первый раз - оценить погрешность

// Сейчас в y3 - значение только что вычисленной функции ,

// а в y2 - занчение функции, вычисленной с шагом h * 2

// по отношению к текущему

for (j = 0; j < n; j++)

{ eps2 = fabs (((y3[j] - y2[j]) / y2[j]));

if (eps2 > eps) break; // Если погрешность слишком великА

}

if (j == n) // Если всё ОК

{ // Копируем результат

for (j = 0; j < n; j++) y[j] = y3[j];

free (k1); // Освобождаем память

return; // Возвращаемся в main

}

}

// По каким-то причинам выхода из функции не произошло -

// тогда уменьшаем шаг в 2 раза и повторяем

// всё, начиная с метода Рунге-Кутта

h /= 2.; // Уменьшить шаг

goto start; // Повторить расчёт сначала, с новыми параметрами

}

int main ()

К-во Просмотров: 511
Бесплатно скачать Курсовая работа: Численные методы при решении задач