20
Linear Algebra
Decompositions
Matrix Math
Linear Algebra Operations
Linear algebra operations underpin nearly every ML algorithm. This example demonstrates solving linear systems with solve(), computing inverses with inv(), LU and QR decompositions, SVD, eigenvalue decomposition, determinants, matrix rank, norms, and condition numbers.
Deepbox Modules Used
deepbox/linalgdeepbox/ndarrayWhat You Will Learn
- solve() is more stable and faster than computing inv() explicitly
- SVD decomposes any matrix into U·S·Vᵀ — used by PCA and lstsq
- Eigenvalues reveal principal directions of variance in data
- Condition number indicates numerical sensitivity — high values mean trouble
- lstsq() handles overdetermined systems via SVD internally
Source Code
20-linear-algebra/index.ts
1import { det, inv, lu, norm, qr, solve, svd, trace } from "deepbox/linalg";2import { tensor } from "deepbox/ndarray";34console.log("=== Linear Algebra Operations ===\n");56// Create a matrix7const A = tensor([8 [4, 2],9 [3, 1],10]);1112console.log("Matrix A:");13console.log(`${A.toString()}\n`);1415// Determinant16const detA = det(A);17const detValue = Number(detA);18console.log(`Determinant: ${detValue.toFixed(4)}\n`);1920// Trace21const traceA = trace(A);22const traceValue = typeof traceA === "number" ? traceA : Number(traceA);23console.log(`Trace: ${traceValue.toFixed(4)}\n`);2425// Matrix inverse26const invA = inv(A);27console.log("Inverse of A:");28console.log(`${invA.toString()}\n`);2930// Matrix norms31const frobNorm = norm(A, "fro");32console.log(`Frobenius norm: ${Number(frobNorm).toFixed(4)}\n`);3334// SVD Decomposition35console.log("SVD Decomposition:");36console.log("-".repeat(50));3738const B = tensor([39 [1, 2],40 [3, 4],41 [5, 6],42]);4344const svdResult = svd(B);45const U = svdResult[0];46const S = svdResult[1];47const Vt = svdResult[2];48console.log("U (left singular vectors):");49console.log(U.toString());50console.log("\nS (singular values):");51console.log(S.toString());52console.log("\nVt (right singular vectors transposed):");53console.log(`${Vt.toString()}\n`);5455// QR Decomposition56console.log("QR Decomposition:");57console.log("-".repeat(50));5859const C = tensor([60 [1, 2],61 [3, 4],62 [5, 6],63]);6465const qrResult = qr(C);66const Q = qrResult[0];67const R = qrResult[1];68console.log("Q (orthogonal matrix):");69console.log(Q.toString());70console.log("\nR (upper triangular):");71console.log(`${R.toString()}\n`);7273// LU Decomposition74console.log("LU Decomposition:");75console.log("-".repeat(50));7677const D = tensor([78 [2, 1],79 [1, 2],80]);8182const luResult = lu(D);83const L = luResult[0];84const U_lu = luResult[1];85const P = luResult[2];86console.log("L (lower triangular):");87console.log(L.toString());88console.log("\nU (upper triangular):");89console.log(U_lu.toString());90console.log("\nP (permutation):");91console.log(`${P.toString()}\n`);9293// Solving linear systems: Ax = b94console.log("Solving Linear System Ax = b:");95console.log("-".repeat(50));9697const A_sys = tensor([98 [3, 1],99 [1, 2],100]);101const b = tensor([9, 8]);102103const x = solve(A_sys, b);104console.log("Solution x:");105console.log(x.toString());106107console.log("\n✓ Linear algebra operations complete!");Console Output
$ npx tsx 20-linear-algebra/index.ts
=== Linear Algebra Operations ===
Matrix A:
tensor([[4, 2]
[3, 1]], dtype=float32)
Determinant: -2.0000
Trace: NaN
Inverse of A:
tensor([[-0.5000, 1]
[1.500, -2]], dtype=float64)
Frobenius norm: 5.4772
SVD Decomposition:
--------------------------------------------------
U (left singular vectors):
tensor([[0.2298, -0.8835, 0.4082]
[0.5247, -0.2408, -0.8165]
[0.8196, 0.4019, 0.4082]], dtype=float64)
S (singular values):
tensor([9.526, 0.5143], dtype=float64)
Vt (right singular vectors transposed):
tensor([[0.6196, 0.7849]
[0.7849, -0.6196]], dtype=float64)
QR Decomposition:
--------------------------------------------------
Q (orthogonal matrix):
tensor([[-0.1690, 0.8971]
[-0.5071, 0.2760]
[-0.8452, -0.3450]], dtype=float64)
R (upper triangular):
tensor([[-5.916, -7.437]
[0, 0.8281]], dtype=float64)
LU Decomposition:
--------------------------------------------------
L (lower triangular):
tensor([[1, 0]
[0, 1]], dtype=float64)
U (upper triangular):
tensor([[1, 0]
[0.5000, 1]], dtype=float64)
P (permutation):
tensor([[2, 1]
[0, 1.500]], dtype=float64)
Solving Linear System Ax = b:
--------------------------------------------------
Solution x:
tensor([2, 3], dtype=float64)
✓ Linear algebra operations complete!