Given a differential equation dy/dx = f(x, y) with initial condition y(x0) = y0. Find its approximate solution using Euler method.
Euler Method :
In mathematics and computational science, the Euler method (also called forward
Euler method) is a first-order numerical procedure for solving ordinary differential
equations (ODEs) with a given initial value.
Consider a differential equation dy/dx = f(x, y) with initial condition y(x0)=y0
then a successive approximation of this equation can be given by:
y(n+1) = y(n) + h * f(x(n), y(n))
where h = (x(n) – x(0)) / n
h indicates step size. Choosing smaller
values of h leads to more accurate results
and more computation time.
Example :
Consider below differential equation dy/dx = (x + y + xy) with initial condition y(0) = 1 and step size h = 0.025. Find y(0.1). Solution: f(x, y) = (x + y + xy) x0 = 0, y0 = 1, h = 0.025 Now we can calculate y1 using Euler formula y1 = y0 + h * f(x0, y0) y1 = 1 + 0.025 *(0 + 1 + 0 * 1) y1 = 1.025 y(0.025) = 1.025. Similarly we can calculate y(0.050), y(0.075), ....y(0.1). y(0.1) = 1.11167
Below is the implementation:
/* CPP Program to find approximation of a ordinary differential equation
using euler method.*/
#include <iostream> using namespace std;
// Consider a differential equation // dy/dx=(x + y + xy) float func( float x, float y)
{ return (x + y + x * y);
} // Function for Euler formula void euler( float x0, float y, float h, float x)
{ float temp = -0;
// Iterating till the point at which we
// need approximation
while (x0 < x) {
temp = y;
y = y + h * func(x0, y);
x0 = x0 + h;
}
// Printing approximation
cout << "Approximate solution at x = "
<< x << " is " << y << endl;
} // Driver program int main()
{ // Initial Values
float x0 = 0;
float y0 = 1;
float h = 0.025;
// Value of x at which we need approximation
float x = 0.1;
euler(x0, y0, h, x);
return 0;
} |
// Java program to find approximation of an ordinary // differential equation using euler method import java.io.*;
class Euler {
// Consider a differential equation
// dy/dx=(x + y + xy)
float func( float x, float y)
{
return (x + y + x * y);
}
// Function for Euler formula
void euler( float x0, float y, float h, float x)
{
float temp = - 0 ;
// Iterating till the point at which we
// need approximation
while (x0 < x) {
temp = y;
y = y + h * func(x0, y);
x0 = x0 + h;
}
// Printing approximation
System.out.println( "Approximate solution at x = "
+ x + " is " + y);
}
// Driver program
public static void main(String args[]) throws IOException
{
Euler obj = new Euler();
// Initial Values
float x0 = 0 ;
float y0 = 1 ;
float h = 0 .025f;
// Value of x at which we need approximation
float x = 0 .1f;
obj.euler(x0, y0, h, x);
}
} // This code is contributed by Anshika Goyal. |
# Python Code to find approximation # of a ordinary differential equation # using euler method. # Consider a differential equation # dy / dx =(x + y + xy) def func( x, y ):
return (x + y + x * y)
# Function for euler formula def euler( x0, y, h, x ):
temp = - 0
# Iterating till the point at which we
# need approximation
while x0 < x:
temp = y
y = y + h * func(x0, y)
x0 = x0 + h
# Printing approximation
print ( "Approximate solution at x = " , x, " is " , "%.6f" % y)
# Driver Code # Initial Values x0 = 0
y0 = 1
h = 0.025
# Value of x at which we need approximation x = 0.1
euler(x0, y0, h, x) |
// C# program to find approximation of an ordinary // differential equation using euler method using System;
class GFG {
// Consider a differential equation
// dy/dx=(x + y + xy)
static float func( float x, float y)
{
return (x + y + x * y);
}
// Function for Euler formula
static void euler( float x0, float y, float h, float x)
{
// Iterating till the point at which we
// need approximation
while (x0 < x) {
y = y + h * func(x0, y);
x0 = x0 + h;
}
// Printing approximation
Console.WriteLine( "Approximate solution at x = "
+ x + " is " + y);
}
// Driver program
public static void Main()
{
// Initial Values
float x0 = 0;
float y0 = 1;
float h = 0.025f;
// Value of x at which we need
// approximation
float x = 0.1f;
euler(x0, y0, h, x);
}
} // This code is contributed by Vt_m. |
<?php // PHP Program to find approximation // of a ordinary differential equation // using euler method // Consider a differential equation // dy/dx=(x + y + xy) function func( $x , $y )
{ return ( $x + $y + $x * $y );
} // Function for Euler formula function euler( $x0 , $y , $h , $x )
{ $temp = -0;
// Iterating till the point
// at which we need approximation
while ( $x0 < $x )
{
$temp = $y ;
$y = $y + $h * func( $x0 , $y );
$x0 = $x0 + $h ;
}
// Printing approximation
echo "Approximate solution at x = " ,
$x , " is " , $y , "\n" ;
} // Driver Code // Initial Values $x0 = 0;
$y0 = 1;
$h = 0.025;
// Value of x at which // we need approximation $x = 0.1;
euler( $x0 , $y0 , $h , $x );
// This code contributed by aj_36 ?> |
<script> // JavaScript program to find approximation of an ordinary // differential equation using euler method // Consider a differential equation
// dy/dx=(x + y + xy)
function func(x, y)
{
return (x + y + x * y);
}
// Function for Euler formula
function euler(x0, y, h, x)
{
let temp = -0;
// Iterating till the point at which we
// need approximation
while (x0 < x) {
temp = y;
y = y + h * func(x0, y);
x0 = x0 + h;
}
// Printing approximation
document.write( "Approximate solution at x = "
+ x + " is " + y);
}
// Driver Code // Initial Values
let x0 = 0;
let y0 = 1;
let h = 0.025;
// Value of x at which we need approximation
let x = 0.1;
euler(x0, y0, h, x);
// This code is contributed by chinmoy1997pal. </script> |
Approximate solution at x = 0.1 is 1.11167
Time complexity: O(x/h)
Auxiliary space: O(1)