nub.ts 2.32 KiB
import { Debug, IParamsEquation, Result, Serie } from "./base"
import { Dichotomie } from "./dichotomie"
/**
 * Classe abstraite de Noeud de calcul : classe de base pour tous les calculs
 */
export abstract class Nub extends Debug {
    /// Nom des variables calculées par la méthode Equation
    private _varsEq: string[] = [];
    public v: IParamsEquation;
    constructor(paramsEq: IParamsEquation, dbg: boolean = false) {
        super(dbg);
        this.v = paramsEq;
    /** 
     * Formule utilisée pour le calcul analytique (solution directe ou méthode de résolution spécifique)
    abstract Equation(sVarCalc: string): Result;
    /** 
     * Calcul d'une équation quelque soit l'inconnue à calculer
     * @param sVarCalc nom de la variable à calculer
     * @param rInit valeur initiale de la variable à calculer dans le cas de la dichotomie
     * @param rPrec précision de calcul
    Calc(sVarCalc: string, rInit: number = 0, rPrec: number = 0.001): Result {
        this.debug("nub : sVarCalc=" + sVarCalc);
        this.debug("nub : rInit=" + rInit);
        this.debug("nub : rPrec=" + rPrec);
        for (let sVarEq of this._varsEq) {
            if (sVarCalc == sVarEq) {
                return this.Equation(sVarCalc);
        return this.Solve(sVarCalc, rInit, rPrec);
    CalcSerie(svarCalc: string, serie: Serie): Result[] {
        /** @todo faire une boucle pour appeler this.Calc avec chaque valeur de serie.values
        // let results = [new (Result)];
        let results = [new Result(0)];
        return results;
    get sVarsEq(): string[] {
        return this._varsEq;
    set sVarsEq(sVarsEq: string[]) {
        this._varsEq = sVarsEq;
    AddVarEq(sVarEq: string) {
        this._varsEq.push(sVarEq);
    /** 
     * Résoud l'équation par une méthode numérique
     * @param sVarCalc nom de la variable à calculer
     * @param rInit valeur initiale de la variable à calculer dans le cas de la dichotomie
717273747576777879
* @param rPrec précision de calcul */ Solve(sVarCalc: string, rInit: number, rPrec: number): Result { let dicho: Dichotomie = new Dichotomie(this, sVarCalc, this.DBG); var target = this.v[this._varsEq[0]]; return dicho.Dichotomie(target, rPrec, rInit); } }