/* РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ СИСТЕМЫ ОДУ ПЕРВОГО ПОРЯДКА
МЕТОДОМ РУНГЕ_КУТТА */
/* i - индекс расчётной точки;
j - индекс приращения K[j][m] (j=1,2,3,4);
m - число уравнений в системе;
n - число расчётных значений функции;
на промежутке интегрирования;
y1[m] – значения приближённого решения;
y[m] – ординаты точек в которых вычисляются
приращения К1, К2, К3, К4. */
#include <stdio.h>
#include <conio.h>
/*--------------------------------------------------
ФУНКЦИЯ вычисления правых частей д.у. */
float f(int i, float x, float y[3])
{float z;
Switch (i)
{case 1: z = y[2]; break;
case 2: z =-y[1]; break;
};
return z;
}
/*-------------------------------------------------
Главная функция */
Void main()
{int i, j, n, m;
float a, b, h, x, y[3], y1[3], k[5][3];
float c[4]={0, 0.5, 0.5, 1};
clrscr();
printf ("Введите значения концов отрезка [a, b]\n");
scanf ("%f%f", &a, &b);
printf ("Введите начальные значения\n");
printf ("функций y10 и y20 при x=x0\n");
scanf ("%f%f", &y1[1], &y1[2]);
printf ("Число значений функции на промежутке [a, b] n = \n");
scanf ("%i", &n);
x = a; h = (b-a)/n;
printf ("x=%-5.2f y1=%9.6f y2=%9.6f\n", x, y1[1], y1[2]);
for (i=1; i<=n; i++)
{ for (j=1; j<=4; j++)
{for (m=1; m<=2; m++)
y[m] = y1[m]+c[j-1]*k[j-1][m];
for (m=1; m<=2; m++)
k[j][m]= h * f(m, x+c[j-1]*h, y);
};
for (m=1; m<=2; m++)
y1[m] += (k[1][m] + 2*k[2][m] + 2*k[3][m] + k[4][m])/6;
x += h;
printf ("x=%-5.2f y1=%9.6f y2=%9.6f\n", x, y1[1], y1[2]);
}
printf("Нажмите любую клавишу для продолжения...");
getch();
}
/* ШАГ h */
/*Введите значения концов отрезка [a, b]
0 1.57
Введите начальные значения
функций y10 и y20 при x=x0
0 1
Введите число значений функции на промежутке [a,b]
x=0.00 y1= 0.000000 y2= 1.000000
x=0.52 y1= 0.499445 y2= 0.866186
x=1.05 y1= 0.865225 y2= 0.500834
x=1.57 y1= 0.999585 y2= 0.001683
Нажмите любую клавишу дл продолжеи...
*/
/* ШАГ h/2 */
/* Введите значения концов отрезка [a, b]
0 1.57
Введите начальные значения
функций y10 и y20 при x=x0
0 1
Введите число значений функции на промежутке [a, b]
x=0.00 y1= 0.000000 y2= 1.000000
x=0.26 y1= 0.258681 y2= 0.965961
x=0.52 y1= 0.499751 y2= 0.866164
x=0.79 y1= 0.706799 y2= 0.707405
x=1.05 y1= 0.865732 y2= 0.500490
x=1.31 y1= 0.965730 y2= 0.259505
x=1.57 y1= 0.999986 y2= 0.000856
Нажмите любую клавишу для продолжения...
*/