exponenta event banner

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

В этом примере показано, как реализовать аппаратно эффективную QR-декомпозицию без Q с использованием блока «Real Partial-Sistolic Q-less QR Decomption».

Экономичность Размер Q-less QR Декомпозиция

Блок декомпозиции вещественного частичного систолического Q-безвентиляционного QR выполняет первый шаг решения матричного уравнения A 'AX = B, которое преобразует A на месте в верхнетреугольный R, затем решает преобразованную систему R' RX = B, где R 'R = A' A.

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

Укажите количество строк и столбцов в матрице A.

m = 5;  % Number of rows in matrix A
n = 3;  % Number of columns in matrix A

Создать матрицу A

Использовать функцию помощника realUniformRandomArray для генерации случайной матрицы A, так что элементы A находятся между -1 и + 1, а A является полным рангом.

rng('default')
A = fixed.example.realUniformRandomArray(-1,1,m,n);

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

Использовать функцию помощника qlessqrFixedpointTypes для выбора типов данных с фиксированной точкой для матрицы A, которые гарантируют отсутствие переполнения при преобразовании A по месту в R. Дополнительные сведения о том, как выбираются типы данных, см. в документе FixedStartMatrixMatrixDatatypesExample.pdf в текущем каталоге.

max_abs_A = 1;  % max(abs(A(:))
f = 24;         % Fraction length (bits of precision)
T = fixed.example.qlessqrFixedpointTypes(m,max_abs_A,f);
A = cast(A,'like',T.A);

Открытие модели

model = 'RealPartialSystolicQlessQRModel';
open_system(model);

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

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

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

numSamples = 1; % Number of sample matrices
fixed.example.setModelWorkspace(model,'A',A,'m',m,'n',n,...
    'numSamples',numSamples);

Моделирование модели

out = sim(model);

Создание решения на основе выходных данных

Блок декомпозиции вещественного частичного систолического QR выводит матрицу R на каждом временном шаге. При выводе допустимой матрицы результатов блок устанавливает validOut к true.

R = out.R;

R - верхнетреугольная матрица.

R
R = 

    1.5379    0.0432   -0.1395
         0    1.5978    0.4742
         0         0    1.5192

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 28
        FractionLength: 24
isequal(R,triu(R))
ans =

  logical

   1

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

Чтобы оценить точность блока Real Partial-Sistolic Q-less QR Decomption, вычислите относительную ошибку.

relative_error = norm(double(R'*R - A'*A))/norm(double(A'*A))
relative_error =

   8.2641e-07

Подавление предупреждений mlint.

%#ok<*NOPTS>