kopia lustrzana https://github.com/Dsplib/libdspl-2.0
116 wiersze
4.5 KiB
Plaintext
116 wiersze
4.5 KiB
Plaintext
|
/*! ****************************************************************************
|
|||
|
\ingroup SPEC_MATH_LINALG_GROUP
|
|||
|
\struct matrix_t
|
|||
|
\brief Структура данных объекта матриц и векторов
|
|||
|
|
|||
|
Структура описывает вещественные и комплексные матрицы и векторы.
|
|||
|
|
|||
|
\param dat Указатель на область памяти, которая
|
|||
|
хранит матрицу или вектор <BR><BR>
|
|||
|
|
|||
|
\param n Количество строк матрицы. <BR><BR>
|
|||
|
|
|||
|
\param m Количество столбцов матрицы. <BR><BR>
|
|||
|
|
|||
|
\param type Тип матрицы. <BR><BR>
|
|||
|
|
|||
|
|
|||
|
Параметр `dat` преставляет собой указатель типа `void*` ввиду того, что матрица
|
|||
|
может содержать как вещественные, так и комплексные значения. Если матрица
|
|||
|
вещественная, то перед обращением к элементам матрицы необходимо указатель
|
|||
|
`dat` привести к типу `double*`. Аналогично, указатель `dat` необходимо привести
|
|||
|
к типу `complex_t*`, если матрица комплексная.
|
|||
|
|
|||
|
Матрицу заданного размера и типа можно создать функцией \ref matrix_create.
|
|||
|
Например
|
|||
|
\code
|
|||
|
|
|||
|
matrix_t a, b; // объявляем объекты матриц
|
|||
|
|
|||
|
// обнуляем все поля и указатели.
|
|||
|
// Данные шаг рекомендуется ввиду того, что некоторые компиляторы
|
|||
|
// при создании переменной не инициализируют ее нулем.
|
|||
|
memset(&a, 0, sizeof(matrix_t));
|
|||
|
memset(&b, 0, sizeof(matrix_t));
|
|||
|
|
|||
|
//создаем вещественную матрицу a размерности [3 x 4]
|
|||
|
err = matrix_create(&a, 3, 4, DAT_DOUBLE);
|
|||
|
|
|||
|
// создаем комплексную матрицу b размерности [3 x 2]
|
|||
|
err = matrix_create(&b, 3, 2, DAT_COMPLEX);
|
|||
|
|
|||
|
// ....
|
|||
|
// работа с матрицами a и b
|
|||
|
// ....
|
|||
|
|
|||
|
//очистить память перед выходом
|
|||
|
matrix_free(&a);
|
|||
|
matrix_free(&b);
|
|||
|
|
|||
|
\endcode
|
|||
|
|
|||
|
|
|||
|
Двумереные матрицы размером `n` на `m` расположены в памяти в виде линейного
|
|||
|
вектора, который организован по строкам. Так некий элемент матрицы \f$a_{ij}\f$
|
|||
|
матрицы размерности `n` на `m` будет иметь индекс `j*n+i` (индексация матриц
|
|||
|
начинается с нуля). Например:
|
|||
|
|
|||
|
\code
|
|||
|
|
|||
|
matrix_t a; // объявляем объекты матриц
|
|||
|
|
|||
|
// обнуляем все поля и указатели.
|
|||
|
// Данные шаг рекомендуется ввиду того, что некоторые компиляторы
|
|||
|
// при создании переменной не инициализируют ее нулем.
|
|||
|
memset(&a, 0, sizeof(matrix_t));
|
|||
|
|
|||
|
|
|||
|
// создаем вещественную матрицу a размерности [3 x 4]
|
|||
|
err = matrix_create(&a, 3, 4, DAT_DOUBLE);
|
|||
|
|
|||
|
// приводим указатель к double*
|
|||
|
double* x = (double*)(a.dat);
|
|||
|
|
|||
|
// присваиваем элемент a[2,3] = 3.0
|
|||
|
x[3 * a.n + 2] = 3.0;
|
|||
|
|
|||
|
//очистить память перед выходом
|
|||
|
matrix_free(&a);
|
|||
|
|
|||
|
\endcode
|
|||
|
|
|||
|
Если требуется изменить размер матрицы, то можно повторно вызывать функцию
|
|||
|
\ref matrix_create. Например:
|
|||
|
|
|||
|
\code
|
|||
|
|
|||
|
matrix_t a; // объявляем объекты матриц
|
|||
|
|
|||
|
// обнуляем все поля и указатели.
|
|||
|
// Данные шаг рекомендуется ввиду того, что некоторые компиляторы
|
|||
|
// при создании переменной не инициализируют ее нулем.
|
|||
|
memset(&a, 0, sizeof(matrix_t));
|
|||
|
|
|||
|
|
|||
|
// создаем вещественную матрицу a размерности [3 x 4]
|
|||
|
err = matrix_create(&a, 3, 4, DAT_DOUBLE);
|
|||
|
|
|||
|
// .....
|
|||
|
|
|||
|
// изменяем размер матрицы а на [6 x 7]
|
|||
|
err = matrix_create(&a, 6, 7, DAT_DOUBLE);
|
|||
|
|
|||
|
|
|||
|
// очистить память перед выходом
|
|||
|
matrix_free(&a);
|
|||
|
|
|||
|
\endcode
|
|||
|
|
|||
|
|
|||
|
\author
|
|||
|
Бахурин Сергей.
|
|||
|
www.dsplib.org
|
|||
|
|
|||
|
***************************************************************************** */
|
|||
|
|