Source code for numpyy.pedagogique

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 exam_formula_sheet(): print("\n" + "="*50) print(" 🧬 numforge FICHE FORMULAIRE 🧬") print("="*50) print("\n--- INTEGRATION ---") print("Trapeze: Area ≈ (h/2) * [f(a) + f(b)]") print("Simpson: Area ≈ (h/3) * [f(a)+4f(m)+f(b)]") print("\n--- INTERPOLATION ---") print("Lagrange: P(x) = Σ y_i * L_i(x)") print("\n--- ODE ---") print("Euler: y_i+1 = y_i + h*f(t_i, y_i)") print("="*50)
[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}")