Source code for numpyy.approximation

import numpy as np
from .config import est_pedagogique

[docs] def matrice_conception(x, degre): """ Genere la matrice de conception (Vandermonde) pour les moindres carres. Args: x (array_like): Points d'abscisse. degre (int): Degre du polynome. Returns: ndarray: Matrice de conception. """ return np.vander(x, degre + 1)
[docs] def equations_normales(x, y, degre): """ Formule les equations normales (A.T @ A)x = A.T @ y. Args: x (array_like): Points d'abscisse. y (array_like): Points d'ordonnee. degre (int): Degre du polynome. Returns: tuple: (Matrice de gauche, Vecteur de droite). """ A = matrice_conception(x, degre) gauche = A.T @ A droite = A.T @ y if est_pedagogique(): print("[Pedagogique] Equations Normales (A.T @ A)x = A.T @ y:") print(f" Matrice A.T @ A:\n{gauche}") print(f" Vecteur A.T @ y: {droite}") return gauche, droite
[docs] def moindres_carres(x, y, degre, pedagogique=None): """ Realise une approximation par moindres carres. Args: x (array_like): Points d'abscisse. y (array_like): Points d'ordonnee. degre (int): Degre du polynome d'approximation. pedagogique (bool, optional): Affiche les details si True. Returns: poly1d: Le polynome d'approximation. """ coeffs = np.polyfit(x, y, degre) poly = np.poly1d(coeffs) if est_pedagogique(pedagogique): print(f"[Pedagogique] Moindres Carres (degre {degre}) Coeffs: {coeffs}") return poly
[docs] def moindres_carres_origine(x, y, pedagogique=None): """ Ajustement lineaire passant par l'origine (y = mx). Args: x (array_like): Points d'abscisse. y (array_like): Points d'ordonnee. pedagogique (bool, optional): Affiche les etapes si True. Returns: callable: Fonction f(x) = mx. """ m = np.sum(x * y) / np.sum(x**2) if est_pedagogique(pedagogique): print(f"[Pedagogique] Moindres Carres par Origine (y = mx):") print(f" Pente m = sum(x*y) / sum(x^2) = {m}") return lambda t: m * t
[docs] def nombre_condition(A): """ Calcule le nombre de conditionnement d'une matrice. Args: A (ndarray): La matrice a analyser. Returns: float: Le nombre de condition. """ return np.linalg.cond(A)
def est_mal_conditionne(A, seuil=1e10): cond = nombre_condition(A) return cond > seuil