Создание, освобождение и преобразование разреженных матриц | |
| void | sp_create (size_t m, size_t nz, size_t **IA, size_t **JA, double **AN) |
| Выделение памяти под разреженную матрицу. | |
| void | sp_create_sym (size_t n, size_t nz, size_t **IA, size_t **JA, double **AN, double **AD) |
| Выделение памяти под разреженную симметричную матрицу. | |
| size_t | sp_nz (size_t m, size_t *IA) |
| Возвращает число ненулевых элементов в разреженном представлении матрицы. | |
| void | sp_sparse (double **A, size_t m, size_t n, size_t **IA, size_t **JA, double **AN, double eps) |
| Конвертация плотного представления матрицы общего вида в разреженное. | |
| void | sp_sparse_sym (double **A, size_t n, size_t **IA, size_t **JA, double **AN, double **AD, double eps) |
| Конвертация плотного представления симметричной матрицы в разреженное. | |
| void | sp_full (size_t *IA, size_t *JA, double *AN, size_t m, size_t n, double **A) |
| Конвертация разреженного представления матрицы общего вида в плотное. | |
| void | sp_full_sym (size_t *IA, size_t *JA, double *AN, double *AD, size_t n, double **A) |
| Конвертация разреженного представления симметричной матрицы в плотное. | |
| void | sp_sym_to_complete (size_t *IS, size_t *JS, double *SN, double *SD, size_t n, size_t *IA, size_t *JA, double *AN) |
| Конвертация разреженного симметричной матрицы из формата RR(U)U в RR(C)U. | |
| void | sp_free (size_t *IA, size_t *JA, double *AN) |
| Освобождение памяти, выделенной под разреженную матрицу. | |
| void | sp_free_sym (size_t *IA, size_t *JA, double *AN, double *AD) |
| Освобождение памяти, выделенной под разреженную симметричную матрицу. | |
| size_t | sp_list (size_t *IA, size_t *JA, double *AN, size_t m, double *A, size_t *I, size_t *J) |
| Получение списка всех ненулевых элементов разреженной матрицы. | |
| void | sp_convert (size_t nz, double *A, size_t *I, size_t *J, size_t m, size_t *IA, size_t *JA, double *AN) |
| Построение разреженной матрицы по списку ненулевых элементов. | |
| void | sp_order (size_t *IA, size_t *JA, double *AN, size_t m) |
| Упорядочение представления разреженной матрицы общего вида. | |
| void | sp_order_m (size_t *IA, size_t *JA, size_t m) |
| Упорядочение портрета разреженной матрицы общего вида. | |
Ввод и вывод разреженных матриц | |
| void | sp_print (size_t *IA, size_t *JA, double *AN, size_t m, size_t n, const char *format) |
| Форматированный вывод разреженной матрицы на экран. | |
| void | sp_print_list (size_t *IA, size_t *JA, double *AN, size_t m, size_t n, const char *xformat, const char *dformat) |
| Форматированный вывод разреженной матрицы на экран. | |
| void | sp_fprint (FILE *file, size_t *IA, size_t *JA, double *AN, size_t m, size_t n, const char *format) |
| Форматированный вывод разреженной матрицы в файл. | |
| void | sp_fprint_list (FILE *file, size_t *IA, size_t *JA, double *AN, size_t m, size_t n, const char *xformat, const char *dformat) |
| Форматированный вывод разреженной матрицы на экран. | |
| int | sp_scan (size_t **IA, size_t **JA, double **AN, size_t *m, size_t *n) |
| Чтение разреженной матрицы с клавиатуры. | |
| int | sp_fscan (FILE *file, size_t **IA, size_t **JA, double **AN, size_t *m, size_t *n) |
| Чтение разреженной матрицы из файла. | |
Ввод и вывод симметричных разреженных матриц | |
| void | sp_print_sym (size_t *IA, size_t *JA, double *AN, double *AD, size_t n, const char *format) |
| Форматированный вывод симметричной разреженной матрицы на экран. | |
| void | sp_print_list_sym (size_t *IA, size_t *JA, double *AN, double *AD, size_t n, const char *xformat, const char *dformat) |
| Форматированный вывод симметричной разреженной матрицы на экран. | |
| void | sp_fprint_sym (FILE *file, size_t *IA, size_t *JA, double *AN, double *AD, size_t n, const char *format) |
| Форматированный вывод разреженной матрицы в файл. | |
| void | sp_fprint_list_sym (FILE *file, size_t *IA, size_t *JA, double *AN, double *AD, size_t n, const char *xformat, const char *dformat) |
| Форматированный вывод симметричной разреженной матрицы в файл. | |
| int | sp_scan_sym (size_t **IA, size_t **JA, double **AN, double **AD, size_t *n) |
| Чтение разреженной матрицы с клавиатуры. | |
| int | sp_fscan_sym (FILE *file, size_t **IA, size_t **JA, double **AN, double **AD, size_t *n) |
| Чтение разреженной матрицы из файла. | |
Операции с разреженными матрицами | |
| void | sp_transpose (size_t *IA, size_t *JA, double *AN, size_t m, size_t n, size_t *IAT, size_t *JAT, double *ATN) |
| Транспонирование разреженной матрицы. | |
| int | sp_add_symb (size_t *IA, size_t *JA, size_t *IB, size_t *JB, size_t m, size_t n, size_t *IC, size_t *JC, size_t size_C) |
| Символическое сложение разреженных матриц. | |
| void | sp_add_num (size_t *IA, size_t *JA, double *AN, size_t *IB, size_t *JB, double *BN, size_t m, size_t n, size_t *IC, size_t *JC, double *CN) |
| Численное сложение разреженных матриц. | |
| void | sp_mult_col (size_t *IA, size_t *JA, double *AN, double *b, size_t m, double *c) |
| Умножение разреженной матрицы на плотный столбец. | |
| void | sp_mult_row (size_t *IA, size_t *JA, double *AN, double *b, size_t m, size_t n, double *c) |
| Умножение плотной строки на разреженную матрицу. | |
| void | sp_mult_col_sym (size_t *IA, size_t *JA, double *AN, double *AD, double *b, size_t n, double *c) |
| Умножение симметричной матрицы на плотный столбец. | |
| int | sp_mult_symb (size_t *IA, size_t *JA, size_t *IB, size_t *JB, size_t m, size_t k, size_t *IC, size_t *JC, size_t size_C) |
| Символическое умножение разреженных матриц. | |
| void | sp_mult_num (size_t *IA, size_t *JA, double *AN, size_t *IB, size_t *JB, double *BN, size_t *IC, size_t *JC, size_t m, size_t k, double *CN) |
| Численное умножение разреженных матриц. | |
| void | sp_row_nz_sym (size_t *IA, size_t *JA, size_t n, size_t *nz) |
Заполнение вектора, так что -я компонента равна числу ненулевых элементов в -й строке/столбце симметричной разреженной матрицы. | |
| void | sp_colperm_sym (size_t *IA, size_t *JA, size_t n, size_t *p) |
| Выдаёт вектор перестановок, такой, что столбцы матрицы будут расположены по неубыванию числа ненулевых элементов в них. | |
| void | sp_permute_sym (size_t n, size_t *IA, size_t *JA, size_t *IB, size_t *JB, double *AN, double *AD, double *BN, double *BD, size_t *IP) |
| Перестановка строк и столбцов симметричной матрицы. | |
Решение систем уравнений с разреженными матрицами | |
| int | sp_chol_symb (size_t *IA, size_t *JA, size_t n, size_t *IU, size_t *JU, size_t size_U) |
| Символическое треугольное разложение (Холецкого) разреженной симметричной матрицы. | |
| void | sp_chol_num (size_t *IA, size_t *JA, double *AN, double *AD, size_t *IU, size_t *JU, size_t n, double *UN, double *DINV) |
| Численное треугольное разложение (Холецкого) разреженной симметричной положительно определенной матрицы. | |
| void | sp_chol_solve (size_t *IU, size_t *JU, double *UN, double *DINV, double *b, size_t n, double *x) |
Решение симметричной разреженной системы линейных уравнений методом Холецкого. | |
| int | sp_gauss_seidel (size_t *IA, size_t *JA, double *AN, double *AD, double *b, size_t n, double f, double eps, int max_iter, double *x) |
Решение разреженной системы линейных уравнений методом Гаусса-Зейделя (с выбором параметра релаксации). | |
| int | sp_gauss_seidel_m (size_t *IA, size_t *JA, double *AN, double *b, size_t n, double f, double eps, int max_iter, double *x) |
Решение разреженной системы линейных уравнений методом Гаусса-Зейделя (с выбором параметра релаксации). | |
| int | sp_conj (size_t *IA, size_t *JA, double *AN, double *b, size_t n, double eps, int max_iter, double *x) |
Решение разреженной симметричной системы линейных уравнений методом сопряженных градиентов. | |
| int | sp_conj_sym (size_t *IA, size_t *JA, double *AN, double *AD, double *b, size_t n, double eps, int max_iter, double *x) |
Решение разреженной симметричной системы линейных уравнений методом сопряженных градиентов. | |
| int | sp_biconj (size_t *IA, size_t *JA, double *AN, double *b, size_t n, double eps, int max_iter, double *x) |
Решение разреженной системы линейных уравнений методом бисопряженных градиентов. | |
Файл содержит функции, поддерживающие работу с разреженными матрицами.
Для представления разреженных матриц общего вида в библиотеке используются так называемые RR(C)O и RR(C)U-форматы (row-wise representation complete and ordered и row-wise representation complete and unordered соответственно). С каждой матрицей
в этих форматах связаны одномерный массив элементов
и два массива указателей:
и
. Все ненулевые элементы хранятся построчно в массиве
. Индексы столбцов ненулевых элементов - в массиве
. Элементы массива
указывают на позиции, с которых начинается описание очередной строки. Более точно, описание
-й строки хранится в позициях с
до
массивов
и
. Если
, то
-ая строка пустая. Отличие формата RR(C)O от RR(C)U в том, что при использовании первого формата ненулевые элементы внутри каждой строки храняться упорядоченно, при использовании второго ненулевые элементы внутри одной строки могут храниться в произвольном порядке.
Для представления разреженных симметричных матриц используются RR(U)O и RR(U)U-форматы. Отличие этих форматов от двух предыдущих в том, что, в массивах
,
,
хранится информация об элементах матрицы, лежащих выше диагонали, диагональные элементы (в том числе нулевые) хранятся отдельно в одномерном массиве
.
Подробно различные форматы хранения разреженных матриц опиcаны в [ZolotykhBelov] и [Pissanezki]
| void sp_add_num | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| size_t * | IB, | |||
| size_t * | JB, | |||
| double * | BN, | |||
| size_t | m, | |||
| size_t | n, | |||
| size_t * | IC, | |||
| size_t * | JC, | |||
| double * | CN | |||
| ) |
Численное сложение разреженных матриц.
,
,
- разреженное представление матрицы
в RR(C)U-формате
,
,
- разреженное представление матрицы
в RR(C)U-формате
,
- портрет суммы
в RR(U)U-формате
- число строк матриц
,
, 
- число столбцов матриц
,
, 
- численные значения ненулевых элементов суммы 
Трудоемкость:
| int sp_add_symb | ( | size_t * | IA, | |
| size_t * | JA, | |||
| size_t * | IB, | |||
| size_t * | JB, | |||
| size_t | m, | |||
| size_t | n, | |||
| size_t * | IC, | |||
| size_t * | JC, | |||
| size_t | size_C | |||
| ) |
Символическое сложение разреженных матриц.
,
- портрет матрицы
в RR(C)U-формате
,
- портрет матрицы
в RR(C)U-формате
- число строк матриц
и 
- число столбцов матриц
и 
- размер массива
. Если размер не достаточен, программа аварийно завершит работу, с кодом nl_err_inconsistent_size
,
- портрет суммы
в RR(C)U-формате
, если произошла ошибка, и не
если функция успешно завершилась.Трудоемкость:
| int sp_biconj | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | b, | |||
| size_t | n, | |||
| double | eps, | |||
| int | max_iter, | |||
| double * | x | |||
| ) |
Решение разреженной системы линейных уравнений
методом бисопряженных градиентов.
,
,
- разреженное представление матрицы
в RR(C)U-формате
- вектор правых частей системы
- порядок системы
- заданная точность, с которой необходимо вычислить решение системы
- максимальное количество итераций
- начальное приближение решения
- найденное решение
Функция возвращает значение, на
меньшее количества выполненных итераций. Если это значение равно
, то заданная точность не достигнута
Трудоемкость:
| void sp_chol_num | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| size_t * | IU, | |||
| size_t * | JU, | |||
| size_t | n, | |||
| double * | UN, | |||
| double * | DINV | |||
| ) |
Численное треугольное разложение (Холецкого) разреженной симметричной положительно определенной матрицы.
Процедура строит численное треугольное разложение симметричной положительно определенной матрицы
вида
.
,
,
,
- разреженное представление матрицы
в RR(U)U-формате
,
- портрет матрицы
в RR(C)O-формате
- порядок матрицы 
- численные значения ненулевых элементов матрицы 
- значения диагональных элементов матрицы, обратной к
Трудоемкость: | void sp_chol_solve | ( | size_t * | IU, | |
| size_t * | JU, | |||
| double * | UN, | |||
| double * | DINV, | |||
| double * | b, | |||
| size_t | n, | |||
| double * | x | |||
| ) |
Решение симметричной разреженной системы линейных уравнений
методом Холецкого.
,
,
- разреженное представление верхней треугольной матрицы
с единичной диагональю в RR(U)O-формате (диагональ не хранится)
- значения диагональных элементов матрицы, обратной к 
- вектор правых частей системы
- порядок системы
- найденное решениеТрудоемкость:
| int sp_chol_symb | ( | size_t * | IA, | |
| size_t * | JA, | |||
| size_t | n, | |||
| size_t * | IU, | |||
| size_t * | JU, | |||
| size_t | size_U | |||
| ) |
Символическое треугольное разложение (Холецкого) разреженной симметричной матрицы.
Процедура строит символическое треугольное разложение симметричной матрицы A вида
.
,
- портрет матрицы
в RR(U)U-формате
- порядок матрицы 
- размер массива
. Если размер не достаточен, программа аварийно завершит работу, с кодом nl_err_inconsistent_size
,
- портрет матрицы
в RR(U)U-формате
, если произошла ошибка, и не
если функция успешно завершилась.Трудоемкость:
| void sp_colperm_sym | ( | size_t * | IA, | |
| size_t * | JA, | |||
| size_t | n, | |||
| size_t * | p | |||
| ) |
Выдаёт вектор перестановок, такой, что столбцы матрицы будут расположены по неубыванию числа ненулевых элементов в них.
,
- портрет матрицы
в RR(U)U-формате
- порядок матрицы 
Трудоемкость:
| int sp_conj | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | b, | |||
| size_t | n, | |||
| double | eps, | |||
| int | max_iter, | |||
| double * | x | |||
| ) |
Решение разреженной симметричной системы линейных уравнений
методом сопряженных градиентов.
В отличие от функции sp_conj_sym матрица
представлена в RR(C)U-формате
,
,
- разреженное представление симметричной матрицы
в RR(C)U-формате
- вектор правых частей системы
- порядок системы
- заданная точность, с которой необходимо вычислить решение системы
- максимальное количество итераций
- начальное приближение решения
- найденное решениеТрудоемкость:
| int sp_conj_sym | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| double * | b, | |||
| size_t | n, | |||
| double | eps, | |||
| int | max_iter, | |||
| double * | x | |||
| ) |
Решение разреженной симметричной системы линейных уравнений
методом сопряженных градиентов.
В отличие от функции sp_conj матрица
представлена в RR(U)U-формате
,
,
,
- разреженное представление симметричной матрицы
в RR(U)U-формате
- вектор правых частей системы
- порядок системы
- заданная точность, с которой необходимо вычислить решение системы
- максимальное количество итераций
- начальное приближение решения
- найденное решение
Функция возвращает значение, на
меньшее количества выполненных итераций. Если это значение равно
, то заданная точность не достигнута
Трудоемкость:
| void sp_convert | ( | size_t | nz, | |
| double * | A, | |||
| size_t * | I, | |||
| size_t * | J, | |||
| size_t | m, | |||
| size_t * | IA, | |||
| size_t * | JA, | |||
| double * | AN | |||
| ) |
Построение разреженной матрицы по списку ненулевых элементов.
- число ненулевых элементов
- массив ненулевых элементов матрицы
,
- индексы строк и столбцов ненулевых элементов матрицы
- число строк матрицы 
,
,
- разреженное представление матрицы в RR(C)U-форматеТрудоемкость:
| void sp_create | ( | size_t | m, | |
| size_t | nz, | |||
| size_t ** | IA, | |||
| size_t ** | JA, | |||
| double ** | AN | |||
| ) |
Выделение памяти под разреженную матрицу.
- число строк матрицы 
- число ненулевых элементов матрицы 
,
,
- массивы под представление матрицы в RR(C)U-формате | void sp_create_sym | ( | size_t | n, | |
| size_t | nz, | |||
| size_t ** | IA, | |||
| size_t ** | JA, | |||
| double ** | AN, | |||
| double ** | AD | |||
| ) |
Выделение памяти под разреженную симметричную матрицу.
- порядок матрицы 
- число ненулевых элементов матрицы 
,
,
,
- массивы под представление матрицы в RR(U)U-формате | void sp_fprint | ( | FILE * | file, | |
| size_t * | IA, | |||
| size_t * | JA, | |||
| double * | AN, | |||
| size_t | m, | |||
| size_t | n, | |||
| const char * | format | |||
| ) |
Форматированный вывод разреженной матрицы в файл.
Выводятся размеры матрицы, а затем три вектора, которые задают разреженное представление матрицы:
,
,
.
- файл, в который осуществляется вывод
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
- формат представления элементов матрицы | void sp_fprint_list | ( | FILE * | file, | |
| size_t * | IA, | |||
| size_t * | JA, | |||
| double * | AN, | |||
| size_t | m, | |||
| size_t | n, | |||
| const char * | xformat, | |||
| const char * | dformat | |||
| ) |
Форматированный вывод разреженной матрицы на экран.
Выводятся размеры матрицы и число ненулевых элементов. Затем выводится матрица в виде списка ненулевых элементов с указанием их позиций.
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
- формат представления позиций элементов матрицы
- формат представления элементов матрицы | void sp_fprint_list_sym | ( | FILE * | file, | |
| size_t * | IA, | |||
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| size_t | n, | |||
| const char * | xformat, | |||
| const char * | dformat | |||
| ) |
Форматированный вывод симметричной разреженной матрицы в файл.
Выводятся размер матрицы и общее число ненулевых элементов, задающих разреженное представление (число ненулевых элементов выше диагонали плюс диагональные элементы). Затем выводится матрица в виде списка ненулевых элементов с указанием их позиций.
- файл, в который осуществляется вывод
,
,
,
- разреженное представление матрицы в RR(U)U-формате
- число строк/столбцов матрицы 
- формат представления позиций элементов матрицы
- формат представления элементов матрицы | void sp_fprint_sym | ( | FILE * | file, | |
| size_t * | IA, | |||
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| size_t | n, | |||
| const char * | format | |||
| ) |
Форматированный вывод разреженной матрицы в файл.
Выводятся размер матрицы и четыре вектора, которые задают разреженное представление матрицы:
,
,
,
.
- файл, в который осуществляется вывод
,
,
,
- разреженное представление матрицы в RR(U)U-формате
- число строк/столбцов матрицы 
- формат представления элементов матрицы | void sp_free | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN | |||
| ) |
Освобождение памяти, выделенной под разреженную матрицу.
Вход:
,
,
,
- разреженное представление матрицы в RR(U)U-формате
- порядок матрицы
| void sp_free_sym | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD | |||
| ) |
Освобождение памяти, выделенной под разреженную симметричную матрицу.
Вход:
,
,
,
- разреженное представление матрицы в RR(U)U-формате
- порядок матрицы
| int sp_fscan | ( | FILE * | file, | |
| size_t ** | IA, | |||
| size_t ** | JA, | |||
| double ** | AN, | |||
| size_t * | m, | |||
| size_t * | n | |||
| ) |
Чтение разреженной матрицы из файла.
Функция считывает с клавиатуры число строк и число столбцов, размещает память под структуру хранения разреженной матрицы, а затем считывает векторы представления разреженной матрицы.
- файл
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
, если произошла ошибка, и не
если функция успешно завершилась. | int sp_fscan_sym | ( | FILE * | file, | |
| size_t ** | IA, | |||
| size_t ** | JA, | |||
| double ** | AN, | |||
| double ** | AD, | |||
| size_t * | n | |||
| ) |
Чтение разреженной матрицы из файла.
Функция считывает из файла число строк/столбцов, размещает память под структуру хранения разреженной матрицы, а затем считывает вектора представляения разреженной матрицы.
- файл
,
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк/столбцов матрицы 
, если произошла ошибка, и не
если функция успешно завершилась. | void sp_full | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| size_t | m, | |||
| size_t | n, | |||
| double ** | A | |||
| ) |
Конвертация разреженного представления матрицы общего вида в плотное.
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
- плотное представление симметричной матрицыТрудоемкость:
| void sp_full_sym | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| size_t | n, | |||
| double ** | A | |||
| ) |
Конвертация разреженного представления симметричной матрицы в плотное.
,
,
,
- разреженное представление матрицы в RR(U)U-формате
- порядок матрицы 
- плотное представление симметричной матрицыТрудоемкость:
| int sp_gauss_seidel | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| double * | b, | |||
| size_t | n, | |||
| double | f, | |||
| double | eps, | |||
| int | max_iter, | |||
| double * | x | |||
| ) |
Решение разреженной системы линейных уравнений
методом Гаусса-Зейделя (с выбором параметра релаксации).
,
,
,
- разреженное представление матрицы
в RR(LU)U-формате (Row - wise Representation, Lower - Upper, Unordered, то есть строчное представление, нижний треугольник - верхний треугольник, неупорядоченное) -- диагональные элементы в отдельном массиве.
- вектор правых частей системы
- порядок системы
- параметр релаксации
- допуск на абсолютную величину приращения в тесте на сходимость
- максимальное количество итераций
- найденное решениеТрудоемкость:
| int sp_gauss_seidel_m | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | b, | |||
| size_t | n, | |||
| double | f, | |||
| double | eps, | |||
| int | max_iter, | |||
| double * | x | |||
| ) |
Решение разреженной системы линейных уравнений
методом Гаусса-Зейделя (с выбором параметра релаксации).
,
,
- разреженное представление матрицы
в RR(C)U-формате
- вектор правых частей системы
- порядок системы
- параметр релаксации
- допуск на абсолютную величину приращения в тесте на сходимость
- максимальное количество итераций
- найденное решение
если произошла ошибка.Трудоемкость:
| size_t sp_list | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| size_t | m, | |||
| double * | A, | |||
| size_t * | I, | |||
| size_t * | J | |||
| ) |
Получение списка всех ненулевых элементов разреженной матрицы.
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
- массив ненулевых элементов матрицы
,
- индексы строк и столбцов ненулевых элементов матрицыТрудоемкость:
| void sp_mult_col | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | b, | |||
| size_t | m, | |||
| double * | c | |||
| ) |
Умножение разреженной матрицы на плотный столбец.
,
,
- разреженное представление матрицы
в RR(C)U-формате
- плотный вектор-столбец
- число строк матрицы 
- произведение 
Трудоемкость:
| void sp_mult_col_sym | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| double * | b, | |||
| size_t | n, | |||
| double * | c | |||
| ) |
Умножение симметричной матрицы на плотный столбец.
,
,
,
- разреженное представление матрицы
в RR(U)U-формате
- плотный вектор-строка
- порядок матрицы 
- произведение 
Трудоемкость:
| void sp_mult_num | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| size_t * | IB, | |||
| size_t * | JB, | |||
| double * | BN, | |||
| size_t * | IC, | |||
| size_t * | JC, | |||
| size_t | m, | |||
| size_t | k, | |||
| double * | CN | |||
| ) |
Численное умножение разреженных матриц.
,
,
- разреженное представление матрицы
в RR(C)U-формате
,
,
- разреженное представление матрицы
в RR(C)U-формате
,
- портрет произведения
в RR(C)U-формате
- число строк матриц
и 
- число столбцов матриц
и 
- численные значения ненулевых элементов произведения 
Трудоемкость:
| void sp_mult_row | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | b, | |||
| size_t | m, | |||
| size_t | n, | |||
| double * | c | |||
| ) |
Умножение плотной строки на разреженную матрицу.
,
,
- разреженное представление матрицы
в RR(C)U-формате
- плотный вектор-строка
- число строк матрицы 
- число столбцов матрицы 
- произведение 
Трудоемкость:
| int sp_mult_symb | ( | size_t * | IA, | |
| size_t * | JA, | |||
| size_t * | IB, | |||
| size_t * | JB, | |||
| size_t | m, | |||
| size_t | k, | |||
| size_t * | IC, | |||
| size_t * | JC, | |||
| size_t | size_C | |||
| ) |
Символическое умножение разреженных матриц.
,
- портрет матрицы
в RR(C)U-формате
,
- портрет матрицы
в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
- размер массива
. Если размер не достаточен, программа аварийно завершит работу, с кодом nl_err_inconsistent_size
,
- портрет произведения
в RR(C)U-формате
, если произошла ошибка, и не
если функция успешно завершилась.Трудоемкость:
| size_t sp_nz | ( | size_t | m, | |
| size_t * | IA | |||
| ) |
Возвращает число ненулевых элементов в разреженном представлении матрицы.
- число строк матрицы 
- массив описания строк в RR(C)U-формате| void sp_order | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| size_t | m | |||
| ) |
Упорядочение представления разреженной матрицы общего вида.
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
,
,
- разреженное представление исходной матрицы в RR(C)O-форматеТрудоемкость:
| void sp_order_m | ( | size_t * | IA, | |
| size_t * | JA, | |||
| size_t | m | |||
| ) |
Упорядочение портрета разреженной матрицы общего вида.
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
,
- разреженное представление исходной матрицы в RR(C)O-форматеТрудоемкость:
| void sp_permute_sym | ( | size_t | n, | |
| size_t * | IA, | |||
| size_t * | JA, | |||
| size_t * | IB, | |||
| size_t * | JB, | |||
| double * | AN, | |||
| double * | AD, | |||
| double * | BN, | |||
| double * | BD, | |||
| size_t * | IP | |||
| ) |
| void sp_print | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| size_t | m, | |||
| size_t | n, | |||
| const char * | format | |||
| ) |
Форматированный вывод разреженной матрицы на экран.
Выводятся размеры матрицы, а затем три вектора, которые задают разреженное представление матрицы:
,
,
.
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
- формат представления элементов матрицы | void sp_print_list | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| size_t | m, | |||
| size_t | n, | |||
| const char * | xformat, | |||
| const char * | dformat | |||
| ) |
Форматированный вывод разреженной матрицы на экран.
Выводятся размеры матрицы и число ненулевых элементов. Затем матрица выводится в виде списка ненулевых элементов с указанием их позиций.
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
- формат представления позиций элементов матрицы
- формат представления элементов матрицы | void sp_print_list_sym | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| size_t | n, | |||
| const char * | xformat, | |||
| const char * | dformat | |||
| ) |
Форматированный вывод симметричной разреженной матрицы на экран.
Выводятся размеры матрицы и общее число ненулевых элементов, задающих разреженное представление (число ненулевых элементов выше диагонали плюс диагональные элементы). Затем выводится матрица в виде списка ненулевых элементов с указанием их позиций.
,
,
,
- разреженное представление матрицы в RR(U)U-формате
- число строк/столбцов матрицы 
- формат представления позиций элементов матрицы
- формат представления элементов матрицы | void sp_print_sym | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| double * | AD, | |||
| size_t | n, | |||
| const char * | format | |||
| ) |
Форматированный вывод симметричной разреженной матрицы на экран.
Выводятся размер матрицы и четыре вектора, которые задают разреженное представление матрицы:
,
,
,
.
,
,
,
- разреженное представление симметричной матрицы в RR(U)U-формате
- число строк/столбцов матрицы 
- формат представления позиций элементов матрицы
- формат представления элементов матрицы | void sp_row_nz_sym | ( | size_t * | IA, | |
| size_t * | JA, | |||
| size_t | n, | |||
| size_t * | nz | |||
| ) |
Заполнение вектора, так что
-я компонента равна числу ненулевых элементов в
-й строке/столбце симметричной разреженной матрицы.
Трудоемкость:
;
| int sp_scan | ( | size_t ** | IA, | |
| size_t ** | JA, | |||
| double ** | AN, | |||
| size_t * | m, | |||
| size_t * | n | |||
| ) |
Чтение разреженной матрицы с клавиатуры.
Функция считывает с клавиатуры число строк и число столбцов, размещает память под структуру хранения разреженной матрицы, а затем считывает векторы представления разреженной матрицы.
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
, если произошла ошибка, и не
если функция успешно завершилась. | int sp_scan_sym | ( | size_t ** | IA, | |
| size_t ** | JA, | |||
| double ** | AN, | |||
| double ** | AD, | |||
| size_t * | n | |||
| ) |
Чтение разреженной матрицы с клавиатуры.
Функция считывает с клавиатуры число строк/столбцов, размещает память под структуру хранения разреженной матрицы, а затем считывает вектора представляения разреженной матрицы.
,
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк/столбцов матрицы 
, если произошла ошибка, и не
если функция успешно завершилась. | void sp_sparse | ( | double ** | A, | |
| size_t | m, | |||
| size_t | n, | |||
| size_t ** | IA, | |||
| size_t ** | JA, | |||
| double ** | AN, | |||
| double | eps | |||
| ) |
Конвертация плотного представления матрицы общего вида в разреженное.
- плотное представление матрицы
- число строк матрицы 
- число столбцов матрицы 
- элементы, меньшие
будут обнулены
,
,
- разреженное представление матрицы в RR(C)O-форматеТрудоемкость:
| void sp_sparse_sym | ( | double ** | A, | |
| size_t | n, | |||
| size_t ** | IA, | |||
| size_t ** | JA, | |||
| double ** | AN, | |||
| double ** | AD, | |||
| double | eps | |||
| ) |
Конвертация плотного представления симметричной матрицы в разреженное.
- плотное представление симметричной матрицы
- порядок матрицы 
- элементы, меньшие
будут обнулены
,
,
,
- разреженное представление матрицы в RR(U)O-форматеТрудоемкость:
| void sp_sym_to_complete | ( | size_t * | IS, | |
| size_t * | JS, | |||
| double * | SN, | |||
| double * | SD, | |||
| size_t | n, | |||
| size_t * | IA, | |||
| size_t * | JA, | |||
| double * | AN | |||
| ) |
Конвертация разреженного симметричной матрицы из формата RR(U)U в RR(C)U.
Память под выходную матрицу должна быть выделена, так что число ненулевых элементов должн быть не меньше
, где
-- число ненулевых элементов в исходной матрице.
Пример: sp_create(n, 2*sp_nz(n,IS) + n, &IA, &JA, &AN)
,
,
,
- разреженное представление матрицы в RR(U)U-формате
- порядок матрицы
,
,
- разреженное представление матрицы в RR(C)U-формате Трудоемкость: | void sp_transpose | ( | size_t * | IA, | |
| size_t * | JA, | |||
| double * | AN, | |||
| size_t | m, | |||
| size_t | n, | |||
| size_t * | IAT, | |||
| size_t * | JAT, | |||
| double * | ATN | |||
| ) |
Транспонирование разреженной матрицы.
,
,
- разреженное представление матрицы в RR(C)U-формате
- число строк матрицы 
- число столбцов матрицы 
,
,
- разреженное представление транспонированной матрицы в RR(C)O-форматеТрудоемкость:
1.4.7