Текст подпрограммы и версий ammlr_c.zip , ammld_c.zip |
Тексты тестовых примеров tammlr_c.zip , tammld_c.zip |
Численное умножение обратной для нижней треугольной разреженной матрицы с единичной диагональю, заданной в формате RR (L) U, на прямоугольную разреженную матрицу, заданную в формате RR (C) U
Форматы RR (L) U и RR (C) U приведены в описаниях подпрограмм ammkr_c и amtsr_c .
Данная операция эквивалентна следующей:
X = U -TB ,
где B - прямоугольная разреженная матрица с NR строками и NC столбцами в формате RR (C) U и U - верхняя треугольная матрица порядка NR в формате RR (L) U.
Алгоритм, реализованный в подпрограмме ammlr_c, приведен в описании подпрограммы ammkr_c .
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988
int ammlr_c (integer *iut, integer *jut, real *unt, integer *ib, integer *jb, real *bn, integer *nr, integer *nc, integer *ix, integer *jx, real *xn, real *p)
Параметры
iut, jut, - unt | заданные портрет и ненулевые элементы матрицы UT в формате RR (L) U; |
ib,jb,bn - | заданные портрет и ненулевые элементы матрицы B в формате RR (C) U; |
nr - | заданный порядок матрицы UT и число строк матриц B и X (тип: целый); |
nc - | заданное число столбцов матриц B и X (тип: целый); |
ix, jx - | заданный портрет результирующей матрицы X в формате RR (C) U; |
xn - | вещественный одномерный массив, содержащий вычисленные ненулевые элементы матрицы X в соответствии с заданным ее портретом ix и jx; |
p - | вещественный одномерный массив длины nc, используемый в подпрограмме в качестве рабочего |
Версии:
ammld_c - | численное умножение обратной для нижней треугольной разреженной матрицы с единичной диагональю, заданной в формате RR (L) U, на прямоугольную разреженную матрицу, заданную в формате RR (C) U, в режиме удвоенной точности; при этом параметры unt, bn, xn и p должны иметь тип double |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static int iut[5] = { 1,1,1,2,4 }; static int jut[3] = { 2,3,1 }; static int ib[5] = { 1,3,4,5,6 }; static int jb[5] = { 3,1,2,1,3 }; static float unt[3] = { 1.f,1.f,1.f }; static float bn[5] = { 1.f,1.f,1.f,1.f,1.f }; static int ix[5] = { 1,3,4,6,9 }; static int jx[8] = { 3,1,2,1,2,3,1,2 }; /* Local variables */ static float p[3]; extern int ammlr_c(int *, int *, float *, int *, int *, float *, int *, int *, int *, int *, float *, float *); static int nc, nr; static float xn[8]; nr = 4; nc = 3; ammlr_c(iut, jut, unt, ib, jb, bn, &nr, &nc, ix, jx, xn, p); printf("\n %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f \n", xn[0], xn[1], xn[2], xn[3], xn[4], xn[5], xn[6], xn[7]); return 0; } /* main */ Результаты: xn = ( 1, 1, 1, 1, - 1, 0, - 2, 1 )