Подпрограмма: afh2r_c
Назначение
Треугольное разложение положительно определенной
симметричной ленточной матрицы методом квадратного корня (методом
Холецкого) с компактной формой представления симметричной и
треугольной матриц.
Математическое описание
Заданная в компактной формe пoлoжительно определеная
симметричная ленточная матрица А приводится к действительной
невырожденной нижней треугольной матрице L, такой, что
LLT = А, методом квадратного корня
(методом Холецкого). Треугольная матрица с является ленточной.
В.В.Воеводин, Численные методы алгебры (теория и алгорифмы),
"Наука", М., 1966 г.
Использование
int afh2r_c (real *a, integer *n, integer *nc, integer *ierr)
Параметры
a -
|
вещественный двумерный массив размера
n * (nc + 1), в котором содержится
заданная матрица, записанная в компактной форме; по окончании
работы подпрограммы в массиве a запоминается также
в компактной форме нижняя треугольная ленточная
матрица L;
|
n -
|
порядок матрицы (тип: целый);
|
nc -
|
число ненулевых диагоналей заданной матрицы по
одну сторону от главной диагонали (тип: целый);
|
ierr -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы подпрограммы; при этом:
|
ierr=65 -
|
если заданная матрица не является
положительно определенной.
|
Версии
afh2d_c -
|
треугольное разложение положительно
определенной симметричной ленточной матрицы методом
квадратного корня (методом Холецкого) с
компактной формой представления симметричной и
треугольной матриц с повышенной точностью.
|
Вызываемые подпрограммы
utaf10_c -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограммы afh2r_c;
|
utaf11_c -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограммы afh2d_c.
|
Замечания по использованию
|
Для подпрограммы afh2d_c параметр a должен иметь тип
double.
|
Пример использования
int main(void)
{
/* Initialized data */
static float a[6] /* was [3][2] */ = { 0.f,2.f,12.f,1.f,25.f,56.f };
/* Local variables */
static int ierr;
extern int afh2r_c(float *, int *, int *, int *);
static int n, nc, i__;
n = 3;
nc = 1;
afh2r_c(a, &n, &nc, &ierr);
for (i__ = 0; i__ <= 3; i__+=3) {
printf("\n %15.7e %15.7e %15.7e \n",
a[i__], a[i__+1], a[i__+2]);
}
return 0;
} /* main */
Результаты: a = (0., 2., 2.6186, 1., 4.5826, 7.0102)