Завдання:
Розв'язати звичайне диференційне рівняння.
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define C_1 1.2*exp(cos(2))
float f(float x, float y)
{ return y*sin(x+1);
}
main ()
{
clrscr();
float x,y;
float ye_0=1.2, ye_1, h=0.1;
float yrk_0=1.2, yrk_1, k1, k2, k3, k4;
for (x=1;x<3;x+=0.1)
{ y=C_1*exp(-cos(x+1));
printf ("\n x=%4.2f y=%4.2f",x,y);
}
getch();
for(x=1;x<3;x+=0.1)
{ printf("\n x=%4.2f ye_0=%4.2f",x,ye_0);
ye_1=ye_0+h*f(x, ye_0);
ye_0=ye_1;
}
getch();
for(x=1;x<3;x+=0.1)
{ printf("\n x=%4.2f yrk_0=%4.2f",x,yrk_0);
k1=h*f(x,yrk_0);
k2=h*f(x+h/2,yrk_0+k1/2);
k3=h*f(x+h/2,yrk_0+k2/2);
k4=h*f(x+h,yrk_0+k3);
yrk_1=yrk_0+1.0/6*(k1+2*k2+2*k3+k4);
yrk_0=yrk_1;
}
getch();
return(0);
}





Ейлера

Рунге-Кутта

x=
1.00
y=
1.20

ye_0=
1.20

yrk_0=
1.20

x=
1.10
y=
1.31

ye_0=
1.31

yrk_0=
1.31

x=
1.20
y=
1.43

ye_0=
1.42

yrk_0=
1.43

x=
1.30
y=
1.54

ye_0=
1.54

yrk_0=
1.54

x=
1.40
y=
1.65

ye_0=
1.65

yrk_0=
1.65

x=
1.50
y=
1.76

ye_0=
1.76

yrk_0=
1.76

x=
1.60
y=
1.86

ye_0=
1.87

yrk_0=
1.86

x=
1.70
y=
1.95

ye_0=
1.97

yrk_0=
1.95

x=
1.80
y=
2.03

ye_0=
2.05

yrk_0=
2.03

x=
1.90
y=
2.09

ye_0=
2.12

yrk_0=
2.09

x=
2.00
y=
2.13

ye_0=
2.17

yrk_0=
2.13

x=
2.10
y=
2.15

ye_0=
2.20

yrk_0=
2.15

x=
2.20
y=
2.15

ye_0=
2.21

yrk_0=
2.15

x=
2.30
y=
2.12

ye_0=
2.20

yrk_0=
2.12

x=
2.40
y=
2.08

ye_0=
2.16

yrk_0=
2.08

x=
2.50
y=
2.02

ye_0=
2.11

yrk_0=
2.02

x=
2.60
y=
1.94

ye_0=
2.03

yrk_0=
1.94

x=
2.70
y=
1.85

ye_0=
1.94

yrk_0=
1.85

x=
2.80
y=
1.75

ye_0=
1.84

yrk_0=
1.75

x=
2.90
y=
1.64

ye_0=
1.73

yrk_0=
1.64

x=
3.00
y=
1.52

ye_0=
1.61

yrk_0=
1.52