/p>
/***************************************** *************************
Obsolete 1-based subroutine
****************************************** ************************/
bool symmetricevd (ap :: real_2d_array a, n, zneeded, isupper, :: real_1d_array & d, :: real_2d_array & z)
{result; :: real_1d_array tau;
ap :: real_1d_array e;
ap :: ap_error :: make_assertion (zneeded == 0 | | zneeded == 1, "SymmetricEVD: incorrect ZNeeded");
totridiagonal (a, n, isupper, tau, d, e);
if (zneeded == 1)
{(a, n, isupper, tau, z);
} = tridiagonalevd (d, e, n, zneeded, z); result;
}
. Розкладання Холецкого
/***************************************** *************************
Алгоритм здійснює розкладання Холецкого симетричної позитивно певної матриці
Результатом роботи алгоритму є подання матриці A у вигляді A = U '* U або A = L * L'.
Вхідні параметри: - верхній або нижній трикутник факторізуемих матриці.
Масив з нумерацією елементів [0 .. N-1, 0 .. N-1] - розмір матріциеслі IsUpper = True, A містить верхній трикутник симетричної матриці, інакше A містить нижній трикутник.
Вихідні параметри: - результат факторизації. Якщо IsUpper = True, у верхньому трикутнику знаходиться матриця U, така, що A = U '* U, а елементи, що лежать нижче головної діагоналі, що не модифікуються. Аналогічно, якщо IsUpper = False. p align="justify"> Результат:
Якщо матриця позитивно визначена, функція повертає True.
Якщо матриця знаконеопределена, то функція повертає False. При цьому факторизація не може бути здійснена. br/>
****************************************** ************************/
# include
# include "cholesky.h" spdmatrixcholesky (ap :: real_2d_array & a, int n, bool isupper)
{result; i; j; ajj; v;
//
// Test the input parameters.
// :: ap_error :: make_assertion (n> = 0, "Error in SMatrixCholesky: incorrect function arguments");
// Quick return if possible = true; (n <= 0)
{result;
} (isupper)
{
// Compute the Cholesky factorization A = U '* U. (j = 0; j <= n-1; j + +)
{
// Compute U (J, J) and test for non-positive-definiteness. = ap :: vdotproduct (a.getcolumn (j, 0, j-1), a.getcolumn (j , 0, j-1)); = a...