![]() |
libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
|
Функции | |
int | matrix_eig_cmplx (complex_t *a, int n, complex_t *v, int *info) |
Расчет собственных значений квадратной комплексной матрицы. Подробнее... | |
int | matrix_eye (double *a, int n, int m) |
Генерирование единичной вещественной матрицы размерности n x m . Подробнее... | |
int | matrix_eye_cmplx (complex_t *a, int n, int m) |
Генерирование единичной комплексной матрицы размерности n x m . Подробнее... | |
int | matrix_mul (double *a, int na, int ma, double *b, int nb, int mb, double *c) |
Произведение вещественных матриц. Подробнее... | |
Подробное описание
В данном разделе описаны функции работы с матрицами и алгоритмы линейной алгебры. Вычислительными ядрами являются пакеты BLAS и LAPACK, функции которых вызываются через интерфейс DSPL-2.0.
Матрицы - двумерные объекты, которые хранятся в линейной памяти по столбцам и передаются в функции в виде указателя на линейную область памяти.
Функции
◆ matrix_eig_cmplx()
Расчет собственных значений квадратной комплексной матрицы.
Данная функция производит расчет n
собственных значений квадратной матрицы размером n x n
.
- Аргументы
-
[in] a Указатель на комплексную матрицу размерности n x n
.
Матрица должна быть расположена в памяти по столбцам.
[in] n Размерность квадратной матрицы.
[out] v Указатель на вектор собственных значений матрицы.
Размер вектораn x 1
.
Память должна быть выделена.
[out] info Указатель на код возврата функции zgees
пакета LAPACK.
В случае возникновения ошибки при расчете вектора собственных значений, пакет LAPACK возвращает код ошибки, который может быть прочитан по данному указателю.
- Возвращает
RES_OK
— функция выполнена успешно.
В противном случае код ошибки.
При возникновении ошибкиERROR_LAPACK
по адресу
info
будет записан код ошибки пакета LAPACK.
Пример расчета собственных значений матрицы:
Данная программа рассчитывает собственные значения матрицы размерности 3 x 3
и выводит собственные значения на печать.
Результат работы программы:
A = [ % size [3 x 3] type: complex 1.00 +0.00i, 2.00 +0.00i, 3.00 +0.00i; 1.00 +0.00i, 0.00 +0.00i, 0.00 +0.00i; 0.00 +0.00i, 1.00 +0.00i, 0.00 +0.00i;]; v = [ % size [3 x 1] type: complex 2.374424 -0.000000i; -0.687212 +0.889497i; -0.687212 -0.889497i;];
См. определение в файле matrix_eig_cmplx.c строка 143
Используется в polyroots().
◆ matrix_eye()
int matrix_eye | ( | double * | a, |
int | n, | ||
int | m | ||
) |
Генерирование единичной вещественной матрицы размерности n x m
.
Данная функция заполняет матрицу нулями и записывает единицы на главной диагонали
- Аргументы
-
[in] a Указатель на вещественную матрицу размерности n x m
.
Матрица должна быть расположена в памяти по столбцам.
[in] n Количество строк матрицы.
[in] m Количество столбцов матрицы.
- Возвращает
RES_OK
— функция выполнена успешно.
В противном случае код ошибки.
См. определение в файле matrix_eye.c строка 80
◆ matrix_eye_cmplx()
int matrix_eye_cmplx | ( | complex_t * | a, |
int | n, | ||
int | m | ||
) |
Генерирование единичной комплексной матрицы размерности n x m
.
Данная функция заполняет матрицу нулями и записывает единицы на главной диагонали
- Аргументы
-
[in] a Указатель на комплексную матрицу размерности n x m
.
Матрица должна быть расположена в памяти по столбцам.
[in] n Количество строк матрицы.
[in] m Количество столбцов матрицы.
- Возвращает
RES_OK
— функция выполнена успешно.
В противном случае код ошибки.
См. определение в файле matrix_eye_cmplx.c строка 81
◆ matrix_mul()
int matrix_mul | ( | double * | a, |
int | na, | ||
int | ma, | ||
double * | b, | ||
int | nb, | ||
int | mb, | ||
double * | c | ||
) |
Произведение вещественных матриц.
Функция рассчитывает произведение матриц \(\mathbf{C} = \mathbf{AB}\), где \(\mathbf{A}\) – матрица размерности \(N_A\) строк и \(M_A\) столбцов, матрица размерности \(N_B\) строк и \(M_B\) столбцов, а результирующая матрица \(\mathbf{C} = \mathbf{AB}\) имеет размерность \(N_A\) строк и \(M_B\) столбцов.
- Заметки
- Для умножения матриц необходимо выполнение равенства \(M_A = N_B\).
Функция использует подпрограммуdgemm
пакета BLAS.
- Аргументы
-
[in] a Указатель на матрицу \(\mathbf{A}\) размерности na x ma
.
Матрица должна быть расположена в памяти по столбцам.
[in] na Количество строк матрицы a
.
[in] ma Количество столбцов матрицы a
.
[in] b Указатель на матрицу \(\mathbf{B}\) размерности nb x mb
.
Матрица должна быть расположена в памяти по столбцам.
[in] nb Количество строк матрицы b
.
Необходимо выполнение равенстваma = nb
.
[in] mb Количество столбцов матрицы b
.
[out] c Указатель на матрицу \(\mathbf{С} = \mathbf{AB}\).
Размер матрицыna x mb
.
Память должна быть выделена.
- Возвращает
RES_OK
— функция выполнена успешно.
В противном случае код ошибки.
Пример умножения матриц:#include <stdio.h>#include <stdlib.h>#include <string.h>#include "dspl.h"#define N 4#define M 3#define K 5int main(){void* handle; /* DSPL handle */handle = dspl_load(); /* Load DSPL function */double a[N*K], b[K*M], c[N*M];linspace(0, N*K, N*K, DSPL_PERIODIC, a);matrix_print(a, N, K, "A", "%8.2f");linspace(0, K*M, K*M, DSPL_PERIODIC, b);matrix_print(b, K, M, "B", "%8.2f");matrix_mul(a, N, K, b, K, M, c);matrix_print(c, N, M, "C", "%8.2f");dspl_free(handle); /* free dspl handle */return 0;}int linspace(double x0, double x1, int n, int type, double *x)Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0 до x1Definition: linspace.c:169int matrix_mul(double *a, int na, int ma, double *b, int nb, int mb, double *c)Произведение вещественных матриц.Definition: matrix_mul.c:191
Программа формирует и умножает две матрицы. Исходные матрицы и их произведение выводится на печать.
Результат работы программы:
A = [ % size [4 x 5] type: real 0.00, 4.00, 8.00, 12.00, 16.00; 1.00, 5.00, 9.00, 13.00, 17.00; 2.00, 6.00, 10.00, 14.00, 18.00; 3.00, 7.00, 11.00, 15.00, 19.00;]; B = [ % size [5 x 3] type: real 0.00, 5.00, 10.00; 1.00, 6.00, 11.00; 2.00, 7.00, 12.00; 3.00, 8.00, 13.00; 4.00, 9.00, 14.00;]; C = [ % size [4 x 3] type: real 120.00, 320.00, 520.00; 130.00, 355.00, 580.00; 140.00, 390.00, 640.00; 150.00, 425.00, 700.00;];
См. определение в файле matrix_mul.c строка 191
Документация по libdspl-2.0. Последние изменения: Ср 5 Янв 2022 12:44:35. Создано системой