Source code for spectral.utils.norms

"""Numerical norms and error computations."""

from __future__ import annotations

import numpy as np


[docs] def discrete_l2_norm(values: np.ndarray, h: float) -> float: """Approximate L2 norm using composite trapezoidal rule. Parameters ---------- values : np.ndarray Function values at discrete points h : float Grid spacing Returns ------- float Approximate L2 norm """ return np.sqrt(h * np.sum(np.abs(values) ** 2))
[docs] def discrete_l2_error( f_exact: np.ndarray, f_num: np.ndarray, interval_length: float ) -> float: """Compute discrete L2 error between exact and numerical solutions. #TODO: Change to use Mass Matrix instead Parameters ---------- f_exact : np.ndarray Exact function values f_num : np.ndarray Numerical approximation values interval_length : float Length of the interval Returns ------- float Discrete L2 error norm """ diff = f_num - f_exact h = interval_length / f_exact.size return np.sqrt(h) * np.linalg.norm(diff)
[docs] def discrete_linf_error(f_exact: np.ndarray, f_num: np.ndarray) -> float: """Compute discrete :math:`L^\\infty` (maximum) error. Parameters ---------- f_exact : np.ndarray Exact function values f_num : np.ndarray Numerical approximation values Returns ------- float Maximum absolute error """ return np.max(np.abs(f_num - f_exact))