Создание, освобождение и преобразование разреженных матриц | |
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 | |||
) |
Численное сложение разреженных матриц.
Трудоемкость:
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 | |||
) |
Символическое сложение разреженных матриц.
Трудоемкость:
int sp_biconj | ( | size_t * | IA, | |
size_t * | JA, | |||
double * | AN, | |||
double * | b, | |||
size_t | n, | |||
double | eps, | |||
int | max_iter, | |||
double * | x | |||
) |
Решение разреженной системы линейных уравнений методом бисопряженных градиентов.
Функция возвращает значение, на меньшее количества выполненных итераций. Если это значение равно , то заданная точность не достигнута
Трудоемкость:
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_chol_symb | ( | size_t * | IA, | |
size_t * | JA, | |||
size_t | n, | |||
size_t * | IU, | |||
size_t * | JU, | |||
size_t | size_U | |||
) |
Символическое треугольное разложение (Холецкого) разреженной симметричной матрицы.
Процедура строит символическое треугольное разложение симметричной матрицы A вида .
Трудоемкость:
void sp_colperm_sym | ( | size_t * | IA, | |
size_t * | JA, | |||
size_t | n, | |||
size_t * | p | |||
) |
Выдаёт вектор перестановок, такой, что столбцы матрицы будут расположены по неубыванию числа ненулевых элементов в них.
Трудоемкость:
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-формате
Трудоемкость:
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-формате
Функция возвращает значение, на меньшее количества выполненных итераций. Если это значение равно , то заданная точность не достигнута
Трудоемкость:
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_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 | |||
) |
Выделение памяти под разреженную симметричную матрицу.
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 | |||
) |
Форматированный вывод разреженной матрицы на экран.
Выводятся размеры матрицы и число ненулевых элементов. Затем выводится матрица в виде списка ненулевых элементов с указанием их позиций.
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 | |||
) |
Форматированный вывод симметричной разреженной матрицы в файл.
Выводятся размер матрицы и общее число ненулевых элементов, задающих разреженное представление (число ненулевых элементов выше диагонали плюс диагональные элементы). Затем выводится матрица в виде списка ненулевых элементов с указанием их позиций.
void sp_fprint_sym | ( | FILE * | file, | |
size_t * | IA, | |||
size_t * | JA, | |||
double * | AN, | |||
double * | AD, | |||
size_t | n, | |||
const char * | format | |||
) |
Форматированный вывод разреженной матрицы в файл.
Выводятся размер матрицы и четыре вектора, которые задают разреженное представление матрицы: , , , .
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 | |||
) |
Чтение разреженной матрицы из файла.
Функция считывает с клавиатуры число строк и число столбцов, размещает память под структуру хранения разреженной матрицы, а затем считывает векторы представления разреженной матрицы.
int sp_fscan_sym | ( | FILE * | file, | |
size_t ** | IA, | |||
size_t ** | JA, | |||
double ** | AN, | |||
double ** | AD, | |||
size_t * | n | |||
) |
Чтение разреженной матрицы из файла.
Функция считывает из файла число строк/столбцов, размещает память под структуру хранения разреженной матрицы, а затем считывает вектора представляения разреженной матрицы.
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 | |||
) |
Конвертация разреженного представления симметричной матрицы в плотное.
Трудоемкость:
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 | |||
) |
Решение разреженной системы линейных уравнений методом Гаусса-Зейделя (с выбором параметра релаксации).
Трудоемкость:
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_mult_col | ( | size_t * | IA, | |
size_t * | JA, | |||
double * | AN, | |||
double * | b, | |||
size_t | m, | |||
double * | c | |||
) |
Умножение разреженной матрицы на плотный столбец.
Трудоемкость:
void sp_mult_col_sym | ( | size_t * | IA, | |
size_t * | JA, | |||
double * | AN, | |||
double * | AD, | |||
double * | b, | |||
size_t | n, | |||
double * | 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_mult_row | ( | size_t * | IA, | |
size_t * | JA, | |||
double * | AN, | |||
double * | b, | |||
size_t | m, | |||
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 | |||
) |
Символическое умножение разреженных матриц.
Трудоемкость:
size_t sp_nz | ( | size_t | m, | |
size_t * | IA | |||
) |
Возвращает число ненулевых элементов в разреженном представлении матрицы.
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_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 | |||
) |
Форматированный вывод разреженной матрицы на экран.
Выводятся размеры матрицы, а затем три вектора, которые задают разреженное представление матрицы: , , .
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_print_list_sym | ( | size_t * | IA, | |
size_t * | JA, | |||
double * | AN, | |||
double * | AD, | |||
size_t | n, | |||
const char * | xformat, | |||
const char * | dformat | |||
) |
Форматированный вывод симметричной разреженной матрицы на экран.
Выводятся размеры матрицы и общее число ненулевых элементов, задающих разреженное представление (число ненулевых элементов выше диагонали плюс диагональные элементы). Затем выводится матрица в виде списка ненулевых элементов с указанием их позиций.
void sp_print_sym | ( | size_t * | IA, | |
size_t * | JA, | |||
double * | AN, | |||
double * | AD, | |||
size_t | n, | |||
const char * | format | |||
) |
Форматированный вывод симметричной разреженной матрицы на экран.
Выводятся размер матрицы и четыре вектора, которые задают разреженное представление матрицы: , , , .
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 | |||
) |
Чтение разреженной матрицы с клавиатуры.
Функция считывает с клавиатуры число строк и число столбцов, размещает память под структуру хранения разреженной матрицы, а затем считывает векторы представления разреженной матрицы.
int sp_scan_sym | ( | size_t ** | IA, | |
size_t ** | JA, | |||
double ** | AN, | |||
double ** | AD, | |||
size_t * | n | |||
) |
Чтение разреженной матрицы с клавиатуры.
Функция считывает с клавиатуры число строк/столбцов, размещает память под структуру хранения разреженной матрицы, а затем считывает вектора представляения разреженной матрицы.
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_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)
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 | |||
) |
Транспонирование разреженной матрицы.
Трудоемкость: