from .formules import formules
from . import extraits
_SUMMARIES = {
"simpson": {
"name": "Regle de Simpson 1/3",
"order": "O(h^4)",
"formula": "∫f(x)dx ≈ h/3 [f(x0) + 4f(x1) + f(x2)]",
"error": "-(b-a)^5 / 2880 * f⁽⁴⁾(ξ)",
"best_for": "Fonctions lisses."
},
"trapeze": {
"name": "Regle du Trapeze",
"order": "O(h^2)",
"formula": "∫f(x)dx ≈ h/2 [f(x0) + f(x1)]",
"error": "-(b-a)^3 / 12 * f''(ξ)",
"best_for": "Fonctions simples."
},
"euler": {
"name": "Methode d'Euler",
"order": "O(h)",
"formula": "y_{i+1} = y_i + h * f(t_i, y_i)",
"error": "Local: O(h^2), Global: O(h)",
"best_for": "ODEs simples."
},
"rk4": {
"name": "Runge-Kutta 4eme ordre",
"order": "O(h^4)",
"formula": "y_{i+1} = y_i + (h/6)(k1 + 2k2 + 2k3 + k4)",
"error": "O(h^4)",
"best_for": "La plupart des problemes non-raides."
}
}
[docs]
def method_summary(nom_methode):
"""
Affiche un resume technique d'une methode numerique.
Args:
nom_methode (str): Nom de la methode (ex: 'simpson').
"""
methode = nom_methode.lower()
if methode in _SUMMARIES:
s = _SUMMARIES[methode]
print(f"\nMethode: {s['name']}")
print(f"Ordre: {s['order']}")
print(f"\nFormule:\n{s['formula']}")
print(f"\nErreur:\n{s['error']}")
print(f"\nIdeal pour:\n{s['best_for']}")
else:
print(f"Resume pour '{nom_methode}' non trouve.")
[docs]
def explain(nom_methode=None):
"""Replaces previous 'help' to avoid shadowing builtin help()."""
if nom_methode is None:
print("Bienvenue dans les explications numforge!")
print("Methodes disponibles: " + ", ".join(_SUMMARIES.keys()))
print("Usage: ny.explain('simpson')")
return
methode = nom_methode.lower()
if methode in _SUMMARIES:
method_summary(methode)
else:
if hasattr(formules, methode):
print(getattr(formules, methode))
else:
print(f"Aucune explication disponible pour '{nom_methode}'.")
[docs]
def solve_tp(sujet):
sujet = sujet.lower()
print(f"\n--- 🧪 Assistant Labo: {sujet.upper()} ---")
if "interpolation" in sujet:
print("Workflow: Donnees -> Vandermonde -> Newton/Lagrange -> Tracé")
else:
print("Sujet non couvert.")
[docs]
def tp_report(titre, nom_etudiant, resultats):
"""
Genere un rapport de TP au format Markdown.
Args:
titre (str): Titre du rapport.
nom_etudiant (str): Nom de l'etudiant.
resultats (list): Liste de dictionnaires contenant 'methode', 'resultat' et 'erreur'.
"""
filename = f"{titre.lower().replace(' ', '_')}_rapport.md"
with open(filename, "w") as f:
f.write(f"# 🧬 Rapport de TP: {titre}\n\n**Etudiant:** {nom_etudiant}\n\n")
f.write("| Methode | Resultat | Erreur |\n| --- | --- | --- |\n")
for item in resultats:
f.write(f"| {item.get('methode')} | {item.get('resultat')} | {item.get('erreur', 'N/A')} |\n")
print(f"✅ Rapport genere: {filename}")