|
Текст подпрограммы и версий aib1r_c.zip aib1d_c.zip |
Тексты тестовых примеров taib1r_c.zip taib1d_c.zip |
Обращение ленточной матрицы, заданной в компактной форме, с выбором ведущего элемента по столбцу.
Подпрограмма aib1r_c вычисляет матрицу B, такую что А*В = Е, где А - исходная ленточная, а Е - единичная матрицы. Обращение осуществляется с выбором главного элемента по столбцу.
Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений. "Наука", М., 1970.
int aib1r_c (real *a, real *ainv, integer *n, integer *nlc,
integer *nuc, real *r__, integer *ierr)
Параметры
| a - | вещественный двумерный массив размера n на (nlc+nuc+1), в котором содержится заданная матрица, записанная в компактной форме; |
| b - | вещественный двумерный массив размера n на n, в котором записывается вычисленная обратная матрица; |
| n - | порядок матрицы (тип: целый); |
| nlc - | число ненулевых диагоналей матрицы, расположенных под главной диагональю (тип: целый); |
| nuc - | число ненулевых диагоналей матрицы, расположенных над главной диагональю (тип: целый); |
| r - | вещественный двумерный массив размера n на (nlc+1), используемый как рабочий; |
| ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| ierr=65 - | если заданная матрица является алгоритмически сингулярной. |
Версии
| aib1d_c - | обращение ленточной матрицы, заданной в компактной форме с удвоенной точностью. Используется выбор ведущего элемента по столбцу. |
Вызываемые подпрограммы
| utbf10_c - | подпрограмма печати диагностических сообщений при работе подпрограммы aib1r_c; |
| utbf11_c - | подпрограмма печати диагностических сообщений при работе подпрограммы aib1d_c. |
Замечания по использованию
|
При работе подпрограммы исходная матрица не сохраняется. На место вектора a помещается его треугольное разложение. Для подпрограммы aib1d_c параметры a, b, r должны иметь тип double. |
int main(void)
{
/* Initialized data */
static float a[9] /* was [3][3] */ = { 0.f,1.f,2.f,1.f,3.f,3.f,-1.f,
-2.f,0.f };
/* Local variables */
static int ierr, i__;
extern int aib1r_c(float *, float *, int *, int *, int *, float *, int *);
static float b[9] /* was [3][3] */,
r__[6] /* was [3][2] */;
for (i__ = 0; i__ <= 6; i__+=3) {
printf("\n %10.4f %10.4f %10.4f \n",
a[i__], a[i__+1], a[i__+2]);
}
aib1r_c(a, b, &c__3, &c__1, &c__1, r__, &ierr);
for (i__ = 0; i__ <= 6; i__+=3) {
printf("\n %10.4f %10.4f %10.4f \n",
b[i__], b[i__+1], b[i__+2]);
}
printf("\n %5i \n", ierr);
return 0;
} /* main */
Результаты:
b = (0.8125, -0.1875, 0.125, 0.1875, 0.1875, -0.125, 0.125, 0.125,
0.25),
ierr = 0