An error occurred while loading the file. Please try again.
-
Grand Francois authored4c08e6e3
import { Debug, Serie } from "./base";
import { Dichotomie } from "./dichotomie";
import { ComputeNode } from "./compute-node";
import { Result } from "./util/result";
/**
* Classe abstraite de Noeud de calcul : classe de base pour tous les calculs
*/
export abstract class Nub extends ComputeNode {
private _dichoStartIntervalMaxSteps: number = 100;
/**
* résultat de Calc()/CalcSerie()
*/
protected _result: Result;
/*
* paramétrage de la dichotomie
*/
/**
* étapes de recherche de l'intervalle de départ
*/
set dichoStartIntervalMaxSteps(n: number) {
this._dichoStartIntervalMaxSteps = n;
}
/**
* Formule utilisée pour le calcul analytique (solution directe ou méthode de résolution spécifique)
*/
public 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
*/
public Calc(sVarCalc: string, rInit?: number, rPrec: number = 0.001): Result {
if (rInit === undefined) {
rInit = this._prms.map[sVarCalc].v;
}
if (this._prms.map[sVarCalc].isAnalytical()) {
this._result = this.Equation(sVarCalc);
return this._result;
}
const resSolve: Result = this.Solve(sVarCalc, rInit, rPrec);
if (!resSolve.ok) {
this._result = resSolve;
return this._result;
}
const sAnalyticalPrm: string = this.getFirstAnalyticalParameter().symbol;
this._prms.map[sVarCalc].v = resSolve.vCalc;
const res: Result = this.Equation(sAnalyticalPrm);
res.vCalc = resSolve.vCalc;
this._result = res;
return res;
}
public CalcSerie(svarCalc: string, serie: Serie): Result[] {
/** @todo faire une boucle pour appeler this.Calc avec chaque valeur de serie.values
*
*/
// let results = [new (Result)];
const results = [new Result(0)];
return results;
}
/**
7172737475767778798081828384858687
* 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
* @param rPrec précision de calcul
*/
private Solve(sVarCalc: string, rInit: number, rPrec: number): Result {
const dicho: Dichotomie = new Dichotomie(this, sVarCalc, this.DBG);
dicho.startIntervalMaxSteps = this._dichoStartIntervalMaxSteps;
const target = this._prms.getFirstAnalyticalParameter();
return dicho.Dichotomie(target.v, rPrec, rInit);
}
public get result(): Result {
return this._result;
}
}