import numpy as np
from .utils import joli_polynome, imprimer_etapes
from .config import est_pedagogique
import math
def poly_evaluer(coeffs, x):
return np.polyval(coeffs, x)
[docs]
def horner(coeffs, x, pedagogique=None):
"""
Evalue un polynome en utilisant la methode de Horner.
Args:
coeffs (array_like): Coefficients du polynome [a_n, ..., a_0].
x (float): Valeur a laquelle evaluer le polynome.
pedagogique (bool, optional): Affiche les etapes de calcul si True.
Returns:
float: Valeur du polynome au point x.
"""
resultat = 0
etapes = []
for c in coeffs:
old_result = resultat
resultat = resultat * x + c
if est_pedagogique(pedagogique):
etapes.append(f"Resultat = ({old_result} * {x}) + {c} = {resultat}")
if est_pedagogique(pedagogique):
imprimer_etapes(f"Methode de Horner (x={x})", etapes)
return resultat
def horner_etapes(coeffs, x):
return horner(coeffs, x, pedagogique=True)
def poly_derivee(coeffs):
return np.polyder(coeffs).coeffs
def poly_integrale(coeffs):
return np.polyint(coeffs).coeffs
[docs]
def taylor(f, a, n, h=0.01):
"""
Calcule les coefficients du polynome de Taylor d'ordre n au point a.
Args:
f (callable): Fonction a approximer.
a (float): Point d'expansion.
n (int): Ordre du polynome.
h (float, optional): Pas utilise pour la differentiation.
Returns:
ndarray: Coefficients du polynome de Taylor [a_n, ..., a_0].
"""
from .derivation import derivee_nieme
coeffs = []
for i in range(n, -1, -1):
fact = math.factorial(i)
deriv = derivee_nieme(f, a, i, h)
coeffs.append(deriv / fact)
return np.array(coeffs)