exponenta event banner

Реализация аппаратно-эффективного решения на основе реальной частичной систолической матрицы с использованием QR-декомпозиции без Q

В этом примере показано, как реализовать аппаратно эффективное решение для матричного уравнения A 'AX = B с действительным частичным систолическим решением матриц с использованием блока QR-декомпозиции без Q.

Определение матричных размеров

Укажите количество строк в матрице A, количество столбцов в матрице A и строк в матрице 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. Матрицы генерируются так, что элементы A и B находятся между -1 и + 1, а A является полным рангом.

rng('default')
[A,B] = fixed.example.realRandomQlessQRMatrices(m,n,p);

Выбор типов данных с фиксированной точкой

Использовать функцию помощника realQlessQRMatrixSolveFixedpointTypes для выбора типов данных с фиксированной точкой для входных матриц А и В и выходных данных Х так, чтобы была низкая вероятность переполнения во время вычисления. Дополнительные сведения о том, как выбираются типы данных, см. в документе FixedStartMatrixLibrureDatatypesExample.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);

Подсистема обработчика данных в этой модели принимает вещественные матрицы A и B в качестве входных данных. readyA и readyB порты запускают обработчик данных. После посылки сигнала true validIn может возникнуть некоторая задержка, прежде чем значение ready станет false. Когда обработчик данных обнаруживает передний край readyA сигнал, комплекты блоков validInA true и отправляет следующую строку A. Когда обработчик данных обнаруживает передний край readyB сигнал, комплекты блоков validInB true и отправляет следующую матрицу B. Этот протокол позволяет отправлять данные всякий раз, когда обнаруживается передний фронт сигнала готовности, гарантируя, что все данные будут обработаны.

Задание переменных в рабочей области модели

Использовать функцию помощника setModelWorkspace для добавления переменных, определенных выше, в рабочее пространство модели. Эти переменные соответствуют параметрам блока для решения вещественной частичной систолической матрицы с использованием блока QR-декомпозиции без Q.

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;

Проверка точности выходных данных

Чтобы оценить точность решения вещественной частичной систолической матрицы с помощью блока QR-декомпозиции без Q, вычислите относительную ошибку.

relative_error = norm(double(A'*A*X - B))/norm(double(B)) %#ok<NOPTS>
relative_error =

   8.6289e-05