Этот пример показывает, как реализовать аппаратно-эффективное решение вещественного матричного уравнения A 'AX = B с помощью решения Вещественной Частичной-Сестричной Матрицы с использованием блока Q-less QR Decomposition.
Укажите количество строк в матрице А, количество столбцов в матрице А и строк В и количество столбцов в матрице 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
В данном примере используйте функцию helper realRandomQlessQRMatrices
чтобы сгенерировать случайные матрицы А и B для задачи A 'AX = B. Матрицы сгенерированы таким образом, что элементы массива и B находятся между -1 и + 1, а A является полным рангом.
rng('default')
[A,B] = fixed.example.realRandomQlessQRMatrices(m,n,p);
Используйте функцию helper realQlessQRMatrixSolveFixedpointTypes
выбрать типы данных с фиксированной точкой для входных матриц А и B и вывести X так, что существует низкая вероятность переполнения во время расчета. Дополнительные сведения о том, как выбираются типы данных, см. в документе FixedPointMatrixLibraryDatypesExample.pdf в текущей директории.
max_abs_A = 1; % max(abs(A(:)) max_abs_B = 1; % max(abs(B(:)) f = 24; % Fraction length (bits of precision) T = fixed.example.realQlessQRMatrixSolveFixedpointTypes(m,n,max_abs_A,max_abs_B,f); A = cast(A,'like',T.A); B = cast(B,'like',T.B); OutputType = fixed.extractNumericType(T.X);
model = 'RealPartialSystolicQlessQRMatrixSolveModel';
open_system(model);
Подсистема Обработчика Данных в этой модели принимает действительные матрицы А и B как входы. The readyA
и readyB
порты запускают обработчик данных. После отправки истинного сигнала validIn может возникнуть некоторая задержка, прежде чем готовность будет установлена на false. Когда Обработчик данных обнаруживает переднее ребро readyA
сигнал, блок устанавливает validInA
в true и отправляет следующую строку A. Когда обработчик данных обнаруживает переднее ребро readyB
сигнал, блок устанавливает validInB
true и отправляет следующую матрицу B. Этот протокол позволяет отправлять данные всякий раз, когда обнаруживается переднее ребро сигнала готовности, гарантируя, что все данные обработаны.
Используйте функцию helper 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);
Решение Действительной Частичной-Систематической Матрицы с использованием блока QR Разложения Без Q выводит матрицу X на каждый временной шаг. Когда выводится допустимая матрица результатов, блок устанавливает validOut
к true.
X = out.X;
Чтобы оценить точность решения Real Partial-Systolic Matrix Solve с использованием блока Q-less QR Decomposition, вычислите относительную погрешность.
relative_error = norm(double(A'*A*X - B))/norm(double(B)) %#ok<NOPTS>
relative_error = 8.6289e-05