|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/am_htm_c/ammjr_c.htm
Дата изменения: Thu Dec 3 13:45:18 2015 Дата индексирования: Sun Apr 10 01:29:44 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий ammjr_c.zip , ammjd_c.zip |
Тексты тестовых примеров tammjr_c.zip , tammjd_c.zip |
Численное умножение прямоугольных разреженных матриц, заданных в формате RR (C) U
Описание формата RR (C) U приведено в описании подпрограммы
Описание формата RR (C) U приведено в описании подпрограммы amtsr_c .
Пусть в формате RR (C) U заданы матрица A размеров p на q и матрица B размеров q на r. Пусть известен также портрет результирующей матрицы C = A * B в формате RR (C) U, полученный, например, предварительно при помощи подпрограммы ammir_c. Подпрограмма ammjr_c вычисляет ненулевые элементы матрицы C посредством алгоритма, изложенного в описании подпрограммы ammir_c
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988
int ammjr_c (integer *ia, integer *ja, real *an, integer *ib,
integer *jb, real *bn, integer *ic, integer *jc, integer *np,
integer *nq, integer *nr, real *cn, real *x)
Параметры
|
ia, ja - an | заданные портрет и ненулевые элементы матрицы A в формате RR (C) U; |
|
ib, jb - bn | заданные портрет и ненулевые элементы матрицы B в формате RR (C) U; |
| ic, jc - | заданный портрет результирующей матрицы C в формате RR (C) U; |
| np - | заданное число строк матрицы A (тип: целый); |
| nq - | заданное число столбцов матрицы A и строк матрицы B (тип: целый); |
| nr - | заданное число столбцов матрицы B (тип: целый); |
| cn - | вещественный одномерный массив, в котором помещаются вычисленные ненулевые элементы матрицы C согласно портрету ic, jc; |
| x - | вещественный одномерный массив длины nr, используемый в подпрограмме в качестве рабочего |
Версии
| ammjd_c - | численное умножение прямоугольных разреженных матриц, заданных в формате RR (C) U, в режиме удвоенной точности; при этом параметры an, bn, cn и x должны иметь тип double |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* Initialized data */
static int ia[5] = { 1,4,4,6,7 };
static int ja[6] = { 1,5,4,4,2,1 };
static int ib[6] = { 1,2,4,6,6,7 };
static int jb[6] = { 2,2,1,2,1,2 };
static int ic[5] = { 1,2,2,4,5 };
static int jc[4] = { 2,2,1,2 };
static float an[6] = { 1.f,1.f,1.f,1.f,1.f,1.f };
static float bn[6] = { 1.f,1.f,1.f,1.f,1.f,1.f };
/* Local variables */
static float x[3];
extern int ammjr_c(int *, int *, float *, int *, int *, float *, int *,
int *, int *, int *, int *, float *, float *);
static float cn[4];
static int np, nq, nr;
np = 4;
nq = 5;
nr = 3;
ammjr_c(ia, ja, an, ib, jb, bn, ic, jc, &np, &nq, &nr, cn, x);
printf("\n %5.0f %5.0f %5.0f %5.0f \n", cn[0], cn[1], cn[2], cn[3]);
return 0;
} /* main */
Результаты: cn = ( 2, 1, 1, 1 )