В этом примере показано, как реализовать аппаратно эффективное решение для матричного уравнения 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