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. Подробнее...
 

Подробное описание

В данном разделе описаны функции работы с матрицами и алгоритмы линейной алгебры. Вычислительными ядрами являются пакеты BLAS и LAPACK, функции которых вызываются через интерфейс DSPL-2.0.

Матрицы - двумерные объекты, которые хранятся в линейной памяти по столбцам и передаются в функции в виде указателя на линейную область памяти.

Функции

◆ matrix_eig_cmplx()

int matrix_eig_cmplx ( complex_t a,
int  n,
complex_t v,
int *  info 
)

Расчет собственных значений квадратной комплексной матрицы.


Данная функция производит расчет 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.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dspl.h"
#define N 3
int main()
{
void* handle; /* DSPL handle */
handle = dspl_load(); /* Load DSPL function */
complex_t a[N*N] = {{1.0, 0.0}, {1.0, 0.0}, {0.0, 0.0},
{2.0, 0.0}, {0.0, 0.0}, {1.0, 0.0},
{3.0, 0.0}, {0.0, 0.0}, {0.0, 0.0}};
complex_t v[N];
int err, info;
matrix_print_cmplx(a, N, N, "A", "%8.2f%+8.2fi");
err = matrix_eig_cmplx(a, N, v, &info);
if(err!=RES_OK)
{
printf("ERROR CODE: 0x%.8x, info = %d\n", err, info);
}
matrix_print_cmplx(v, N, 1, "v", "%10.6f%+10.6fi");
dspl_free(handle); /* free dspl handle */
return 0;
}

Данная программа рассчитывает собственные значения матрицы размерности 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;];
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле matrix.c строка 31

Используется в 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 — функция выполнена успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле matrix.c строка 69