/* ATK IV - Numerical Programming (2006) */ /* Excercise 10.2 - Differential Equations, Elementary Methods */ #include #include double f(double x, double y){return sqrt(x)*y-y;} void euler(int n, double x0, double xend, double y0); void rk2(int n, double x0, double xend, double y0); int main(void){ double x0=0.0, y0=1.0, xend = 10.0; int n=100; euler(n,x0,xend,y0); rk2(n,x0,xend,y0); return 0; } void euler(int n, double x0, double xend, double y0){ int i; double h=(xend-x0)/(1.0*(n-1)); double x,y=y0; FILE *file; file=fopen("euler.txt","w"); for(i=1;i<=n;i++){ x=x0+(i-1)*h; y+=h*f(x,y); fprintf(file,"%f %f\n",x,y); } fclose(file); } void rk2(int n, double x0, double xend, double y0){ int i; double h=(xend-x0)/(1.0*(n-1)); double x,y=y0,k1,k2; FILE *file; file = fopen("rk2.txt","w"); for(i=1;i<=n;i++){ x=x0+(i-1)*h; k1=h*f(x,y); k2=h*f(x+h/2.0,y+k1/2.0); y+=k2; fprintf(file,"%f %f\n",x,y); } }