Программа на С

/* РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ СИСТЕМЫ ОДУ ПЕРВОГО ПОРЯДКА

МЕТОДОМ РУНГЕ_КУТТА */

/* 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

Нажмите любую клавишу для продолжения...

*/


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: