exponenta event banner

Внедрение аппаратно-эффективной комплексной частично-систолической декомпозиции QR

В этом примере показано, как реализовать аппаратно эффективную декомпозицию QR с использованием блока «Комплексная частично-систолическая декомпозиция QR».

QR-декомпозиция размера экономии

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

Чтобы вычислить автономное QR-разложение, этот пример устанавливает B в качестве единичной матрицы, так что выходной сигнал блока комплексного частичного систолического QR-разложения является верхним треугольником R и C = Q '.

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

Укажите количество строк в матрицах A и B, количество столбцов в матрице A и количество столбцов в матрице B. В этом примере в качестве B устанавливается единичная матрица того же размера, что и число строк A.

m = 10; % Number of rows in matrices A and B
n = 3;  % Number of columns in matrix A
p = m;  % Number of columns in matrix B

Создание матриц A и B

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

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

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

Использовать функцию помощника qrFixedpointTypes для выбора типов данных с фиксированной точкой для входных матриц A и B, которые гарантируют отсутствие переполнения при преобразовании A in-place в R и B in-place в C = Q 'B. Дополнительные сведения о том, как выбираются типы данных, см. в документе FixedStartMatrixLibrureDatatypesExample.pdf в текущей папке.

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

max_abs_A = sqrt(2);  % max(abs(A(:))
max_abs_B = 1;        % max(abs(B(:))
f = 24;               % Fraction length (bits of precision)
T = fixed.example.qrFixedpointTypes(m,max_abs_A,max_abs_B,f);
A = cast(A,'like',T.A);
B = complex(cast(B,'like',T.B));

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

model = 'ComplexPartialSystolicQRModel';
open_system(model);

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

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

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

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

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

out = sim(model);

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

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

R = out.R;
C = out.C;

Извлечь экономичность размера Q

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

Q = C';

Убедитесь, что Q является ортогональным, а R - верхнетреугольным

Q является орогональной, так что Q 'Q является единичной матрицей в пределах округления.

I = Q'*Q
I = 

   1.0000 + 0.0000i  -0.0000 - 0.0000i   0.0000 + 0.0000i
  -0.0000 + 0.0000i   1.0000 + 0.0000i  -0.0000 + 0.0000i
   0.0000 - 0.0000i  -0.0000 - 0.0000i   1.0000 + 0.0000i

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 62
        FractionLength: 50

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

R
R = 

   3.1655 + 0.0000i   0.4870 + 1.1980i   0.1466 - 0.9092i
   0.0000 + 0.0000i   2.2184 + 0.0000i  -0.2159 - 0.0972i
   0.0000 + 0.0000i   0.0000 + 0.0000i   2.2903 + 0.0000i

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

  logical

   1

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

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

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

   8.3297e-07

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

%#ok<*NOPTS>