Solve ODEs Backwards in Time with C++ Euler Method

Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
1 reply · 8K views
amr07
Messages
5
Reaction score
0
Hi Everybody
I am beginner in c++ and I need your help please. I implemented euler method for solving simple ODEs (y' = x -y, y(0)=1)and it is forward in time(from t=0 to t=1) and it worked well, my question is : I want to run this code backward in time(t=1 to t=0) what i have to change in my code?
code:

Code:
/* Euler for a set of first order differential equations */

#include <stdio.h>
#include <math.h>
#define dist 0.2               /* stepsize in t*/
#define MAX 1.0                /* max for t */
int N=1;
void euler(double x, double y[], double step); /* Euler function */

double f(double x, double y[], int i);          /* function for derivatives */

main()
{
double t, y[N];
int j;

y[0]=1.0;                                       /* initial condition */

 
for (j=0; j*dist<=MAX ;j++)                     /* time loop */
{
   t=j*dist;
   printf("j =  %d,t = %f y[0] = %f\n", j,t, y[0]);
   euler(t, y, dist);

}

}

void euler(double x, double y[], double step)
{
double  s[N];      /* for euler */
int i;
{
for (i=0;i<N;i++)
 {     s[i]=step*f(x, y, i);
}
}

{
for (i=0;i<N;i++) 
     y[i]+=s[i];
}
}
double  f(double x, double y[], int i)
{
    return(x-y[0]);                 /* derivative of first equation */
}
many thanks in advance!
 
Last edited:
Physics news on Phys.org
The main change is just to make "dist" a negative value.

You will also need to change the test in the time loop

for (j=0; j*dist<=MAX ;j++)

(and you might want to change the constant MAX to MIN).