Реализуйте аппаратно-эффективное решение Partal-Systolic матрицы комплекса с использованием Q-less QR-декомпозиции

Этот пример показывает, как реализовать аппаратно-эффективное решение комплексно-оцененного матричного уравнения 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 complexRandomQlessQRMatrices чтобы сгенерировать случайные матрицы А и B для задачи A 'AX = B. Матрицы сгенерированы таким образом, что действительная и мнимая части элементов массива и B находятся между -1 и + 1, а A является полным рангом.

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

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

Используйте функцию helper complexQlessQRMatrixSolveFixedpointTypes выбрать типы данных с фиксированной точкой для входных матриц А и B и вывести X так, что существует низкая вероятность переполнения во время расчета. Дополнительные сведения о том, как выбираются типы данных, см. в документе FixedPointMatrixLibraryDatypesExample.pdf в текущей директории.

Действительная и мнимая части элементов массива и B находятся между -1 и 1, поэтому максимально возможным абсолютным значением любого элемента является sqrt (2).

max_abs_A = sqrt(2);  % max(abs(A(:))
max_abs_B = sqrt(2);  % max(abs(B(:))
f = 24;               % Fraction length (bits of precision)
T = fixed.example.complexQlessQRMatrixSolveFixedpointTypes(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 = 'ComplexPartialSystolicQlessQRMatrixSolveModel';
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;

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

Чтобы оценить точность решения Комплексной Частичной-Систематической Матрицы Используя блок Q-less QR Decomposition, вычислите относительную погрешность.

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

   1.5587e-04

Для просмотра документации необходимо авторизоваться на сайте