В этом примере показано, как реализовать аппаратное эффективное решение матричного уравнения A'AX=B с действительным знаком с помощью Действительной Частично-систолической Матрицы, Решают Используя блок Q-less QR Decomposition.
Задайте количество строк в матрице А, количество столбцов в матрице А и строк в B, и количество столбцов в матрице B.
m = 300; % Number of rows in A n = 10; % Number of columns in A and rows in B p = 1; % Number of columns in B
В данном примере используйте функцию помощника realRandomQlessQRMatrices
сгенерировать случайные матрицы A и B для проблемы A'AX=B. Матрицы сгенерированы таким образом, что элементы массива и B между-1 и +1, и A является полным рангом.
rng('default')
[A,B] = fixed.example.realRandomQlessQRMatrices(m,n,p);
Используйте функцию помощника realQlessQRMatrixSolveFixedpointTypes
выбрать типы данных с фиксированной точкой для входных матриц A и B и вывести X таким образом, что существует низкая вероятность переполнения во время расчета.
max_abs_A = 1; % Upper bound on max(abs(A(:)) max_abs_B = 1; % Upper bound on max(abs(B(:)) precisionBits = 24; % Number of bits of precision T = fixed.realQlessQRMatrixSolveFixedpointTypes(m,n,max_abs_A,max_abs_B,precisionBits); A = cast(A,'like',T.A); B = cast(B,'like',T.B); OutputType = fixed.extractNumericType(T.X);
model = 'RealPartialSystolicQlessQRMatrixSolveModel';
open_system(model);
Подсистема Обработчика Данных в этой модели берет действительные матрицы A и B как входные параметры. readyA
и readyB
порты инициировали Обработчик Данных. После отправки истинного сигнала validIn может быть некоторая задержка, прежде чем готовый будет установлен в ложь. Когда Обработчик Данных обнаруживает передний край readyA
сигнал, блок устанавливает validInA
к истине и отправляет следующую строку A. Когда Обработчик Данных обнаруживает передний край readyB
сигнал, блок устанавливает validInB
к истине и отправляет следующую матрицу B. Этот протокол позволяет данным быть отправленными каждый раз, когда передний край готового сигнала обнаруживается, гарантируя, что все данные обрабатываются.
Используйте функцию помощника setModelWorkspace
добавить переменные, заданные выше к рабочему пространству модели. Эти переменные соответствуют параметрам блоков для Действительной Частично-систолической Матрицы, Решают Используя блок Q-less QR Decomposition.
numSamples = 1; % Number of samples fixed.example.setModelWorkspace(model,'A',A,'B',B,'m',m,'n',n,'p',p,... 'numSamples',numSamples,'OutputType',OutputType);
out = sim(model);
Действительная Частично-систолическая Матрица Решает Используя блок Q-less QR Decomposition выходную матрицу X на каждом временном шаге. Когда допустимая матрица результата выводится, блок устанавливает validOut
к истине.
X = out.X;
Чтобы оценить точность Действительной Частично-систолической Матрицы Решают Используя блок Q-less QR Decomposition, вычисляют относительную погрешность.
relative_error = norm(double(A'*A*X - B))/norm(double(B)) %#ok<NOPTS>
relative_error = 8.6289e-05