Этот пример показывает, как HDL Coder™ реализует потоковый режим матричной обратной операции с помощью cholesky алгоритм разложения с конфигурируемыми размерами.
Матрица 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];
Матричная Инверсия с помощью 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];
Матричное описание портов Inverse:
Эта модель в качестве примера содержит три подсистемы: InputSubsystem
, MatrixInverse
и OutputSubsystem
. InputSubsystem
является восходящим модулем, который сериализирует матричный вход к модулю обработки, когда сигнал ready
включен. OutputSubsystem
является нисходящим модулем, который десериализовывает данные от модуля обработки до матричного вывода, когда сигнал outEnable
включен. MatrixInverse
является модулем обработки, который реализует матричную инверсию при помощи cholesky разложения.
open_system('hdlcoder_streaming_matrix_inverse_max_latency');
Синхронизация схемы для полной системы:
Синхронизация схемы для этапа обработки:
Форма волны результата Modelsim
Row size : Enter row size of input matrix as a positive integer.
Column size : Enter column 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.
Установите параметры блоков блока Matlab System.
Выберите входную матрицу на основе размера строки и размера столбца.
Сгенерируйте HDL-код для подсистемы MatrixInverse.
После рабочей генерации кода для подсистемы MatrixInverse сгенерированный код будет
Сгенерированная модель содержит блок MatrixInverse Matlab System. Во время modelsim генерации кода симуляции выходными параметрами являются по сравнению с блоком Matlab System выходные параметры.
Матрицы, для которых инверсия к вычисленному, должны быть симметричны положительно-определенный.
Типами входных данных матриц должен быть single
, и блок должен использоваться в режиме Native Floating Point
.
Входные матрицы не должны быть больше, чем 64 64 в размере..
Матричная Инверсия inv
Разложение Холесского chol
Собственные значения матрицы eig
LocalWords: собственный Ainv Linv последовательный deserializer Lowertriangular LocalWords: Matrixmultiplication validout, мультиплексирующий modelsim