В этом примере показано, как HDL Coder™ реализует потоковый режим операции обратной матрицы с конфигурируемыми размерами.
Матрица A X является обратимой, если там существует матрица Y, одного размера таким образом, что XY = YX = я, где я - Единичная матрица. Матрица Y называется инверсией X. Матрица, которая не имеет обратной, сингулярна. Квадратная матрица сингулярна только, когда ее определитель в точности равен нулю.
Расчет обратной матрицы включает следующие шаги:
Матричное вычисление кофактора
Транспонируйте матрицы кофактора
Умножьтесь обратная величина определителя входной матрицы с транспонируют матрицы кофактора
Пример:
A = [4 12 -16;12 37 -43;-16 -43 98]; Cofactors of 'A' will be calculated from matrix of minors cof(A) = [1777 488 76;488 136 20;76 20 4];
Transpose of cofactor matrix will be (cof(A))' = [1777 488 76;488 136 20;76 20 4];
Multiply reciprocal of determinant of 'A' with transpose of cofactor matrix Ainv = (1/det(A)) * (cof(A))' = [49.3611 -13.5556 2.1111;-13.5556 3.7778 -0.5556;2.1111 -0.5556 0.1111];
Чтобы найти инверсию матрицы А с помощью Исключения по Гауссу-Жордану, мы должны найти элементарные операции строки, которые уменьшают до единичной матрицы (I) и затем выполняют те же операции на Единичной матрице (I), чтобы получить Ainv.
Расчет Обратной матрицы с помощью Исключения по Гауссу-Жордану: Позвольте запускаются с матрицы А и записывают его с Единичной матрицей рядом с ним: [| я]
Цель состоит в том, чтобы сделать единичную матрицу путем применения преобразований строки и матрицы правой стороны, я также участвовал в преобразованиях строки, наконец уменьшаемых до Ainv.
Расчет Ainv включает следующие шаги:
свопинг строк
сделайте диагональные элементы как 1
сделайте недиагональные элементы как 0
Пример:
(A) (I) 1 2 3 | 1 0 0 [A | I] = 2 5 3 | 0 1 0 1 0 8 | 0 0 1
Find the element with maximum value in the first column and swap the current row with maximum element row swap R1 and R2 rows as R2 contains the largest values.
2 5 3 | 0 1 0 = 1 2 3 | 1 0 0 1 0 8 | 0 0 1
Make the diagonal element in the first column as '1' R1 --> R1/2
1 2.5 1.5 | 0 0.5 0 = 1 2 3 | 1 0 0 1 0 8 | 0 0 1 Make the non-diagonal elements in the first column as '0' R2 --> R2 - R1 R3 --> R3 - R1
1 2.5 1.5 | 0 0.5 0 = 0 -0.5 1.5 | 1 -0.5 0 0 -2.5 6.5 | 0 -0.5 1
Now column 1 has diagonal elements '1' and other elements as '0'. This procedure is repeated for remaining columns and matrix A will be reduced to identity matrix, Identity matrix will be reduced to Ainv.
1 0 0 | -40 16 9 = 0 1 0 | 13 -5 -3 0 0 1 | 5 -2 -1 (I) (Ainv)
Обратная матрица с помощью cholesky разложение поддерживает только симметричные положительные определенные матрицы. Положительный определенный означает, что все собственные значения матрицы должны быть положительными.
Учитывая симметричную положительную определенную матрицу А:
A = L * L', L is the lower triangular matrix L' is the transpose of L
inv(A) = inv(L * L') = inv(L') * inv(L) = (inv(L))' * inv(L)
Ainv = Linv' * Linv, Linv is the inverse of lower triangular matrix Ainv is the inverse of input matrix
Расчет Ainv включает следующие шаги:
Матричный расчет Нижней треугольной (L)
Инверсия нижней треугольной матрицы (Linv)
Умножение транспонирует Linv с Linv
Пример:
A = [4 12 -16;12 37 -43;-16 -43 98];
Lower triangular matrix(L) will be computed using cholesky decomposition L = [2 0 0;6 1 0;-8 5 3];
Linv will be computed using forward substitution method Linv = [0.5 0 0;-3 1 0;6.3333 -1.6667 0.3333];
Multiply transpose of Linv with Linv Ainv = Linv' * Linv = [49.3611 -13.5556 2.1111;-13.5556 3.7778 -0.5556;2.1111 -0.5556 0.1111];
Исключение по Гауссу-Жордану поддерживает все квадратные матрицы.
Исключение по Гауссу-Жордану поддерживает оба single
и double
типы данных.
Матрицы, для которых инверсия к вычисленному, должны быть симметричны положительно-определенный.
Типами входных данных матриц должен быть single
и блок должен использоваться в Native Floating Point
режим.
Входные матрицы не должны быть больше, чем 64 64 в размере.
Описание портов Обратной матрицы:
Эта модель в качестве примера содержит три подсистемы: InputSubsystem
Обращение матриц
, и OutputSubsystem
. InputSubsystem
восходящий модуль, который сериализирует матричный вход к модулю обработки когда ready
сигнал включен. OutputSubsystem
нисходящий модуль, который десериализовывает данные от модуля обработки до матричного выхода когда outEnable
сигнал включен. MatrixInverse
модуль обработки, который реализует операцию обратной матрицы.
open_system('hdlcoder_streaming_matrix_inverse_max_latency_cholesky'); open_system('hdlcoder_streaming_matrix_inverse_max_latency_gauss_jordan');
Синхронизация схемы для полной системы:
Синхронизация схемы для этапа обработки (Разложение Холесского):
Синхронизация схемы для этапа обработки (Исключение по Гауссу-Жордану):
Форма волны результата Modelsim (Разложение Холесского)
Форма волны результата Modelsim (Исключение по Гауссу-Жордану)
MatrixSize : Enter size of input matrix as a positive integer.
LatencyStrategy : Select latency strategy from drop down menu ({'ZERO, 'MIN', 'MAX'}) which should be same as HDL coder latency strategy. User can see processing latency based on the latency strategy. AlgorithmType : Select algorithm type from drop down menu({'CholeskyDecomposition', 'GaussJordanElimination'})
Установите параметры блоков блока Matlab System.
Выберите входную матрицу на основе матричного размера.
Сгенерируйте HDL-код для подсистемы MatrixInverse.
После рабочей генерации кода для подсистемы MatrixInverse сгенерированный код будет
Сгенерированная модель содержит блок MatrixInverse Matlab System. Во время modelsim генерации кода симуляции выходными параметрами являются по сравнению с блоком Matlab System выходные параметры.
Разложение Холесского
Исключение по Гауссу-Жордану
Обратная матрица inv
Разложение Холесского chol
Собственные значения матрицы eig
Строка уменьшала форму эшелона (Исключение по Гауссу-Жордану) rref
LocalWords: собственный Ainv Linv последовательные deserializer Кофакторы Lowertriangular YX LocalWords: Matrixmultiplication validout, мультиплексирующий modelsim cof гаусс