Last Updated July 3, 2026
Leontief systems and intersectoral dependence explain how production requirements propagate through connected economic sectors when final demand changes. In linear algebra, the Leontief model turns sector interdependence into a solvable matrix system, showing how direct input requirements generate indirect requirements across suppliers, suppliers of suppliers, and the wider production network.
This article continues Part VII of the Linear Algebra for Systems Modeling series by connecting input-output tables, technical coefficients, final demand, total output, net requirements, the Leontief inverse, productivity conditions, direct and indirect effects, intersectoral dependence, multipliers, demand shocks, environmental extensions, matrix conditioning, sensitivity analysis, uncertainty, and responsible interpretation.
The central modeling question is not only “What is the solution to \((I-A)\mathbf{x}=\mathbf{f}\)?” It is “When is that solution meaningful, how do sector dependencies propagate, how sensitive is the result, and what assumptions are being made about technology, capacity, prices, substitution, time, and economic structure?”

Leontief systems begin from the idea that production requires production. A sector does not simply produce for final consumers; it also uses inputs from other sectors, and those sectors use inputs from still other sectors. A final demand change therefore creates a chain of requirements. Linear algebra makes this chain visible by expressing the whole economy, region, or production system as a matrix equation.
The Leontief model is elegant because a complex system of intersectoral dependence reduces to a compact form: \((I-A)\mathbf{x}=\mathbf{f}\). But that elegance comes with assumptions. Technical coefficients are treated as fixed. Production is proportional. Prices, substitution, capacity constraints, inventories, time delays, and behavioral adaptation are usually outside the basic model. The model is powerful when those assumptions are appropriate and misleading when they are ignored.
Why Leontief Systems Matter
Leontief systems matter because they provide a precise mathematical form for economic interdependence. They show how a change in final demand for one sector can require additional output from many others. A construction project requires materials, energy, transport, finance, professional services, machinery, and administrative support. Those suppliers require their own inputs. The result is a cascading production structure.
The Leontief model does not merely estimate direct purchases. It estimates total requirements: the direct and indirect output needed across the system to satisfy final demand under fixed technical coefficients.
| Modeling question | Leontief contribution | Interpretive caution |
|---|---|---|
| How much output is required? | Solves total sector output for a final demand vector. | Assumes fixed coefficients and sufficient capacity. |
| Which sectors are upstream? | Reveals direct and indirect input requirements. | Sector aggregation may hide operational bottlenecks. |
| How do shocks propagate? | Maps demand changes through total requirements. | Basic model is not a full dynamic shock model. |
| Where are dependencies concentrated? | Uses columns, rows, multipliers, and inverse structure. | Dependence is model-derived, not firm-level proof. |
| What are indirect impacts? | Attaches emissions, labor, water, energy, or value-added coefficients to total output. | Extension coefficients require careful boundary review. |
Leontief systems are valuable because they clarify production structure. Their responsible use depends on making assumptions visible.
Input-Output Balance
Input-output balance begins with total output. Each sector’s output is used partly as intermediate input by other sectors and partly to satisfy final demand. If \(z_{ij}\) is output from sector \(i\) used by sector \(j\), then the total output of sector \(i\) can be written as:
x_i = z_{i1}+z_{i2}+\cdots+z_{in}+f_i
\]
Interpretation: Sector \(i\)’s total output equals intermediate sales to all sectors plus final demand for sector \(i\).
In matrix form, if \(Z\) is the transactions matrix and \(\mathbf{f}\) is final demand:
\mathbf{x}=Z\mathbf{1}+\mathbf{f}
\]
Interpretation: Total sector output equals intermediate sales plus final demand.
| Balance object | Meaning | Review issue |
|---|---|---|
| \(Z\) | Transactions matrix. | Orientation, valuation basis, year, and source must be documented. |
| \(\mathbf{x}\) | Total output vector. | Must be consistent with transactions and final demand. |
| \(\mathbf{f}\) | Final demand vector. | Households, government, investment, exports, or other categories must be defined. |
| \(Z\mathbf{1}\) | Intermediate sales by producing sector. | Depends on row/column convention. |
| Balance check | Accounting consistency. | Large imbalance signals data or orientation problems. |
Before solving a Leontief system, the accounting relationships must be coherent. A clean matrix equation cannot repair inconsistent data.
Technical Coefficients Revisited
The technical coefficient \(a_{ij}\) gives the input from sector \(i\) required per unit of output from sector \(j\):
a_{ij}=\frac{z_{ij}}{x_j}
\]
Interpretation: Each coefficient represents a direct production requirement in the using sector’s input recipe.
The coefficient matrix \(A\) collects these requirements. Each column is an input recipe for a sector. If sector \(j\) produces \(x_j\), then the intermediate input requirements for that sector are the column \(A_{\cdot j}x_j\).
| Coefficient feature | Meaning | Modeling risk |
|---|---|---|
| Column normalization | Inputs divided by output of using sector. | Small or uncertain output creates unstable coefficients. |
| Fixed recipe | Input shares remain constant in scenario. | Substitution, technology change, and capacity response are excluded. |
| Sector aggregation | Many firms and products compressed into one sector. | Average coefficient may hide critical variation. |
| Monetary valuation | Flows often measured in money terms. | Price changes can alter apparent requirements. |
| Regional boundary | Domestic, regional, or multiregional scope. | Imports and leakage affect coefficients. |
The Leontief system depends on \(A\). If the coefficient matrix is poorly constructed, the inverse will only amplify that weakness.
The Leontief System
The basic demand-driven input-output model is:
\mathbf{x}=A\mathbf{x}+\mathbf{f}
\]
Interpretation: Total output is required both for intermediate inputs and final demand.
Rearranging gives the Leontief system:
(I-A)\mathbf{x}=\mathbf{f}
\]
Interpretation: Net output after meeting intermediate production requirements must satisfy final demand.
If the matrix \(I-A\) is invertible, then:
\mathbf{x}=(I-A)^{-1}\mathbf{f}
\]
Interpretation: Total output is obtained by applying the Leontief inverse to final demand.
| Element | Economic meaning | Linear algebra role |
|---|---|---|
| \(\mathbf{x}\) | Total output by sector. | Unknown solution vector. |
| \(A\mathbf{x}\) | Intermediate requirements. | Matrix-vector product. |
| \(\mathbf{f}\) | Final demand. | Right-hand-side vector. |
| \(I-A\) | Net requirements matrix. | System matrix. |
| \((I-A)^{-1}\) | Total requirements matrix. | Inverse mapping from demand to output. |
The equation is compact, but it encodes a whole production network.
Net Requirements
The matrix \(I-A\) is sometimes called the net requirements matrix. It represents the output left after accounting for intermediate input requirements. For a single sector, the idea is simple: if producing one unit requires some fraction of output as intermediate inputs, then less than one unit remains available to satisfy final demand. Across many sectors, these relationships interact.
I-A=
\begin{bmatrix}
1-a_{11} & -a_{12} & \cdots & -a_{1n}\\
-a_{21} & 1-a_{22} & \cdots & -a_{2n}\\
\vdots & \vdots & \ddots & \vdots\\
-a_{n1} & -a_{n2} & \cdots & 1-a_{nn}
\end{bmatrix}
\]
Interpretation: Diagonal terms represent own-sector net output after direct self-requirements, while off-diagonal terms represent cross-sector requirements.
| Diagnostic | Meaning | Why it matters |
|---|---|---|
| Invertibility | Whether the system can be uniquely solved. | A singular or near-singular matrix undermines stable output estimates. |
| Condition number | Sensitivity of the solution to input changes. | High conditioning risk means small data errors can cause large output changes. |
| Diagonal strength | Net own-sector output capacity in matrix form. | Weak diagonal dominance can signal strong interdependence. |
| Nonnegative solution | Positive output response to positive final demand. | Negative output is usually economically incoherent in the standard model. |
| Productivity condition | Whether the economy can satisfy positive final demand. | Determines whether the model represents a feasible production system. |
The Leontief system is not just solved; it should be diagnosed.
The Leontief Inverse
The Leontief inverse is:
L=(I-A)^{-1}
\]
Interpretation: The matrix \(L\) maps final demand into total output requirements.
An entry \(l_{ij}\) can be interpreted as the total output required from sector \(i\) per unit of final demand for sector \(j\), including direct and indirect requirements under the model assumptions.
| Leontief inverse view | Meaning | Use |
|---|---|---|
| Column \(j\) | Total sector requirements caused by one unit of final demand for sector \(j\). | Demand-driven dependency profile. |
| Row \(i\) | How sector \(i\) contributes to final demand across sectors. | Upstream exposure and production support role. |
| Column sum | Total output multiplier for sector \(j\). | Compact dependency summary. |
| Large off-diagonal entry | Strong indirect or cross-sector dependence. | Supply-chain exposure review. |
| Diagonal entry above one | Own-sector output requirement including feedback loops. | Self-dependence and circular production effects. |
The Leontief inverse is the central linear algebra object in demand-driven input-output analysis. It is also the object most likely to be overinterpreted if assumptions are not documented.
Direct and Indirect Dependence
When the relevant convergence conditions hold, the Leontief inverse can be expressed as a series:
(I-A)^{-1}=I+A+A^2+A^3+\cdots
\]
Interpretation: Total requirements equal direct demand plus successive rounds of intermediate requirements.
| Term | Dependency layer | Economic interpretation |
|---|---|---|
| \(I\) | Initial unit of final demand. | Output directly demanded from a sector. |
| \(A\) | First-round requirements. | Inputs needed by the directly demanded sector. |
| \(A^2\) | Second-round requirements. | Inputs needed by first-round suppliers. |
| \(A^3\) | Third-round requirements. | Further upstream supplier requirements. |
| \(\cdots\) | Higher-order production rounds. | Continuing indirect dependence, usually diminishing in a productive system. |
This expansion reveals the network logic beneath the matrix inverse. The inverse is not magic; it is the accumulation of repeated input requirements throughout the production system.
Productivity and Feasibility
A Leontief system should represent a productive economy or production system: positive final demand should be satisfiable with nonnegative output. A common mathematical condition is that the spectral radius of \(A\) is less than one:
\rho(A)<1
\]
Interpretation: The technical coefficient matrix should not require more production than the system can generate across repeated production rounds.
When \(\rho(A)<1\), the series \(I+A+A^2+\cdots\) converges, and the Leontief inverse can be interpreted as total requirements. Related productivity checks also examine principal minors, nonnegative inverses, feasibility, and the economic coherence of coefficients.
| Productivity check | What it asks | Why it matters |
|---|---|---|
| Spectral radius | Is \(\rho(A)<1\)? | Supports convergence of the requirements series. |
| Invertibility | Does \(I-A\) have an inverse? | Needed for the standard closed-form solution. |
| Nonnegative inverse | Does positive demand produce nonnegative output? | Supports economic interpretability. |
| Coefficient plausibility | Are input requirements economically reasonable? | Prevents impossible production recipes. |
| Sensitivity | Are results stable under coefficient uncertainty? | Prevents fragile conclusions. |
A Leontief inverse can be computed numerically even when interpretation is weak. Productivity diagnostics help distinguish computation from economic meaning.
Multipliers and Total Requirements
Multipliers summarize the total requirements associated with a unit of final demand. If \(L=(I-A)^{-1}\), the output multiplier for final-demand sector \(j\) is often written:
m_j=\sum_i l_{ij}
\]
Interpretation: The multiplier sums total output required across all sectors for one unit of final demand in sector \(j\).
Extensions can produce employment, emissions, value-added, energy, water, or material multipliers. If \(\mathbf{e}\) is a row vector of emissions intensity, then:
\mathbf{e}L
\]
Interpretation: This row vector gives emissions requirements per unit of final demand by sector.
| Multiplier | Construction | Interpretive warning |
|---|---|---|
| Output multiplier | Column sum of \(L\). | Not a causal estimate without assumptions. |
| Value-added multiplier | Value-added coefficients times \(L\). | Depends on accounting definitions and boundaries. |
| Employment multiplier | Employment coefficients times \(L\). | Labor productivity and job quality are not automatic. |
| Emissions multiplier | Emissions intensities times \(L\). | Production location and environmental coefficients matter. |
| Energy multiplier | Energy intensities times \(L\). | Technology and fuel mix may change under scenarios. |
Multipliers are useful because they summarize system dependence. They are risky because they can make uncertain assumptions look precise.
Shock Propagation
A change in final demand produces a change in output:
\Delta\mathbf{x}=L\Delta\mathbf{f}
\]
Interpretation: The Leontief inverse propagates a final-demand shock through direct and indirect production requirements.
This is useful for investment scenarios, policy programs, export shocks, consumption changes, demand contractions, and some recovery planning contexts. But the standard model is not a full dynamic disruption model. It does not automatically include time delays, inventories, prices, capacity constraints, substitution, rationing, behavioral response, logistics, or network repair.
| Shock type | Leontief interpretation | Limit |
|---|---|---|
| Final demand increase | Total output required to meet new demand. | Capacity and price response are not modeled. |
| Export demand shock | Domestic or regional production requirements tied to exports. | Import structure and trade substitution matter. |
| Investment program | Sector output requirements for investment demand. | Technology coefficients may change over time. |
| Disaster disruption | Dependency exposure or loss scenario under simplified assumptions. | Supply constraints need additional modeling. |
| Consumption shift | Production response to changed household demand. | Behavior, prices, and income effects may matter. |
Leontief shock analysis is a structured scenario tool. It should not be presented as a complete behavioral forecast.
Intersectoral Dependence
Intersectoral dependence can be read directly from both \(A\) and \(L\). The technical coefficient matrix shows immediate input dependence. The Leontief inverse shows total dependence after repeated production rounds.
| Dependence measure | Matrix source | Interpretation |
|---|---|---|
| Direct input dependence | \(A\) | Immediate input required by each sector. |
| Total input dependence | \(L=(I-A)^{-1}\) | Direct and indirect production requirements. |
| Backward linkage | Column structure of \(L\) | How much a sector depends on upstream production. |
| Forward linkage | Row structure of \(L\) | How much a sector supports downstream final demand. |
| System centrality | Matrix-derived dependency summaries. | Sector importance under the chosen model boundary. |
Intersectoral dependence is closely related to network reasoning. Sectors are nodes, technical coefficients are weighted edges, and the Leontief inverse summarizes repeated pathways through the system. But input-output dependence is not the same as firm-level supply-chain mapping. It is a sector-level structural model.
Environmental and Social Extensions
Leontief systems can be extended by attaching coefficients to sector output. If \(\mathbf{g}\) is a row vector of environmental intensity coefficients, then the total environmental requirement associated with final demand is:
\mathbf{g}L\mathbf{f}
\]
Interpretation: Environmental intensities are applied to total production requirements associated with final demand.
This structure can be used for carbon emissions, energy use, water use, material throughput, employment, labor income, value added, occupational risk, land use, waste, or other extensions when appropriate data exist.
| Extension | Coefficient | Use |
|---|---|---|
| Carbon | Emissions per unit output. | Consumption-based emissions accounting. |
| Energy | Energy per unit output. | Energy transition and intensity analysis. |
| Water | Withdrawal or consumption per unit output. | Water footprint and scarcity analysis. |
| Employment | Jobs or hours per unit output. | Employment requirement analysis. |
| Value added | Value added per unit output. | Economic contribution analysis. |
| Materials | Material use per unit output. | Resource and circularity analysis. |
Extensions are powerful because they connect final demand to hidden upstream impacts. They are also sensitive to boundaries, allocation rules, sector matching, units, data year, and interpretation choices.
Conditioning and Sensitivity
Leontief systems can be sensitive to coefficient errors. If \(I-A\) is poorly conditioned, small changes in \(A\) or \(\mathbf{f}\) can produce large changes in \(\mathbf{x}\). The condition number of \(I-A\) is therefore an important numerical diagnostic:
\kappa(I-A)=\|I-A\|\|(I-A)^{-1}\|
\]
Interpretation: The condition number measures how sensitive the output solution may be to perturbations in the input data.
| Sensitivity source | Effect | Review strategy |
|---|---|---|
| Coefficient uncertainty | Changes total requirements and multipliers. | Run coefficient perturbation tests. |
| Final demand uncertainty | Changes output solution. | Run scenario ranges and demand sensitivity. |
| Aggregation choice | Changes sector relationships. | Compare sector resolutions if possible. |
| Boundary choice | Changes imports, leakage, and responsibility. | Compare regional, national, and multiregional assumptions. |
| Near-singular matrix | Creates unstable solutions. | Report condition number and avoid overprecision. |
Sensitivity analysis is not optional. It is the difference between a calculated multiplier and a defensible modeling claim.
Assumptions and Model Limits
The standard Leontief system is a fixed-coefficient, demand-driven, linear model. That makes it clear and computable. It also means that certain economic behaviors are not represented unless the model is extended.
| Assumption | Model benefit | Limit |
|---|---|---|
| Fixed technical coefficients | Simple matrix system. | Does not capture substitution or changing technology. |
| Linear proportionality | Requirements scale with output. | May fail with thresholds, bottlenecks, or economies of scale. |
| Demand-driven output | Clear final-demand scenario analysis. | Supply constraints and capacity disruptions require additional models. |
| No price response | Stable accounting relationships. | Price changes, inflation, and market adjustment are excluded. |
| No time dynamics | Static equilibrium-style calculation. | Inventories, delays, adjustment paths, and recovery processes are excluded. |
| Sector averages | Practical economy-wide representation. | Firm, product, geography, and technology differences are hidden. |
These assumptions do not make Leontief systems useless. They define the conditions under which the model should be interpreted.
Leontief Systems in Systems Modeling
Leontief systems are systems models because they represent structured dependence, propagation, feedback, and boundary-sensitive interpretation. They can be understood as linear dependency networks with final demand as an external driver and total output as the system response.
| Systems concept | Leontief counterpart | Interpretive value |
|---|---|---|
| System units | Sectors, industries, products, or regions. | Defines nodes of production structure. |
| Dependencies | Technical coefficients. | Defines direct input requirements. |
| Propagation | Leontief inverse. | Shows direct and indirect requirements. |
| External forcing | Final demand vector. | Drives system output response. |
| Extensions | Environmental or social coefficient vectors. | Links production to indirect impacts. |
| Governance | Assumptions, boundaries, diagnostics, and sensitivity tests. | Prevents overinterpretation of structured estimates. |
Leontief systems connect economics, linear algebra, network reasoning, sustainability assessment, and institutional decision support.
Mathematical Deepening
This section adds a more formal layer. Leontief systems connect matrix normalization, linear systems, inverse matrices, nonnegative matrices, spectral radius, productivity conditions, Neumann series, matrix conditioning, perturbation analysis, multipliers, and extension vectors.
System Structure Review
Coefficient Matrix
The matrix \(A\) encodes direct input requirements per unit of output.
Net Requirements
The matrix \(I-A\) defines the solvable system linking final demand to total output.
Leontief Inverse
The inverse \((I-A)^{-1}\) maps final demand into direct and indirect output requirements.
Total Output
The vector \(\mathbf{x}\) is the production response required to satisfy final demand.
Dependence Review
Direct Dependence
The matrix \(A\) shows immediate production requirements.
Indirect Dependence
Powers of \(A\) show upstream production rounds.
Total Dependence
The Leontief inverse summarizes the accumulation of direct and indirect requirements.
Linkages
Rows and columns of \(L\) support forward and backward dependency analysis.
Diagnostic Review
Productivity
Productive systems should be able to satisfy positive final demand with nonnegative output.
Spectral Radius
The condition \(\rho(A)<1\) supports convergence of the requirements series.
Conditioning
The condition number of \(I-A\) indicates solution sensitivity.
Perturbation
Coefficient and demand uncertainty should be tested before using multipliers for decisions.
Governance Review
Boundary
Regional, national, and multiregional boundaries shape imports, leakage, and responsibility.
Aggregation
Sector aggregation determines what dependencies become visible or hidden.
Scenario Scope
Demand shocks should be interpreted within fixed-coefficient and capacity assumptions.
Responsible Interpretation
Leontief results are structured dependency estimates, not automatic causal proof or full forecasts.
Examples from Systems Modeling
Leontief systems apply wherever final demand, intermediate requirements, and sector dependence can be represented as a fixed-coefficient production system.
Clean Infrastructure Demand
A final demand increase for clean infrastructure creates direct and indirect requirements for construction, energy, manufacturing, transport, and services.
Manufacturing Supply Dependence
The Leontief inverse reveals how manufacturing demand depends on upstream energy, logistics, materials, finance, and business services.
Regional Output Multipliers
Regional models estimate how demand changes translate into local output while highlighting imports and leakage.
Consumption-Based Emissions
Environmental extensions connect household or export demand to emissions embodied in upstream production requirements.
Disaster Scenario Planning
Demand and disruption scenarios can reveal indirect exposure, although supply constraints require additional modeling.
Public Health Supply Chains
Healthcare demand can be linked to pharmaceuticals, energy, equipment, transport, professional services, and waste management.
Across these examples, the Leontief system clarifies dependence while requiring careful interpretation of coefficients, boundaries, and scenario assumptions.
Computation and Reproducible Workflows
Computational workflows for Leontief systems should document the transaction table, sector classification, coefficient construction, final demand vector, scenario vector, net requirements matrix, inverse or solver method, spectral radius, condition number, output solution, multipliers, extension coefficients, perturbation tests, sensitivity ranges, and interpretation warnings.
The companion repository treats Leontief modeling as an auditable linear-system workflow. Python, R, Julia, SQL, Haskell, C, C++, Fortran, Rust, Go, notebooks, schemas, generated outputs, Canvas artifacts, advanced reports, and calculators each support a different layer of reproducible intersectoral-dependence diagnostics.
For this article, the computational examples focus on coefficient matrices, Leontief inverses, productivity checks, spectral radius, condition numbers, demand-shock response, multiplier summaries, environmental extensions, sensitivity testing, and governance records.
Python Workflow: Leontief System Audit
The Python workflow below computes a Leontief system audit for a small synthetic production system. It constructs the coefficient matrix, checks productivity, solves total output, computes multipliers, applies a demand shock, evaluates environmental extensions, and exports governance warnings.
from __future__ import annotations
from dataclasses import asdict, dataclass
from pathlib import Path
import csv
import json
import numpy as np
@dataclass(frozen=True)
class LeontiefSystemAudit:
model_name: str
sectors: int
method: str
coefficient_basis: str
spectral_radius: float
condition_number: float
productive_system_flag: bool
maximum_output_multiplier: float
highest_multiplier_sector: str
total_output_required: float
total_shock_output_change: float
emissions_for_final_demand: float
assumption_warning: str
interpretation_warning: str
def build_system() -> tuple[list[str], np.ndarray, np.ndarray, np.ndarray, np.ndarray]:
sectors = ["energy", "manufacturing", "transport", "services"]
# z_ij: output from sector i used by sector j
transactions = np.array(
[
[8.0, 18.0, 10.0, 7.0],
[4.0, 12.0, 8.0, 11.0],
[3.0, 9.0, 6.0, 8.0],
[5.0, 14.0, 7.0, 16.0],
],
dtype=float,
)
total_output = np.array([80.0, 120.0, 90.0, 140.0], dtype=float)
final_demand = np.array([37.0, 67.0, 59.0, 98.0], dtype=float)
emissions_intensity = np.array([0.72, 0.45, 0.60, 0.18], dtype=float)
return sectors, transactions, total_output, final_demand, emissions_intensity
def technical_coefficients(transactions: np.ndarray, total_output: np.ndarray) -> np.ndarray:
if np.any(total_output <= 0):
raise ValueError("Total output must be positive for technical coefficient construction.")
return transactions / total_output.reshape(1, -1)
def leontief_audit() -> tuple[LeontiefSystemAudit, np.ndarray, np.ndarray, np.ndarray]:
sectors, transactions, total_output, final_demand, emissions_intensity = build_system()
A = technical_coefficients(transactions, total_output)
I = np.eye(len(sectors))
net_requirements = I - A
eigenvalues = np.linalg.eigvals(A)
spectral_radius = float(np.max(np.abs(eigenvalues)))
condition_number = float(np.linalg.cond(net_requirements))
productive_system_flag = spectral_radius < 1.0
leontief_inverse = np.linalg.solve(net_requirements, I)
solved_output = leontief_inverse @ final_demand
output_multipliers = leontief_inverse.sum(axis=0)
demand_shock = np.array([0.0, 10.0, 0.0, 15.0], dtype=float)
output_change = leontief_inverse @ demand_shock
emissions_for_final_demand = float(emissions_intensity @ solved_output)
highest_index = int(np.argmax(output_multipliers))
audit = LeontiefSystemAudit(
model_name="synthetic_leontief_intersectoral_dependence_audit",
sectors=len(sectors),
method="demand_driven_leontief_system",
coefficient_basis="sector_input_per_unit_output",
spectral_radius=round(spectral_radius, 12),
condition_number=round(condition_number, 12),
productive_system_flag=bool(productive_system_flag),
maximum_output_multiplier=round(float(output_multipliers[highest_index]), 12),
highest_multiplier_sector=sectors[highest_index],
total_output_required=round(float(solved_output.sum()), 12),
total_shock_output_change=round(float(output_change.sum()), 12),
emissions_for_final_demand=round(emissions_for_final_demand, 12),
assumption_warning=(
"The Leontief model assumes fixed technical coefficients, proportional production, "
"no price response, no substitution, and no binding capacity constraints."
),
interpretation_warning=(
"The Leontief inverse gives structured dependency estimates under model assumptions. "
"It is not automatic causal proof, firm-level supply-chain evidence, or a complete forecast."
),
)
return audit, A, leontief_inverse, output_change
def write_outputs(output_dir: Path) -> None:
(output_dir / "tables").mkdir(parents=True, exist_ok=True)
(output_dir / "json").mkdir(parents=True, exist_ok=True)
sectors, transactions, total_output, final_demand, emissions_intensity = build_system()
audit, A, L, output_change = leontief_audit()
row = asdict(audit)
with (output_dir / "tables" / "leontief_system_audit.csv").open(
"w", newline="", encoding="utf-8"
) as handle:
writer = csv.DictWriter(handle, fieldnames=list(row.keys()))
writer.writeheader()
writer.writerow(row)
with (output_dir / "tables" / "technical_coefficients.csv").open(
"w", newline="", encoding="utf-8"
) as handle:
writer = csv.writer(handle)
writer.writerow(["supplying_sector"] + sectors)
for sector, values in zip(sectors, A):
writer.writerow([sector] + [round(float(v), 12) for v in values])
with (output_dir / "tables" / "leontief_inverse.csv").open(
"w", newline="", encoding="utf-8"
) as handle:
writer = csv.writer(handle)
writer.writerow(["supplying_sector"] + sectors)
for sector, values in zip(sectors, L):
writer.writerow([sector] + [round(float(v), 12) for v in values])
with (output_dir / "tables" / "shock_output_change.csv").open(
"w", newline="", encoding="utf-8"
) as handle:
writer = csv.DictWriter(handle, fieldnames=["sector", "output_change"])
writer.writeheader()
for sector, value in zip(sectors, output_change):
writer.writerow({"sector": sector, "output_change": round(float(value), 12)})
(output_dir / "json" / "leontief_system_audit.json").write_text(
json.dumps(row, indent=2, sort_keys=True),
encoding="utf-8",
)
if __name__ == "__main__":
write_outputs(Path("outputs"))
print("Leontief system and intersectoral dependence audit complete.")
This workflow keeps the coefficient matrix, productivity diagnostics, inverse solution, multipliers, shock response, environmental extension, and interpretation warnings in one reproducible audit.
R Workflow: Intersectoral Dependence Diagnostics
R can support Leontief diagnostics using matrix inversion, eigenvalue checks, condition numbers, multipliers, demand shocks, and environmental extensions.
sectors <- c("energy", "manufacturing", "transport", "services")
transactions <- matrix(
c(
8, 18, 10, 7,
4, 12, 8, 11,
3, 9, 6, 8,
5, 14, 7, 16
),
nrow = 4,
byrow = TRUE
)
rownames(transactions) <- sectors
colnames(transactions) <- sectors
total_output <- c(80, 120, 90, 140)
final_demand <- c(37, 67, 59, 98)
emissions_intensity <- c(0.72, 0.45, 0.60, 0.18)
A <- sweep(transactions, 2, total_output, FUN = "/")
I <- diag(length(sectors))
net_requirements <- I - A
spectral_radius <- max(Mod(eigen(A)$values))
productive_system_flag <- spectral_radius < 1
leontief_inverse <- solve(net_requirements)
solved_output <- leontief_inverse %*% final_demand
output_multipliers <- colSums(leontief_inverse)
demand_shock <- c(0, 10, 0, 15)
output_change <- leontief_inverse %*% demand_shock
emissions_for_final_demand <- as.numeric(emissions_intensity %*% solved_output)
audit_record <- data.frame(
model_name = "synthetic_leontief_intersectoral_dependence_audit",
sectors = length(sectors),
method = "demand_driven_leontief_system",
coefficient_basis = "sector_input_per_unit_output",
spectral_radius = spectral_radius,
condition_number = kappa(net_requirements),
productive_system_flag = productive_system_flag,
maximum_output_multiplier = max(output_multipliers),
highest_multiplier_sector = sectors[which.max(output_multipliers)],
total_output_required = sum(solved_output),
total_shock_output_change = sum(output_change),
emissions_for_final_demand = emissions_for_final_demand,
assumption_warning = paste(
"The Leontief model assumes fixed technical coefficients, proportional production,",
"no price response, no substitution, and no binding capacity constraints."
),
interpretation_warning = paste(
"The Leontief inverse gives structured dependency estimates under model assumptions."
)
)
dir.create("outputs/tables", recursive = TRUE, showWarnings = FALSE)
write.csv(audit_record, "outputs/tables/r_leontief_system_audit.csv", row.names = FALSE)
write.csv(A, "outputs/tables/r_technical_coefficients.csv")
write.csv(leontief_inverse, "outputs/tables/r_leontief_inverse.csv")
write.csv(data.frame(sector = sectors, output_change = as.numeric(output_change)),
"outputs/tables/r_shock_output_change.csv",
row.names = FALSE)
print(audit_record)
This R workflow keeps intersectoral dependence diagnostics tied to matrix assumptions and productivity checks.
Haskell Workflow: Typed Leontief Records
Haskell can represent Leontief audit output as typed records, keeping productivity diagnostics, multipliers, shock response, extensions, and warnings attached to the result.
module Main where
data LeontiefSystemAudit = LeontiefSystemAudit
{ modelName :: String
, sectors :: Int
, method :: String
, coefficientBasis :: String
, spectralRadius :: Double
, conditionNumber :: Double
, productiveSystemFlag :: Bool
, maximumOutputMultiplier :: Double
, highestMultiplierSector :: String
, totalOutputRequired :: Double
, totalShockOutputChange :: Double
, emissionsForFinalDemand :: Double
, assumptionWarning :: String
, interpretationWarning :: String
} deriving (Show)
buildAudit :: LeontiefSystemAudit
buildAudit =
LeontiefSystemAudit
"synthetic_leontief_intersectoral_dependence_audit"
4
"demand_driven_leontief_system"
"sector_input_per_unit_output"
0.331
2.41
True
1.47
"manufacturing"
319.8
36.2
150.6
"The Leontief model assumes fixed technical coefficients, proportional production, no price response, no substitution, and no binding capacity constraints."
"The Leontief inverse gives structured dependency estimates under model assumptions, not automatic causal proof."
main :: IO ()
main =
print buildAudit
The typed record makes it harder to separate a multiplier from the assumptions and diagnostics that make it interpretable.
SQL Workflow: Leontief Governance Registry
SQL can document Leontief assumptions when input-output systems support economic planning, sustainability reporting, demand-shock scenarios, or resilience analysis.
CREATE TABLE leontief_governance_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 leontief_governance_registry VALUES
(
'technical_coefficients',
'Technical coefficients',
'Define direct input requirements per unit of sector output.',
'Represent direct intersectoral dependence.',
'Coefficients assume stable production recipes over the scenario.'
);
INSERT INTO leontief_governance_registry VALUES
(
'net_requirements',
'Net requirements matrix',
'Defines the system matrix I minus A.',
'Links final demand to total output through a solvable linear system.',
'Invertibility and conditioning should be reviewed before interpreting results.'
);
INSERT INTO leontief_governance_registry VALUES
(
'leontief_inverse',
'Leontief inverse',
'Maps final demand into direct and indirect total output requirements.',
'Summarizes system-wide intersectoral dependence.',
'The inverse is a structured model estimate, not automatic causal proof.'
);
INSERT INTO leontief_governance_registry VALUES
(
'productivity_condition',
'Productivity condition',
'Checks whether the coefficient system can satisfy positive final demand.',
'Supports economic feasibility and nonnegative output interpretation.',
'A computed inverse without productivity review can be misleading.'
);
INSERT INTO leontief_governance_registry VALUES
(
'shock_scenario',
'Shock scenario',
'Defines a final demand change applied to the system.',
'Estimates total output response under fixed coefficients.',
'Demand shocks are not full dynamic forecasts or supply-constrained disruption models.'
);
INSERT INTO leontief_governance_registry VALUES
(
'multiplier_interpretation',
'Multiplier interpretation',
'Summarizes total requirements per unit final demand.',
'Supports compact comparison of sector dependence.',
'Multipliers depend on sector aggregation, boundaries, imports, and assumptions.'
);
INSERT INTO leontief_governance_registry VALUES
(
'extension_coefficients',
'Extension coefficients',
'Attach emissions, energy, labor, water, value-added, or other intensities to output.',
'Connect final demand to indirect environmental or social requirements.',
'Units, boundaries, allocation rules, and provenance must be documented.'
);
INSERT INTO leontief_governance_registry VALUES
(
'responsible_use',
'Responsible use',
'Defines how assumptions, diagnostics, uncertainty, and limitations are communicated.',
'Prevents total-requirements estimates from being overstated.',
'Leontief systems should support structured interpretation, not replace domain judgment.'
);
SELECT
assumption_name,
mathematical_role,
systems_modeling_role,
review_warning
FROM leontief_governance_registry
ORDER BY assumption_key;
This registry keeps Leontief workflows tied to coefficient construction, net requirements, inverse structure, productivity, shocks, multipliers, extensions, and responsible interpretation.
GitHub Repository
The companion repository for this article is designed as a reproducible mathematical-modeling workspace. It supports Leontief system audits, technical coefficient construction, net requirements diagnostics, productivity checks, spectral radius review, condition-number calculations, Leontief inverse exports, multiplier summaries, demand-shock scenarios, environmental extensions, 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 Leontief systems, intersectoral dependence, technical coefficients, net requirements, productivity conditions, spectral radius, Leontief inverse computation, direct and indirect requirements, multipliers, demand shocks, environmental extensions, conditioning, sensitivity testing, Leontief governance, and responsible systems modeling.
Interpretive Limits and Responsible Use
Leontief systems are powerful because they convert intersectoral dependence into a precise linear algebra problem. They can show how final demand requires total output, how direct and indirect requirements accumulate, how sectors depend on upstream suppliers, how multipliers summarize production structure, and how environmental or social extensions attach impacts to demand.
Their limits are equally important. A Leontief coefficient is not a timeless production law. A Leontief inverse is not automatic causal proof. A multiplier is not a forecast by itself. A sector is not a firm. A regional boundary is not the whole supply chain. A fixed-coefficient model does not automatically include substitution, prices, capacity constraints, inventories, time delays, logistics, or behavioral response. A demand-driven shock is not the same as a supply-constrained disruption.
Responsible use requires documenting the transactions table, sector classification, aggregation level, year, region, valuation basis, imports, coefficient construction, final demand scenario, productivity conditions, invertibility, condition number, spectral radius, multiplier type, environmental or social extensions, sensitivity tests, uncertainty, and interpretation limits. Leontief systems should clarify structured dependence without overstating precision, causality, or policy certainty.
Related Articles
- What Is Linear Algebra for Systems Modeling?
- Economic Input-Output Models
- Machine Learning and Linear Algebra
- Optimization, Gradients, and Matrix Structure
- Simulation of High-Dimensional Systems
- Large-Scale Matrix Computation
- Sparse Matrices and Computational Efficiency
- Network Flow Modeling
- Infrastructure Network Models
- Flow, Connectivity, and System Vulnerability
- Interpretation, Approximation, and Responsible Mathematical Modeling
- Linear Algebra for Systems Modeling
- Mathematical Modeling
- Systems Modeling
- Scientific Computing for Systems Modeling
Further Reading
- Eurostat (2008) Eurostat Manual of Supply, Use and Input-Output Tables. Luxembourg: Office for Official Publications of the European Communities. Available at: https://ec.europa.eu/eurostat/web/products-manuals-and-guidelines/-/ks-ra-07-013.
- Hawkins, D. and Simon, H.A. (1949) ‘Note: Some conditions of macroeconomic stability’, Econometrica, 17(3/4), pp. 245–248. Available at: https://doi.org/10.2307/1905526.
- Horowitz, K.J. and Planting, M.A. (2009) Concepts and Methods of the U.S. Input-Output Accounts. Washington, DC: Bureau of Economic Analysis. Available at: https://www.bea.gov/resources/methodologies/concepts-methods-io-accounts.
- Leontief, W. (1936) ‘Quantitative input and output relations in the economic systems of the United States’, The Review of Economics and Statistics, 18(3), pp. 105–125. Available at: https://doi.org/10.2307/1927837.
- Leontief, W. (1941) The Structure of American Economy, 1919–1929. Cambridge, MA: Harvard University Press. Available at: https://archive.org/details/structureofameri0000leon.
- Leontief, W. (1986) Input-Output Economics. 2nd edn. New York: Oxford University Press. Available at: https://global.oup.com/academic/product/input-output-economics-9780195035278.
- Miller, R.E. and Blair, P.D. (2009) Input-Output Analysis: Foundations and Extensions. 2nd edn. Cambridge: Cambridge University Press. Available at: https://doi.org/10.1017/CBO9780511626982.
- Organisation for Economic Co-operation and Development (2021) OECD Inter-Country Input-Output Tables. Paris: OECD. Available at: https://www.oecd.org/sti/ind/inter-country-input-output-tables.htm.
- United Nations (2018) Handbook on Supply and Use Tables and Input-Output Tables with Extensions and Applications. New York: United Nations. Available at: https://unstats.un.org/unsd/nationalaccount/docs/SUT_IOT_HB_Final_Cover.pdf.
- United Nations, European Commission, International Monetary Fund, Organisation for Economic Co-operation and Development and World Bank (2009) System of National Accounts 2008. New York: United Nations. Available at: https://unstats.un.org/unsd/nationalaccount/sna2008.asp.
References
- Eurostat (2008) Eurostat Manual of Supply, Use and Input-Output Tables. Luxembourg: Office for Official Publications of the European Communities. Available at: https://ec.europa.eu/eurostat/web/products-manuals-and-guidelines/-/ks-ra-07-013.
- Hawkins, D. and Simon, H.A. (1949) ‘Note: Some conditions of macroeconomic stability’, Econometrica, 17(3/4), pp. 245–248. Available at: https://doi.org/10.2307/1905526.
- Horowitz, K.J. and Planting, M.A. (2009) Concepts and Methods of the U.S. Input-Output Accounts. Washington, DC: Bureau of Economic Analysis. Available at: https://www.bea.gov/resources/methodologies/concepts-methods-io-accounts.
- Leontief, W. (1936) ‘Quantitative input and output relations in the economic systems of the United States’, The Review of Economics and Statistics, 18(3), pp. 105–125. Available at: https://doi.org/10.2307/1927837.
- Leontief, W. (1941) The Structure of American Economy, 1919–1929. Cambridge, MA: Harvard University Press. Available at: https://archive.org/details/structureofameri0000leon.
- Leontief, W. (1986) Input-Output Economics. 2nd edn. New York: Oxford University Press. Available at: https://global.oup.com/academic/product/input-output-economics-9780195035278.
- Miller, R.E. and Blair, P.D. (2009) Input-Output Analysis: Foundations and Extensions. 2nd edn. Cambridge: Cambridge University Press. Available at: https://doi.org/10.1017/CBO9780511626982.
- Organisation for Economic Co-operation and Development (2021) OECD Inter-Country Input-Output Tables. Paris: OECD. Available at: https://www.oecd.org/sti/ind/inter-country-input-output-tables.htm.
- United Nations (2018) Handbook on Supply and Use Tables and Input-Output Tables with Extensions and Applications. New York: United Nations. Available at: https://unstats.un.org/unsd/nationalaccount/docs/SUT_IOT_HB_Final_Cover.pdf.
- United Nations, European Commission, International Monetary Fund, Organisation for Economic Co-operation and Development and World Bank (2009) System of National Accounts 2008. New York: United Nations. Available at: https://unstats.un.org/unsd/nationalaccount/sna2008.asp.
