Skip to content

Instantly share code, notes, and snippets.

@tylerjw
Last active August 29, 2015 13:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tylerjw/8714846 to your computer and use it in GitHub Desktop.
Save tylerjw/8714846 to your computer and use it in GitHub Desktop.
Euler's Method (iterative).
/**
Euler's Method (iterative).
@author Tyler Weaver
Compile:
gcc euler.c -o euler
Run:
./euler
*/
#include <stdio.h>
#include <stdbool.h>
#define X 0
#define Y 1
double function(double x, double y);
void euler(double step_size, double target_x,
double initial_x, double initial_y,
double (*func)(double,double), bool debug);
int main()
{
const double step_size = 0.1;
const double initial_value[2] = {0,1};
const double target_x = 0.5;
euler(step_size, target_x, initial_value[X], initial_value[Y],
function, true);
return 0;
}
double function(double x, double y)
{
long double value = x*y + y;
return value;
}
void euler(double step_size, double target_x,
double initial_x, double initial_y,
double (*func)(double,double), bool debug)
{
const int n_steps = (target_x / step_size);
double prev_value[2] = {initial_x, initial_y};
double value[2];
if(debug)
{
printf("Step Size: %f\r\n", step_size);
printf("Initial value: (%f,%f)\r\n", initial_x, initial_y);
printf("Target x value: %f\r\n", target_x);
printf("Number of steps: %d\r\n", n_steps);
}
for(int i = 0; i < n_steps; i++)
{
value[X] = prev_value[X] + step_size;
value[Y] = prev_value[Y] + (step_size*func(prev_value[X], prev_value[Y]));
if(debug)
{
printf("\r\nfunc(x,y) = %f\r\n", func(prev_value[X], prev_value[Y]));
printf("value[y] = %f + %f * %f = %f\r\n", prev_value[Y],
step_size, func(prev_value[X], prev_value[Y]), value[Y]);
}
printf("(%f,%f)\r\n", value[X], value[Y]);
prev_value[X] = value[X];
prev_value[Y] = value[Y];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment