Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Лабораторная работа по "Программированию"

Автор:   •  Май 20, 2023  •  Лабораторная работа  •  394 Слов (2 Страниц)  •  70 Просмотры

Страница 1 из 2

Постановка задачи:

[pic 1]

Результат работы программы

[pic 2]

[pic 3]

[pic 4]        [pic 5]

Вывод:

Метод Эйлера-Коши требует маленький шаг, чтобы результаты исходных вычислений были точными, при большом шаге результаты будут не точные. Данный факт подтверждает сопоставление результатов данного метода с большим шагом с результатами RKF45.

Код программы:

#include <math.h> #include <stdio.h> #include "cmath.h" #include <locale.h> #define HPRINT 0.05

#define H_OPT 0.01

#define EPS 0.0001

#define N 2

const double Y0[N] = { -3.0, 1.0 }; double Y[N], YP[N];

int F(int n, double T, double* Y, double* YP);

int EulerCauchy(int(*F)(int n, double t, double y[], double yp[]), int NEQN, double Y[], double YP[], double* T, double H);

int main()

{

setlocale(LC_ALL, "Russian");

double H, T = 0.0, TOUT, RELERR = EPS, ABSERR = EPS; int NFE, MAXNFE = 1000, IFLAG = 1, NEQN = N, fail;

//first part: rkfinit(NEQN, &fail); if (fail)

{

printf("RKFINIT ERROR!\n"); exit(1);

}

printf("RKF45:\n\n"); Y[0] = Y0[0];

Y[1] = Y0[1];

printf("T: %.4f, Y : %.4f %.4f\n", T, Y[0], Y[1]); for (TOUT = HPRINT; TOUT < 1 + HPRINT; TOUT += HPRINT)

{

rkf45(F, NEQN, Y, YP, &T, TOUT, &RELERR, ABSERR, &H, &NFE, MAXNFE, &IFLAG);

if (IFLAG == 8) { printf("IFLAG ERROR!\n"); break; } printf("T: %.4f, Y : %.4f %.4f\n", T, Y[0], Y[1]);

}

printf("\nFLAG: %d, NFE: %d\n\n", IFLAG, NFE); rkfend();

//second part:

printf("\nМетодом Эйлера-Коши:\n"); H = HPRINT;

printf("\nSTEP = %.4f\n\n", H); Y[0] = Y0[0];

Y[1] = Y0[1];

for (T = H; T < 1 + H; T += H)

...

Скачать:   txt (2.9 Kb)   pdf (184.6 Kb)   docx (144.2 Kb)  
Продолжить читать еще 1 страницу »
Доступно только на Essays.club