finmath-engine
Version:
Motor de cálculos financeiros de alta precisão para o mercado brasileiro
58 lines • 1.88 kB
TypeScript
/**
* IRR - Solver de Brent (Implementação Científica)
* Baseado em: Brent (1973) - Algorithms for Minimization Without Derivatives
* Sprint 4 - H15 (Parte 2)
*/
import { Decimal } from "decimal.js";
/**
* Resultado do solver de IRR
*/
export interface IRRResult {
/** IRR encontrado (null se não convergiu) */
irr: Decimal | null;
/** Se convergiu dentro da tolerância */
converged: boolean;
/** Método usado ('brent' ou 'bisection') */
method: "brent" | "bisection";
/** Diagnósticos adicionais */
diagnostics?: {
/** Múltiplas raízes possíveis (>1 mudança de sinal) */
multipleRoots?: boolean;
/** Sem mudança de sinal (IRR não existe) */
noSignChange?: boolean;
/** NPV final após convergência */
finalNPV?: Decimal;
/** Iterações usadas */
iterations?: number;
};
}
/**
* Opções para solver de IRR
*/
export interface IRROptions {
/** Chute inicial (padrão: 0.1 = 10%) */
guess?: Decimal;
/** Intervalo de busca (padrão: [-0.99, 3]) */
range?: {
lo: Decimal;
hi: Decimal;
};
/** Tolerância (padrão: 1e-8) */
tolerance?: Decimal;
/** Máximo de iterações (padrão: 100) */
maxIterations?: number;
/** Forçar uso de bissecção ao invés de Brent */
forceBisection?: boolean;
}
/**
* Resolve IRR usando método de Brent (ou bissecção)
*/
export declare function solveIRR(cashflows: Decimal[], options?: IRROptions): IRRResult;
/**
* Converte IRR de periodicidade para anual
* @param irrPeriodic - IRR no período (ex: 0.025 = 2.5% ao mês)
* @param periodsPerYear - Períodos por ano (ex: 12 para mensal)
* @returns IRR anual equivalente
*/
export declare function convertToAnnual(irrPeriodic: Decimal, periodsPerYear: number): Decimal;
//# sourceMappingURL=brent.d.ts.map