Текст подпрограммы и версий
aih1r_c.zip  aih1d_c.zip 
Тексты тестовых примеров
taih1r_c.zip  taih1d_c.zip 

Подпрограмма:  aih1r_c

Назначение

Обращение положительно определенной симметричной матрицы с компактной формой представления методом квадратного корня (методом Холецкого).

Математическое описание

Подпрограмма aih1r_c вычисляет матрицу B (симметричную в компактной форме), такую, что А*В = Е, где А - исходная положительно определенная симметричная матрица порядка N, заданная в компактной форме, а Е - единичная матрица. Используется метод квадратного корня (метод Холецкого).

В.В. Воеводин, Численные методы алгебры (теория и алгорифмы), Наука, М., 1966 г.

Использование

    int aih1r_c (real *a, real *ainv, integer *n, integer *ierr)

Параметры

a - вектор длины n на (n+1)/2, в котором содержится заданная матрица, записанная в компактной форме (тип: вещественный);
ainv - вектор длины n на (n+1)/2, в котором запоминается вычисленная обратная матрица в компактной форме (тип: вещественный);
n - порядок матрицы (тип: целый);
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
ierr=65 - если заданная матрица не является положительно определенной.

Версии

aih1d_c - обращение положительно определенной симметричной матрицы, записанной в компактной форме, методом квадратного корня (методом Холецкого) с повышенной точностью.

Вызываемые подпрограммы

utai10_c - подпрограмма печати диагностических сообщений при работе подпрограммы aih1r_c.
utai11_c - подпрограмма печати диагностических сообщений при работе подпрограммы aih1d_c.

Замечания по использованию

 

При работе подпрограммы исходная матрица A не сохраняется. На место матрицы A помещается ее треугольное разложение, полученное методом квадратного корня (методом Холецкого).

Для подпрограммы aih1d_c параметры a, ainv должны иметь тип double.

Пример использования

int main(void)
{
    /* Initialized data */
    static float a[6] = { 1.f,2.f,6.f,1.f,1.f,2.f };

    /* Local variables */
    static int ierr, i__;
    extern int aih1r_c(float *, float *, int *, int *);
    static float a2[6];

    for (i__ = 1; i__ <= 6; ++i__) {
           printf("\n %16.7e \n", a[i__-1]);
    }
    aih1r_c(a, a2, &c__3, &ierr);

    for (i__ = 1; i__ <= 6; ++i__) {
           printf("\n %16.7e \n", a2[i__-1]);
    }
    printf("\n %5i \n", ierr);
    return 0;
} /* main */


Результаты:     b = (11., -3., 1., -4., 1., 2.),

                         ierr  =  0.