В этом примере показано, как HDL- Coder™ реализует потоковый режим обратной операции матрицы с конфигурируемыми размерами.
Матрица X обратима, если существует матрица Y того же размера, такого что XY = YX = I, где I является Тождествами матрицей. Матрица 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];Чтобы найти обратную матрицу А, используя исключение по Гауссу-Жордану, мы должны найти элементарные операции строк, которые сводят A к единичной матрице (I), и затем выполнить те же операции на Единичной матрице (I), чтобы получить Ainv.
Расчет обратной матрицы с использованием Исключения по Гауссу-Жордану: Позвольте начать с матрицы А и запишите его с помощью матрицы Тождеств рядом с ней: [A | I]
Цель состоит в том, чтобы сделать A матрицей тождеств путем применения преобразований строк, и правая матрица I также участвовала в преобразованиях строк, наконец, сведенных к 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 1Find 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 1Make 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 1Now 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)Обратная матрица, использующая холецкое разложение, поддерживает только симметричные положительно определенные матрицы. Положительное определенное означает, что все собственные значения матрицы должны быть положительными.
Учитывая симметричную положительно определенную матрицу А:
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, MatrixInverse, и OutputSubsystem. The InputSubsystem - вышестоящий модуль, который сериализует матричный вход в обрабатывающий модуль, когда ready включен сигнал. The OutputSubsystem - дочерний модуль, который десериализует данные из модуля обработки в матричный выход, когда outEnable включен сигнал. The MatrixInverse является модулем обработки, который реализует операцию обратной матрицы.
open_system('hdlcoder_streaming_mat_inv_max_lat_cholesky'); open_system('hdlcoder_streaming_mat_inv_max_lat_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. Во время моделирования симуляции генерации кода сравниваются с выходами блоков MATLAB System.
Факторизация Холецкого

Исключение по Гауссу-Жордану
