In this section we’ll take a brief look at a fairly simple method for approximating solutions to differential equations. We derive the formulas used by Euler’s Method and give a brief discussion of the errors in the approximations of the solutions.
Let’s recall the very basic aspect of Differential Equation.
We know, \(\frac{\text{d}y(x)}{\text{d}x}=f(x,y)\)
It can be expressed as, \(\frac{\text{d}y(x)}{\text{d}x}\sim \frac {y(x+h)-y(x)}{h}\)
Combining both the equations, we get, \(\frac{\text{d}y(x)}{\text{d}x}\sim \frac {y(x+h)-y(x)}{h}=f(x,y)\)
Summarizing the equation as, \(y(x+h)= y(x)+h.f(x,y)\)
Thus, we arrive at, \(y_{n+1}= y_{n}+h.f(x_{n},y_{n})\).
where \(h\) is the step size (the smaller, the better), \(f(x,y)\) is right side of the differential equation.
Example 1: \(\frac{\text{d}y}{\text{d}x}=2y\) with the initial condition as \(y(0)=1\).
Here, we have two approaches to find the solution of the Differential Equation, which are as follows:
1) Analytical Solution: This is the exact solution of an ordinary differential equation.
Integrating both sides, \(\int_{}{}\frac{\text{d}y}{ y}=\int_{}{}{d}x\)
We get, \(\ln y = x + \ln C\)
Therefore, \( y(x) = e^{x}\)
2) Numerical Solution: This is just an approximation of the solution.
We require this formula, \(y(x+h)= y(x)+h.f(x,y)\)
along with initial conditions, \(x_{0}=0\) and \(y_{0}=1\)
Let’s continue with Example 1, to find the Numerical Solution.
Example 1: \(\frac{\text{d}y}{\text{d}x}=2y\) with the initial condition as \(y(0)=1\) and step-size \(h=2\).
We know the formula, \(y_{n+1}= y_{n}+h.f(x_{n},y_{n})\).
In this equation we put the values of \(x_{n}\) at interval of \(2\) because of Step-Size (\(h=2\)) and obtain the value of \(y_{n}.\) By initial conditions, we know \(x_{0}=0\) and \(y_{0}=1\).


Here, we are assuming the slope to be same between two consecutive points of \(x\) and \( y\), whereas in the exact case the slope is changing constantly.
Example 2: Find approximate value of ‘\(y\)’ at \(x=1\) in five steps by taking h=0.2 for the DE \(\frac{\text{d}y}{\text{d}x}= x+y\) where \(y(0)=1\).
SOLUTION: \(\frac{\text{d}y}{\text{d}x}=x+y\) and \(y(0)=1\)
Hence, \(f(x,y)=x+y\) and \(x_{0} = 0\) , \(y_{0} = 1\)
We know the formula, \(y_{n+1}= y_{n}+h.f(x_{n},y_{n})\)
Therefore, equation can be modified as \(y_{n+1}= y_{n}+h.(x_{n}+y_{n})\)
Calculations required is put into a tabular form as shown below in Table 2.
The approximate value of \(y\) at \(x=1\) , i.e \(y(1)= 2.976664\).

Code:
// Euler's Method
// Solving dy/dx = x + y by Euler's method
%use s2
// Defining function f(x,y) for this case
val f: BivariateRealFunction = object : AbstractBivariateRealFunction() {
override fun evaluate(x: Double, y: Double): Double {
return x+y
}
}
val x_at_0 = 0.0
val y_at_0 = 1.0
val h = 0.2
// Evaluation of h*f(x(n),y(n))
val e_term: BivariateRealFunction = object : AbstractBivariateRealFunction() {
override fun evaluate(h: Double, f_at_n: Double): Double {
return h*f_at_n
}
}
// y(n+1) = y(n) + h*f(x(n),y(n)) ..........Euler's Method
val Y_at_n_plus_1: BivariateRealFunction = object : AbstractBivariateRealFunction() {
override fun evaluate(y_at_n: Double, e_term: Double): Double {
return y_at_n + e_term
}
}
val h_term: BivariateRealFunction = object : AbstractBivariateRealFunction() {
override fun evaluate(h: Double, t: Double): Double {
return h*t
}
}
val xn: BivariateRealFunction = object : AbstractBivariateRealFunction() {
override fun evaluate(x_at_0: Double, h_term: Double): Double {
return x_at_0 + h_term
}
}
println("Solution of Differential Equation by Euler's Method")
val steps = mutableListOf(0.0, 1.0, 2.0, 3.0, 4.0) //no. of steps = 5
var y_n = y_at_0
for (index in steps){
val h_n = h_term.evaluate(h,index)
val x_n = xn.evaluate(x_at_0,h_n)
val f_n = f.evaluate(x_n,y_n)
val e_n = e_term.evaluate(h,f_n)
val y = Y_at_n_plus_1.evaluate(y_n,e_n)
y_n = y
println("Value of y at n=%f: %f".format(index,y))
}
println("The approximate value of y at x=1 is %f".format(y_n))
Output:
