Необходимо Решить задачу Коши для обыкновенного дифференциального уравнения, в компиляторе численного решения выдает NAN
Решить задачу Коши для обыкновенного дифференциального уравнения y'= f(x,y) на промежутке [a b, ] методом Рунге – Кутты четвертого порядка точности: y'= (2*x -5)/x^2 *y+5 y(a)=b , a=2, b=4 Точное решение задачи: y(x)=x^2
Код программы
Не могу понять, почему делится на 0
#include <math.h>
#include <conio.h>
#include <stdio.h>
#define n 100
float f(float, float);
float ya(float);
int main (void)
{
float a, b, h, x, y[n];
float m1,m2,m3,m4; // дополнительные переменные
int k;
a=2; b=4; h=(b-a)/(n-1);
y[2]=4; // начальное условие
for (k=0; k<n-1; k++) // метод Рунге – Кутты
{
x=k*h;
m1=h*f(x,y[k]);
m2=h*f(x+h/2,y[k]+m1/2);
m3=h*f(x+h/2,y[k]+m2/2);
m4=h*f(x+h,y[k]+m3);
y[k+1]=y[k]+(m1+2*m2+2*m3+m4)/6;
}
// сравнение с аналитическим решением
for (k=0; k<n; k++)
{
x=k*h;
printf("numerical = %5.2f \t\t analytical = %5.2f\n",y[k],ya(x));
}
getch();
}
float f(float x, float y) // правая часть
{
return (2*x-5)/pow(x, 2)*y + 5;
}
float ya(float x) // аналитическое решение
{
return pow(x, 2);
}
Источник: Stack Overflow на русском