An error occurred while loading the file. Please try again.
-
Grand Francois authored
- régime uniforme : ajout de tests unitaires vérifiant l'échec de calcul de k et Ks (section puissance) - ajout de l'enum ResultCode pour spécifier les erreurs de fonctions renvoyant un Result
6d87122b
import { Debug, Result, Serie } from "./base"
import { Dichotomie } from "./dichotomie"
import { ComputeNode, ParamDefinition, IParamsEquation } from "./param"
/**
* Classe abstraite de Noeud de calcul : classe de base pour tous les calculs
*/
export abstract class Nub extends ComputeNode {
private _dichoStartIntervalMaxSteps: number = 100;
/*
* paramétrage de la dichotomie
*/
/**
* étapes de recherche de l'intervalle de départ
*/
set dichoStartIntervalMaxSteps(n: number) {
this._dichoStartIntervalMaxSteps = n;
}
private checkParametersCalculability() {
let res = [];
for (let ps in this._prms) {
let p: ParamDefinition = this._prms[ps];
if (p.calculability == undefined)
res.push(p.symbol);
}
if (res.length > 0)
throw 'Calculability of parameter(s) ' + res.toString() + ' has not been defined';
}
/**
* 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 {
if (this._prms[sVarCalc].isAnalytical())
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;
}
public getParameter(name: string): ParamDefinition {
for (let ps in this._prms) {
let p: ParamDefinition = this._prms[ps];
if (p.symbol == name)
return p;
}
throw 'Nub.getParameter() : invalid parameter name ' + name;
71727374757677787980818283848586878889909192939495
}
public getFirstAnalyticalParameter(): ParamDefinition {
for (let ps in this._prms) {
let p: ParamDefinition = this._prms[ps];
if (p.isAnalytical())
return p;
}
return undefined;
}
/**
* 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
*/
Solve(sVarCalc: string, rInit: number, rPrec: number): Result {
let dicho: Dichotomie = new Dichotomie(this, sVarCalc, this.DBG);
dicho.startIntervalMaxSteps = this._dichoStartIntervalMaxSteps;
var target = this.getFirstAnalyticalParameter();
return dicho.Dichotomie(target.v, rPrec, rInit);
}
}