UNPKG

mathjslab

Version:

MathJSLab - An interpreter with language syntax like MATLAB®/Octave, ISBN 978-65-00-82338-7.

196 lines (195 loc) 6.97 kB
import { ComplexType } from './Complex'; import { MultiArray } from './MultiArray'; import { Evaluator } from './Evaluator'; declare const EXPECT_TOL = 1e-14; declare const MAX_ITERACTION = 1000; declare const DEFAULT_EIG_TOL = 1e-14; interface TestOptions { maxIter?: number; tol?: number; real?: boolean; frobenius?: boolean; print?: boolean; Aid?: string; Bid?: string; Cid?: string; Did?: string; Eid?: string; Fid?: string; Gid?: string; Hid?: string; Iid?: string; Jid?: string; Kid?: string; Lid?: string; Mid?: string; Nid?: string; Oid?: string; Pid?: string; Qid?: string; Rid?: string; Sid?: string; Tid?: string; Uid?: string; Vid?: string; Wid?: string; Xid?: string; Yid?: string; Zid?: string; } interface TestResult { dim?: number[]; norm?: number; maxErr?: number; expression?: string; } declare const defaulTestOptions: TestOptions; declare abstract class LAPACKtest { static readonly setTestOptions: (options?: TestOptions) => TestOptions; static readonly rand: () => number; static readonly randomReal: () => ComplexType; static readonly randomComplex: () => ComplexType; static readonly randomHermitian: (n: number, real?: boolean) => ComplexType[][]; static readonly frobenius_norm: (M: MultiArray | ComplexType[][]) => number; static readonly print_matrix: (M: MultiArray | ComplexType[][], Mid?: string, evaluator?: Evaluator) => void; static array_to_multiarray: (M: MultiArray | ComplexType[][]) => MultiArray; static array_or_vector_to_diagonal_multiarray: (M: MultiArray | ComplexType[][] | ComplexType[]) => MultiArray; static readonly testHermitian: (A: MultiArray | ComplexType[][], options?: TestOptions) => TestResult; /** * Test unitarity / orthogonality of a matrix: * * || Vᴴ V − I ||_F */ static readonly testUnitarity: (V: MultiArray | ComplexType[][], options?: TestOptions) => TestResult; static readonly testOrthogonal: (V: MultiArray | ComplexType[][], options?: TestOptions) => TestResult; /** * Test that eigenvalues are (numerically) real: * * max |Im(λᵢ)| */ static readonly testRealEigenvalues: (D: MultiArray | ComplexType[][] | ComplexType[], options?: TestOptions) => TestResult; /** * Test diagonality: * * || A − diag(A) ||_F */ static readonly testOffDiagonal: (D: MultiArray | ComplexType[][] | ComplexType[], options?: TestOptions) => TestResult; /** * Test tridiagonality: * * || off-tridiagonal(A) ||_F */ static readonly testTridiagonality: (D: MultiArray | ComplexType[][], options?: TestOptions) => TestResult; /** * Test the eigenvalue decomposition residual: * * || A·V − V·D ||_F * * @param A Original Hermitian matrix * @param V Eigenvector matrix * @param D Diagonal eigenvalue matrix */ static readonly testEigenResidual: (A: MultiArray | ComplexType[][], V: MultiArray | ComplexType[][], D: MultiArray | ComplexType[][] | ComplexType[], options?: TestOptions) => { norm: number; maxErr: number; } | { maxErr: number; norm?: undefined; }; /** * Test the Hermitian tridiagonal reconstruction: * * || A − Q · T · Qᴴ ||_F * * @param A Original Hermitian matrix * @param Q Unitary matrix from UNGTR * @param T Tridiagonal matrix * @returns Frobenius norm of the reconstruction error */ static readonly testHermitianTridiagonalReconstruction: (A: MultiArray | ComplexType[][], Q: MultiArray | ComplexType[][], T: MultiArray | ComplexType[][], options?: TestOptions) => TestResult; static start_test_complex_tridiagonal: () => { evaluator: Evaluator; D_orig: ComplexType[]; E_orig: ComplexType[]; n: number; }; static start_test_complex_tridiagonal_hermitian: () => { evaluator: Evaluator; D_orig: ComplexType[]; E_orig: ComplexType[]; n: number; T0: MultiArray; }; /** * * @returns */ static start_test_complex_tridiagonal_hermitian_to_real2n: () => { evaluator: Evaluator; D_orig: ComplexType[]; E_orig: ComplexType[]; n: number; T0: MultiArray; T: MultiArray; }; static test_jacobi_hermitian_real2n_final: () => void; static test_jacobi_hermitian_real2n: () => void; static test_jacobi_hermitian_real2n_direct: () => void; static test_jacobi_hermitian_via_real2n: () => void; static readonly test_jacobi_complex_hermitian_dense: () => void; static test_jacobi_hermitian_full(): void; static test_numeric_jacobi_hermitian_direct: () => void; static test_apply_givens_tridiagonal: () => void; static test_numeric_qr_hermitian_tridiagonal: () => void; static test_qr_hermitian_tridiagonal_full(): void; /** * Teste da seção 7: verifica se Zᴴ·T·Z ≈ T_after para matriz tridiagonal hermitiana * @param D ComplexType[] diagonal * @param E ComplexType[] subdiagonal */ static readonly test_tridiagonal_similarity: (D: ComplexType[], E: ComplexType[]) => void; static readonly test_orthonormality: (V: MultiArray) => { maxOffDiag: number; maxDiagDeviation: number; }; /** * Diagnóstico por autovetor: * Para cada coluna j: * - lambda = Dcol[j,0] * - rq = (vᴴ * A * v) / (vᴴ * v) (Rayleigh quotient) * - res_j = || A*v - lambda*v ||_2 (norma euclidiana do residual) * * Imprime uma tabela (j, lambda, Re(rq), Im(rq), |lambda - rq|, res_j ) * @param A * @param V * @param Dcol * @returns */ static readonly diag_eigenpairs: (A: ComplexType[][], V: MultiArray, Dcol: MultiArray) => any[]; /** * Compara listas: ordena autovalores fornecidos e compara com Rayleighs - procura permutações. * Retorna um mapeamento aproximado index->index por menor diferença absoluta. * * Inputs: * - evals: ComplexType[] (autovalores retornados) * - rqs: ComplexType[] (rayleighs calculados para cada coluna v_j) * * Imprime o pareamento escolhido e as diferenças. * @param evals * @param rqs * @returns */ static readonly match_evals_to_rayleighs: (evals: ComplexType[], rqs: ComplexType[]) => { evalIndex: number; rqIndex: number; diff: number; }[]; static test_numeric_qr_bulge_chasing_hermitian: () => void; static test_complex_givens_unitarity: () => void; static test_apply_givens_to_Z: () => void; } export { type TestOptions, LAPACKtest, EXPECT_TOL, MAX_ITERACTION, DEFAULT_EIG_TOL, defaulTestOptions }; declare const _default: { LAPACKtest: typeof LAPACKtest; }; export default _default;