Текст подпрограммы и версий
aih2r_c.zip  aih2d_c.zip 
Тексты тестовых примеров
taih2r_c.zip  taih2d_c.zip 

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

Назначение

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

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

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

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

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

    int aih2r_c (real *a, real *ainv, integer *n, integer *nc,
            integer *ierr)

Параметры

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

Версии

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

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

utai10_c - подпрограмма печати диагностических сообщений при работе подпрограммы aih2r_c;
utai11_c - подпрограмма печати диагностических сообщений при работе подпрограммы aih2d_c;

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

 

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

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

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

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

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

    for (i__ = 1; i__ <= 6; ++i__) {
           printf("\n %10.2f \n", a[i__-1]);
    }
    aih2r_c(a, b, &c__3, &c__1, &ierr);

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


Результаты:    ainv = (0.75, 0.5, 1., 0.25, 0.5, 0.75),

                        ierr  =  0