Euler’s Method for Systems Modeling: Step-by-Step Numerical Simulation

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.

Vintage mathematical modeling desk with stepwise tangent approximations, curve sketches, flow diagrams, water channels, notebooks, transparent overlays, and drafting tools representing Euler’s Method.
Euler’s Method approximates dynamic change by taking small stepwise moves along local slope directions.

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

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?”

Back to top ↑

Back to top ↑

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.

Back to top ↑

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.

Back to top ↑

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top