Текст подпрограммы и версий afh7r_c.zip , afh7d_c.zip |
Тексты тестовых примеров tafh7r_c.zip , tafh7d_c.zip |
Численное треугольное разложение симметричной положительно определенной разреженной матрицы, заданной в формате RR (U) U.
Описания форматов RR (U) U и RR (U) О приведены в описаниях подпрограмм am21r_c и ash4r_c соответственно.
Пусть симметричная положительно определенная разреженная матрица А порядка N задана в формате RR (U) U. Подпрограмма afh7r_c вычисляет элементы матрицы U по заданному ее портрету в формате RR (U) О, такую, что A = UTDU, где U - верхняя треугольная матрица с единичной диагональю, а D - диагональная матрица. Портрет матрицы U может быть предварительно получен при помощи подпрограммы afh6r_c сначала в формате RR (U) U, а затем упорядочен в формат RR (U) О путем двухкратного применения подпрограммы amtcr_c .
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988
int afh7r_c (integer *ia, integer *ja, real *an, real *ad, integer *n, integer *iu, integer *ju, real *un, real *di, integer *ip, integer *iup)
Параметры
ia, ja, - an, ad | заданные портрет и ненулевые элементы матрицы A в формате RR (U) U; |
n - | заданный порядок матрицы A (тип: целый); |
iu, ju - | заданный портрет матрицы U в формате RR (U) O; |
un - | вещественный одномерный массив длины n, в который помещаются вычисленные ненулевые элементы матрицы U в соответствии с ее портретом; |
di - | вещественный одномерный массив длины n, в который помещаются вычисленные элементы матрицы, обратной к диагональной матрице D разложения; |
ip, ipu - | целые одномерные массивы длины n, используемые в подпрограмме в качестве рабочих; |
Версии
afh7d_c - | численное треугольное разложение симметричной положительно определенной разреженной матрицы, заданной в формате RR (U) U, в режиме удвоенной точности; при этом параметры an, ad, un и di должны имет тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static int ia[6] = { 1,2,3,4,5,5 }; static int ja[4] = { 5,5,5,5 }; static int iu[6] = { 1,2,3,4,5,5 }; static int ju[4] = { 5,5,5,5 }; static float an[4] = { 2.f,.5f,2.f,1.f }; static float ad[5] = { 16.f,.625f,3.f,.5f,4.f }; /* Local variables */ extern int afh7r_c(int *, int *, float *, float *, int *, int *, int *, float *, float *, int *, int *); static int n; static float di[5]; static int ip[5]; static float un[4]; static int iup[5]; n = 5; afh7r_c(ia, ja, an, ad, &n, iu, ju, un, di, ip, iup); printf("\n %15.6e %15.6e %15.6e %15.6e \n", un[0], un[1], un[2], un[3]); printf("\n %15.6e %15.6e %15.6e %15.6e %15.6e \n", di[0], di[1], di[2], di[3], di[4]); return 0; } /* main */ Рeзультаты: un = .125000e+00, .800000e+00, .666667e+00, .200000e+01 di = .625000e-01, .160000e+01, .333333e+00, .200000e+01, .600002e+02