I really need your help. I don't understand why my program works incorrectly. I need to solve this using Runge Kutta Method
y' = x*exp(pow(-x,2)) * sin(x) -2*x*y,
y(a) = 1, a = 0, b = 2;
Analytical answer: y(x) = exp(pow(-x,2)) * ( sin(x) - x*cos(x) + 1 )
My program:
float f(float x, float y) {
return x*exp((-x)*(-x)) * sin(x) - 2*x*y;
}
float ya(float x) {
return exp((-x)*(-x)) * ( sin(x) - x*cos(x) + 1 );
}
int main() {
int n = 100;
float a , b , h , x;
float y[n];
float m1, m2 , m3 , m4;
int k;
a = 0 , b = 2, h = (b-a) / (n-1);
y[0] = 1;
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("x = %5.2f \t\t Numerical = %5.2f \t\t Analytical = %5.2f \n",x , y[k], ya(x));
}
}
Result of program. Numerical and Analytical are different and I can't understand why