Подпрограмма: ash2r_c
Назначение
Решение системы линейных алгебраических уравнений с
положительно определенной симметричной ленточной матрицей,
заданной в компактной форме, методом квадратного корня (методом
Холецкого).
Математическое описание
Подпрограмма ash2r_c вычисляет решение системы N линейных
алгебраических уравнений А*x = b, где
А - положительно определенная симметричная ленточная матрица,
заданная в компактной форме, b - одномерный вектор правой
части решаемой системы, методом квадратного корня (методом
Холецкого).
В.В.Воеводин, Численные методы алгебры (теория и
алгорифмы), Наука, М., 1966 .
Использование
int ash2r_c (real *a, real *b, real *x, integer *n,
integer *nc, integer *l, integer *ierr)
Параметры
a -
|
вещественный двумерный массив размера
n на (nc + 1),
в котором содержится заданная матрица,
записанная в компактной форме;
|
b -
|
вектор длины n, в котором задается правая часть
исходной системы (тип: вещественный);
|
x -
|
вектор длины n, в котором содержится решение
исходной системы (тип: вещественный);
|
n -
|
порядок матрицы (тип: целый);
|
nc -
|
число ненулевых диагоналей заданной матрицы по
одну сторону от главной диагонали (тип:целый);
|
l -
|
целая переменная, которая задает режим работы
подпрограммы; при этом:
|
l = 1 -
|
если система с данной матрицей решается впервые;
|
l ≠ 1 -
|
если система с данной матрицей решается повторно;
|
ierr -
|
целая переменная, служащая для сообщения об
ошибках, обнаруженных в ходе работы подпрограммы; при этом:
|
ierr=65 -
|
если заданная матрица не является положительно определенной.
|
Версии
ash2d_c -
|
решение системы линейных алгебраических
уравнений с положительно определенной симметричной
ленточной матрицей, заданной в компактной
форме, методом квадратного корня (методом
Холецкого) с повышенной точностью.
|
Вызываемые подпрограммы
utas10_c -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограммы ash2r_c;
|
utas11_c -
|
подпрограмма выдачи диагностических сообщений
при работе подпрограммы ash2d_c;
|
afh2r_c -
|
подпрограмма, реализующая треугольное
разложение положительно определенной симметричной
ленточной матрицы с компактной формой
представления методом квадратного корня;
|
afh2d_c -
|
подпрограмма, реализующая треугольное
разложение положительно определенной симметричной
ленточной матрицы с компактной формой
представления методом квадратного корня с повышенной точностью.
|
Замечания по использованию
|
При работе подпрограммы исходная матрица не
сохраняется. На месте матрицы a помещается ее треугольное
разложение, полученное программами afh2r_c, afh2d_c.
Подпрограммы ash2r_c и ash2d_c позволяют использовать
вместо параметра x параметр b. Таким образом, в результате
работы подпрограммы на место столбца правой части может
быть помещено вычисленное решение.
Для подпрограммы ash2d_c параметры a, b, x должны иметь
тип 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 };
static float b[3] = { 1.f,27.f,68.f };
/* Local variables */
static int ierr, i__;
extern int ash2r_c(float *, float *, float *, int *, int *, int *, int *);
static float x[3];
for (i__ = 0; i__ <= 3; i__+=3) {
printf("\n %15.7e %15.7e %15.7e \n",
a[i__], a[i__+1], a[i__+2]);
}
printf("\n %5i \n", ierr);
for (i__ = 1; i__ <= 3; ++i__) {
printf("\n %15.7e \n", x[i__-1]);
}
ash2r_c(a, b, x, &c__3, &c__1, &c__1, &ierr);
printf("\n %5i \n", ierr);
for (i__ = 1; i__ <= 3; ++i__) {
printf("\n %15.7e \n", x[i__-1]);
}
return 0;
} /* main */
Результаты:
x = (-0.13178, 0.56589, 1.0930) ,
ierr=0