Last Updated June 15, 2026
Euler’s Method is one of the clearest bridges between differential equations and computational systems modeling. It approximates a changing system by repeatedly using the current state, the current rate of change, and a chosen time step to estimate the next state.
In systems modeling, Euler’s Method helps explain how continuous-time equations become step-by-step simulations. It is simple enough to audit, teach, and interpret, but important enough to reveal the central numerical issues behind simulation: step size, local error, accumulated error, stability, sensitivity, and the difference between a model equation and a computational approximation.
This article introduces Euler’s Method for systems modeling, including first-order differential equations, slope-based updates, explicit time stepping, local and global error, step-size sensitivity, stability limits, qualitative interpretation, comparison with analytic solutions, and responsible computational use.

Euler’s Method starts with a differential equation and turns it into a simple computational rule. At each step, the method asks: where is the system now, what is its current rate of change, and how far should the simulation move forward in time? The answer produces the next estimated state.
This simplicity is its strength and its danger. Euler’s Method makes the logic of numerical simulation visible, but its results depend strongly on time step, system behavior, error accumulation, and stability. For that reason, it is often the first numerical method modelers learn, but not always the final method they should use.
Why Euler’s Method Matters
Euler’s Method matters because many systems are described by differential equations but explored through simulation. A modeler may know the rule governing change, but still need a practical way to compute the system’s trajectory over time.
\frac{dy}{dt}=f(t,y)
\]
Interpretation: The rate of change of state \(y\) depends on time \(t\), the current state \(y\), or both.
Euler’s Method approximates this continuous relationship by stepping forward in time using the current slope.
| Modeling need | Euler’s Method role | Systems meaning |
|---|---|---|
| Simulate change over time. | Turns a differential equation into repeated updates. | Produces an approximate trajectory. |
| Inspect model behavior. | Makes slope logic visible. | Shows how rates drive state change. |
| Teach numerical simulation. | Provides a simple explicit method. | Clarifies step size, error, and stability. |
| Audit assumptions. | Records initial state, time step, equation, and update rule. | Makes computational interpretation traceable. |
Euler’s Method is not just a calculation technique. It is a compact model of how continuous reasoning becomes computational reasoning.
From Differential Equations to Updates
A differential equation describes how a state changes instantaneously. A computer simulation needs finite steps. Euler’s Method replaces the continuous derivative with a finite update.
\frac{dy}{dt}\approx \frac{y_{n+1}-y_n}{\Delta t}
\]
Interpretation: A derivative can be approximated by the change between two time-step values.
If the differential equation says \(dy/dt=f(t,y)\), then the finite update becomes:
\frac{y_{n+1}-y_n}{\Delta t}\approx f(t_n,y_n)
\]
Interpretation: The current rate of change estimates how far the state moves during one time step.
Solving for the next state gives the Euler update rule.
y_{n+1}=y_n+\Delta t\,f(t_n,y_n)
\]
Interpretation: The next state equals the current state plus time step times current slope.
This is the essential idea: local slope becomes stepwise motion.
The Basic Euler Update
The basic Euler update has three components: current state, current slope, and time step.
y_{n+1}=y_n+h f(t_n,y_n)
\]
Interpretation: Here \(h\) is the time step, often written as \(\Delta t\).
| Symbol | Meaning | Systems interpretation |
|---|---|---|
| \(y_n\) | Current state. | Population, concentration, stock, temperature, pressure, load, or other system state. |
| \(t_n\) | Current time. | Simulation time, observation time, or modeled time step. |
| \(f(t_n,y_n)\) | Current rate of change. | Growth, decay, inflow, outflow, feedback, forcing, or adjustment rate. |
| \(h\) | Step size. | How far the model advances per update. |
| \(y_{n+1}\) | Next estimated state. | The model’s projected state after one step. |
The update is explicit because the next value is computed directly from known current values. That makes Euler’s Method transparent, but also sensitive to step size and stability.
Initial Conditions and Time Steps
Euler’s Method requires an initial condition. The simulation begins from a known or assumed starting state.
y(t_0)=y_0
\]
Interpretation: The initial condition defines the starting state of the system.
The time step determines how far the method moves forward at each update.
t_{n+1}=t_n+h
\]
Interpretation: Time advances by a fixed step \(h\).
| Choice | Modeling role | Risk |
|---|---|---|
| Initial state. | Sets the starting point. | Poor initial conditions distort the whole trajectory. |
| Time step. | Controls temporal resolution. | Large steps can create large error or instability. |
| End time. | Defines simulation horizon. | Long runs can accumulate error. |
| Rate function. | Defines system dynamics. | Misspecified feedback produces misleading trajectories. |
In systems modeling, initial conditions and time-step choices are not background details. They are part of the model’s logic.
Geometric Interpretation
Geometrically, Euler’s Method follows tangent lines. At the current point, the method looks at the slope, draws a straight-line approximation, and steps forward along that line.
y(t+h)\approx y(t)+h\,y'(t)
\]
Interpretation: Euler’s Method uses the tangent-line approximation for the next state.
This interpretation explains both the method’s clarity and its error. If the true curve bends strongly within a time step, the tangent-line estimate can drift away from the actual solution.
| Curve behavior | Euler approximation | Interpretive consequence |
|---|---|---|
| Nearly linear over the step. | Usually accurate. | Small local error. |
| Strong curvature. | Can overshoot or undershoot. | Step size may need reduction. |
| Rapid feedback. | Can become unstable. | Explicit stepping may be inadequate. |
| Long simulation horizon. | Error accumulates. | Global error must be checked. |
The geometric view keeps the method intuitive: Euler’s Method moves along the current slope, even though the true system may curve away immediately.
Local Error and Global Error
Euler’s Method has local error at each step and global error across the whole simulation. Local error is the error made during one update. Global error is the accumulated error after many updates.
\text{local error}=O(h^2)
\]
Interpretation: The one-step truncation error is proportional to the square of the step size for smooth problems.
\text{global error}=O(h)
\]
Interpretation: Across many steps, Euler’s Method is first-order accurate.
This means that reducing the time step usually improves accuracy, but the improvement is relatively slow compared with higher-order methods.
| Error type | Meaning | Modeling implication |
|---|---|---|
| Local truncation error. | Error from one tangent-line step. | Smaller steps reduce one-step approximation error. |
| Global error. | Accumulated trajectory error. | Long simulations require sensitivity checks. |
| Roundoff error. | Numerical precision error. | Usually smaller than truncation error, but can matter in long or stiff workflows. |
| Model error. | Error in the equation itself. | Numerical accuracy cannot fix a poor model structure. |
Euler’s Method is useful for learning and auditing because its errors are visible and interpretable.
Step-Size Sensitivity
Step-size sensitivity is one of the most important checks when using Euler’s Method. A result should not be trusted simply because the simulation runs. The modeler should test whether the conclusion changes when \(h\) changes.
h\downarrow \quad \Rightarrow \quad \text{Euler estimate often improves}
\]
Interpretation: Smaller time steps usually reduce truncation error, though at greater computational cost.
| Step-size pattern | Interpretation | Modeling response |
|---|---|---|
| Results change little as \(h\) shrinks. | Numerical result may be stable under refinement. | Document comparison and proceed cautiously. |
| Results change substantially. | Step size affects conclusion. | Use smaller step or better method. |
| Simulation blows up for large \(h\). | Numerical instability is likely. | Check stability condition and method choice. |
| Small \(h\) becomes too expensive. | Euler may be inefficient. | Consider higher-order or adaptive methods. |
Step-size comparison is a basic governance requirement for Euler workflows that support interpretation or decision-making.
Stability
Stability asks whether numerical errors remain controlled as the simulation advances. Euler’s Method can be unstable even for simple equations if the time step is too large.
Consider a simple decay equation:
\frac{dy}{dt}=-ky
\]
Interpretation: The state decays at a rate proportional to its current value.
Euler’s Method gives:
y_{n+1}=y_n-hky_n=(1-hk)y_n
\]
Interpretation: The multiplier \(1-hk\) determines how the numerical solution behaves.
If the multiplier has inappropriate magnitude or sign, the numerical solution may oscillate or diverge even though the true solution decays smoothly.
| Condition | Numerical behavior | Interpretation |
|---|---|---|
\(0| Smooth positive decay. |
Numerical behavior resembles true decay. |
|
\(1| Alternating signs but decaying magnitude. |
Numerical oscillation appears. |
|
| \(hk>2\) | Oscillation grows. | Unstable numerical artifact. |
| \(h\) very small. | More stable but more steps. | Greater computational cost. |
Stability is not optional. A simulation can be numerically unstable even when the underlying system is stable.
Growth, Decay, and Feedback
Euler’s Method is often used to approximate systems with growth, decay, inflow, outflow, and feedback. These systems are central to population modeling, epidemiology, economics, ecology, climate dynamics, infrastructure stress, and resource modeling.
\frac{dy}{dt}=ay
\]
Growth: The rate is proportional to the current state.
\frac{dy}{dt}=I(t)-O(t)
\]
Stock-flow reasoning: The state changes according to inflows minus outflows.
\frac{dy}{dt}=r y\left(1-\frac{y}{K}\right)
\]
Logistic feedback: Growth slows as the state approaches carrying capacity.
Euler’s Method approximates each of these by repeatedly evaluating the current rate and updating the state.
| System pattern | Rate function | Euler interpretation |
|---|---|---|
| Exponential growth. | Rate rises with state. | Current state amplifies next step. |
| Exponential decay. | Rate declines with state. | Current state shrinks by repeated proportional updates. |
| Stock-flow model. | Net flow controls state change. | Accumulation is updated one step at a time. |
| Logistic model. | Feedback limits growth. | Stepwise update approximates nonlinear adjustment. |
Euler’s Method makes feedback visible, but it can also distort feedback when steps are too large.
Euler’s Method and Systems Modeling
Euler’s Method belongs naturally in systems modeling because many systems are represented as states and rates. The method says that the next state equals the current state plus a small amount of accumulated change.
\text{next stock}=\text{current stock}+h(\text{inflow}-\text{outflow})
\]
Interpretation: Euler’s Method is a computational version of stock-flow accumulation.
This is especially useful in system dynamics, ecological modeling, resource modeling, public-health modeling, infrastructure modeling, and sustainability pathways.
However, a system trajectory produced by Euler’s Method is not just the original model. It is the original model plus a numerical method. Interpretation must account for both.
Mathematical Deepening
This section adds a more formal layer for mathematically advanced readers. Euler’s Method connects tangent-line approximation, Taylor expansion, explicit time stepping, local truncation error, global error, stability, consistency, and convergence.
Euler Building Blocks
State
The variable being updated through time.
Rate Function
The differential equation defining the current slope.
Time Step
The finite interval over which the slope is applied.
Update Rule
The explicit calculation that produces the next state.
Error and Stability
Local Error
The error made by one tangent-line approximation.
Global Error
The accumulated trajectory error over many steps.
Stability
Whether numerical error remains controlled during repeated updates.
Step Refinement
Comparison of results across smaller time steps.
Systems Uses
Stock-Flow Simulation
Approximate accumulation from inflows and outflows.
Population Dynamics
Approximate growth, decline, and carrying-capacity feedback.
Resource Modeling
Approximate depletion, regeneration, and extraction pathways.
Policy Scenarios
Compare how changing rates or parameters alters trajectories.
Euler Workflow Governance
Initial Condition Record
Document starting state and source.
Step-Size Record
Document time step and sensitivity comparisons.
Equation Record
Document the rate function and parameter values.
Stability Review
Check whether numerical behavior may be an artifact.
Examples from Systems Modeling
Euler’s Method appears whenever a continuous rate equation is approximated by repeated updates.
Population Growth
Euler’s Method approximates how population changes under growth, limits, migration, or mortality.
Resource Depletion
Stocks can be updated from extraction, regeneration, inflow, outflow, and policy assumptions.
Epidemiological Models
Compartments can be advanced step by step using infection, recovery, and transition rates.
Climate Feedback
Temperature, forcing, carbon stocks, and feedback terms can be approximated over time.
Infrastructure Stress
Load, fatigue, recovery, and deterioration can be modeled as state changes over time.
Economic Adjustment
Adjustment processes, capital accumulation, debt dynamics, and demand response can be simulated with explicit updates.
Across these examples, Euler’s Method turns rate logic into a trajectory that can be inspected, compared, and audited.
Computation and Reproducible Workflows
Computational workflows for Euler’s Method should record the rate equation, parameter values, initial condition, time step, simulation horizon, step-size comparisons, analytic benchmark if available, error diagnostics, and stability warnings.
Because Euler simulations can look convincing even when they are inaccurate, reproducible workflows should preserve both the trajectory and the numerical assumptions that produced it.
Python Workflow: Euler Method Audit
The Python workflow below applies Euler’s Method to exponential decay and compares the numerical estimate with the analytic solution.
from __future__ import annotations
from dataclasses import dataclass, asdict
from pathlib import Path
import csv
import json
import math
@dataclass(frozen=True)
class EulerRecord:
step: int
time: float
euler_value: float
exact_value: float
absolute_error: float
step_size: float
stability_multiplier: float
stability_status: str
warning: str
def rate_function(t: float, y: float, decay_rate: float) -> float:
return -decay_rate * y
def exact_solution(t: float, y0: float, decay_rate: float) -> float:
return y0 * math.exp(-decay_rate * t)
def euler_audit(
y0: float,
decay_rate: float,
step_size: float,
stop_time: float
) -> list[EulerRecord]:
steps = int(round(stop_time / step_size))
y = y0
multiplier = 1.0 - step_size * decay_rate
stability_status = "stable_for_simple_decay" if abs(multiplier) <= 1.0 else "unstable_risk"
records: list[EulerRecord] = []
for step in range(steps + 1):
t = step * step_size
exact = exact_solution(t, y0, decay_rate)
records.append(
EulerRecord(
step=step,
time=t,
euler_value=y,
exact_value=exact,
absolute_error=abs(y - exact),
step_size=step_size,
stability_multiplier=multiplier,
stability_status=stability_status,
warning="Euler estimates depend on time step, rate function, initial condition, stability, and accumulated error."
)
)
y = y + step_size * rate_function(t, y, decay_rate)
return records
records = euler_audit(
y0=100.0,
decay_rate=0.35,
step_size=0.1,
stop_time=20.0
)
output_dir = Path("outputs")
(output_dir / "tables").mkdir(parents=True, exist_ok=True)
(output_dir / "json").mkdir(parents=True, exist_ok=True)
with (output_dir / "tables" / "euler_method_audit.csv").open("w", newline="", encoding="utf-8") as handle:
writer = csv.DictWriter(handle, fieldnames=asdict(records[0]).keys())
writer.writeheader()
for record in records:
writer.writerow(asdict(record))
summary = {
"initial_value": 100.0,
"decay_rate": 0.35,
"step_size": 0.1,
"stop_time": 20.0,
"records": len(records),
"final_euler_value": records[-1].euler_value,
"final_exact_value": records[-1].exact_value,
"final_absolute_error": records[-1].absolute_error,
"stability_multiplier": records[0].stability_multiplier,
"interpretation": "Euler’s Method approximates the decay trajectory, but error and stability depend on the time step."
}
(output_dir / "json" / "euler_method_audit.json").write_text(
json.dumps([asdict(record) for record in records], indent=2),
encoding="utf-8"
)
(output_dir / "json" / "euler_method_summary.json").write_text(
json.dumps(summary, indent=2),
encoding="utf-8"
)
print("Wrote Euler method audit.")
This workflow preserves the numerical trajectory, analytic benchmark, error, time step, and stability multiplier.
R Workflow: Step-Size Comparison
The R workflow below compares Euler estimates across several step sizes to show how numerical results change under refinement.
rate_function <- function(t, y, decay_rate) {
-decay_rate * y
}
exact_solution <- function(t, y0, decay_rate) {
y0 * exp(-decay_rate * t)
}
euler_audit <- function(y0, decay_rate, step_size, stop_time) {
steps <- round(stop_time / step_size)
y <- y0
multiplier <- 1 - step_size * decay_rate
stability_status <- ifelse(
abs(multiplier) <= 1,
"stable_for_simple_decay",
"unstable_risk"
)
records <- list()
for (step in 0:steps) {
t <- step * step_size
exact <- exact_solution(t, y0, decay_rate)
records[[length(records) + 1]] <- data.frame(
step = step,
time = t,
euler_value = y,
exact_value = exact,
absolute_error = abs(y - exact),
step_size = step_size,
stability_multiplier = multiplier,
stability_status = stability_status,
warning = "Euler estimates depend on time step, rate function, initial condition, stability, and accumulated error."
)
y <- y + step_size * rate_function(t, y, decay_rate)
}
do.call(rbind, records)
}
step_sizes <- c(1, 0.5, 0.25, 0.1)
all_results <- do.call(
rbind,
lapply(step_sizes, function(h) euler_audit(100, 0.35, h, 20))
)
summary_table <- aggregate(
absolute_error ~ step_size,
data = all_results,
FUN = function(x) tail(x, 1)
)
names(summary_table)[[2]] <- "final_absolute_error"
dir.create("outputs/tables", recursive = TRUE, showWarnings = FALSE)
write.csv(all_results, "outputs/tables/r_euler_step_size_audit.csv", row.names = FALSE)
write.csv(summary_table, "outputs/tables/r_euler_step_size_summary.csv", row.names = FALSE)
print(head(all_results))
print(summary_table)
This workflow makes step-size dependence visible rather than hiding it behind one simulation run.
Haskell Workflow: Typed Euler Records
Haskell can represent Euler records with explicit fields for state, exact comparison, error, step size, stability, and warnings.
module Main where
data EulerRecord = EulerRecord
{ stepNumber :: Int
, timeValue :: Double
, eulerValue :: Double
, exactValue :: Double
, absoluteError :: Double
, stepSize :: Double
, stabilityMultiplier :: Double
, stabilityStatus :: String
, warning :: String
} deriving (Show)
rateFunction :: Double -> Double -> Double -> Double
rateFunction _ y decayRate =
-decayRate * y
exactSolution :: Double -> Double -> Double -> Double
exactSolution t y0 decayRate =
y0 * exp (-decayRate * t)
eulerAudit :: Double -> Double -> Double -> Double -> [EulerRecord]
eulerAudit y0 decayRate h stopTime =
go 0 y0
where
steps = round (stopTime / h)
multiplier = 1.0 - h * decayRate
status =
if abs multiplier <= 1.0
then "stable_for_simple_decay"
else "unstable_risk"
go step y
| step > steps = []
| otherwise =
let t = fromIntegral step * h
exact = exactSolution t y0 decayRate
record = EulerRecord
step
t
y
exact
(abs (y - exact))
h
multiplier
status
"Euler estimates depend on time step, rate function, initial condition, stability, and accumulated error."
nextY = y + h * rateFunction t y decayRate
in record : go (step + 1) nextY
main :: IO ()
main =
mapM_ print (eulerAudit 100.0 0.35 0.1 20.0)
The typed workflow keeps state update, error comparison, and stability interpretation explicit.
SQL Workflow: Euler Assumption Registry
SQL can document Euler workflow assumptions when simulations support dashboards, model reviews, reports, or decision-support narratives.
CREATE TABLE euler_method_assumption_registry (
assumption_key TEXT PRIMARY KEY,
assumption_name TEXT NOT NULL,
mathematical_role TEXT NOT NULL,
systems_modeling_role TEXT NOT NULL,
review_warning TEXT NOT NULL
);
INSERT INTO euler_method_assumption_registry VALUES
(
'rate_function',
'Rate function',
'Defines the differential equation used to compute the slope.',
'Encodes growth, decay, feedback, forcing, inflow, outflow, or transition behavior.',
'A numerically accurate simulation can still be misleading if the rate function is poorly specified.'
);
INSERT INTO euler_method_assumption_registry VALUES
(
'initial_condition',
'Initial condition',
'Defines the starting state of the simulation.',
'Controls the trajectory from the first step onward.',
'Initial-condition uncertainty should be documented.'
);
INSERT INTO euler_method_assumption_registry VALUES
(
'step_size',
'Step size',
'Defines the finite time interval used in each update.',
'Controls accuracy, stability, and computational cost.',
'Step-size sensitivity should be tested.'
);
INSERT INTO euler_method_assumption_registry VALUES
(
'simulation_horizon',
'Simulation horizon',
'Defines how long the iterative update is repeated.',
'Controls how much error can accumulate.',
'Long horizons require stronger sensitivity and stability review.'
);
INSERT INTO euler_method_assumption_registry VALUES
(
'stability_check',
'Stability check',
'Evaluates whether numerical behavior remains controlled.',
'Prevents numerical artifacts from being interpreted as system behavior.',
'Stability conditions depend on the equation and method.'
);
INSERT INTO euler_method_assumption_registry VALUES
(
'benchmark_comparison',
'Benchmark comparison',
'Compares Euler results to exact solutions or refined numerical estimates when available.',
'Helps distinguish numerical error from modeled dynamics.',
'Synthetic benchmarks do not guarantee empirical validity.'
);
SELECT
assumption_name,
mathematical_role,
systems_modeling_role,
review_warning
FROM euler_method_assumption_registry
ORDER BY assumption_key;
This registry keeps Euler interpretation tied to the rate function, initial condition, step size, horizon, stability, benchmark comparison, and model governance.
GitHub Repository
The companion repository for this article is designed as a reproducible mathematical-modeling workspace. It supports Euler method audits, exponential decay benchmarks, step-size sensitivity comparisons, stability diagnostics, SQL governance tables, generated outputs, advanced mathematical audit reports, and reusable calculator scripts.
Complete Code Repository
Companion article folder with Python, R, Julia, SQL, Haskell, C, C++, Fortran, Rust, Go, notebooks, documentation, synthetic teaching data, generated outputs, schemas, Canvas-ready workflow artifacts, and reusable calculator scripts for Euler’s Method, explicit time stepping, differential equations, slope-based updates, initial conditions, step-size sensitivity, local error, global error, stability, benchmark comparison, model governance, and responsible mathematical modeling.
Interpretive Limits and Responsible Use
Euler’s Method is valuable because it is transparent. It reveals how a current rate becomes a next state. But transparency does not guarantee accuracy. A large time step, unstable equation, long simulation horizon, or poorly specified rate function can produce misleading results.
Responsible use requires several checks. Document the differential equation, initial condition, parameter values, time step, simulation horizon, update rule, stability condition, and benchmark comparison. Compare multiple step sizes. Track accumulated error where an analytic or refined benchmark is available. Avoid treating an Euler trajectory as the system itself.
The central modeling question is not only “What does Euler’s Method produce?” It is “How sensitive is the trajectory to the time step, and does the numerical behavior reflect the system or the approximation?”
Related Articles
- Calculus for Systems Modeling
- Finite Difference Methods
- Differential Equations and Dynamic Systems
- Separable Equations and Simple Dynamic Laws
- Linear First-Order Differential Equations
- Systems of Differential Equations
- Runge–Kutta Methods
- Ordinary Differential Equation Solver Workflows
- Stability, Error, and Convergence in Numerical Modeling
- Modeling Population Dynamics
Further Reading
- Atkinson, K.E. (1989) An Introduction to Numerical Analysis. 2nd edn. New York: Wiley.
- Boyce, W.E., DiPrima, R.C. and Meade, D.B. (2017) Elementary Differential Equations and Boundary Value Problems. 11th edn. Hoboken, NJ: Wiley.
- Burden, R.L. and Faires, J.D. (2011) Numerical Analysis. 9th edn. Boston, MA: Brooks/Cole.
- Chapra, S.C. and Canale, R.P. (2015) Numerical Methods for Engineers. 7th edn. New York: McGraw-Hill Education.
- Hairer, E., Nørsett, S.P. and Wanner, G. (1993) Solving Ordinary Differential Equations I: Nonstiff Problems. 2nd edn. Berlin: Springer.
- Heath, M.T. (2018) Scientific Computing: An Introductory Survey. 2nd edn. Philadelphia, PA: Society for Industrial and Applied Mathematics.
- Iserles, A. (2009) A First Course in the Numerical Analysis of Differential Equations. 2nd edn. Cambridge: Cambridge University Press.
- Quarteroni, A., Sacco, R. and Saleri, F. (2007) Numerical Mathematics. 2nd edn. Berlin: Springer.
- Sauer, T. (2017) Numerical Analysis. 3rd edn. Boston, MA: Pearson.
- Massachusetts Institute of Technology (MIT) OpenCourseWare (2011) Introduction to Numerical Analysis. Cambridge, MA: MIT OpenCourseWare.
References
- Atkinson, K.E. (1989) An Introduction to Numerical Analysis. 2nd edn. New York: Wiley.
- Boyce, W.E., DiPrima, R.C. and Meade, D.B. (2017) Elementary Differential Equations and Boundary Value Problems. 11th edn. Hoboken, NJ: Wiley.
- Burden, R.L. and Faires, J.D. (2011) Numerical Analysis. 9th edn. Boston, MA: Brooks/Cole.
- Chapra, S.C. and Canale, R.P. (2015) Numerical Methods for Engineers. 7th edn. New York: McGraw-Hill Education.
- Hairer, E., Nørsett, S.P. and Wanner, G. (1993) Solving Ordinary Differential Equations I: Nonstiff Problems. 2nd edn. Berlin: Springer.
- Heath, M.T. (2018) Scientific Computing: An Introductory Survey. 2nd edn. Philadelphia, PA: Society for Industrial and Applied Mathematics.
- Iserles, A. (2009) A First Course in the Numerical Analysis of Differential Equations. 2nd edn. Cambridge: Cambridge University Press.
- Massachusetts Institute of Technology (MIT) OpenCourseWare (2011) Introduction to Numerical Analysis. Cambridge, MA: MIT OpenCourseWare.
- Quarteroni, A., Sacco, R. and Saleri, F. (2007) Numerical Mathematics. 2nd edn. Berlin: Springer.
- Sauer, T. (2017) Numerical Analysis. 3rd edn. Boston, MA: Pearson.
