exponenta event banner

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

В этом примере показано, как реализовать аппаратно эффективное решение методом наименьших квадратов для уравнения матрицы вещественных значений

$$\left[\begin{array}{c}\lambda I\\A\end{array}\right] X =
\left[\begin{array}{c}O\\B\end{array}\right]$$

использование решения вещественной частичной систолической матрицы с использованием блока декомпозиции QR. Этот метод известен как диагональная нагрузка и$\lambda$ известен как параметр регуляризации.

Метод нагрузки по диагонали

Если задать для параметра регуляризации ненулевое значение в блоке Решение вещественной частичной систолической матрицы с использованием QR-декомпозиции, то блок вычислит решение методом наименьших квадратов для

$$\left[\begin{array}{c}\lambda I\\A\end{array}\right] X =
\left[\begin{array}{c}O\\B\end{array}\right]$$

где$I$ - единичная матрица n-на-n и$O$ - массив нулей размера n-на-п.

Этот метод известен как диагональная нагрузка и$\lambda$ известен как параметр регуляризации. Привычным хрестоматийным решением для этого уравнения является следующее, которое выводится умножением обеих сторон уравнения на$[\lambda I,\; A']$ и взятием обратной матрицы в левой части.

$$X_{LS} = (\lambda^2 I + A'A)^{-1}A'B.$$

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

$$\left[\begin{array}{c}\lambda I\\A\end{array}\right]$$

по месту в верхнетреугольный R и трансформирование

$$\left[\begin{array}{c}O\\B\end{array}\right]$$

по месту в

$$C = Q'\left[\begin{array}{c}O\\B\end{array}\right]$$

и решение преобразованного уравнения.$RX=C$

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

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

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

Определение параметра регуляризации

Если параметр регуляризации ненулевой в блоке Real Partial-Systolic Matrix Solve Using QR Decomption, то используется метод диагональной загрузки. Если параметр регуляризации равен нулю, то уравнения сводятся к регулярной формуле наименьших квадратов AX = B.

regularizationParameter = 1e-3;

Параметры блока

Создание случайных матриц с наименьшими квадратами

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

rng('default')
r = 3;   % Rank of matrix A
[A,B] = fixed.example.realRandomLeastSquaresMatrices(m,n,p,r);

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

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

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

out = sim(model);

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

Блок решения вещественной частичной систолической матрицы, использующий QR-декомпозицию, выводит данные по одной строке за раз. При выводе строки результата блок устанавливает validOut к true. Строки X выводятся в том порядке, в котором они вычисляются, сначала последняя строка, поэтому для интерпретации результатов необходимо восстановить данные. Для восстановления матрицы X из выходных данных используйте вспомогательную функцию matrixSolveModelOutputToArray.

X = fixed.example.matrixSolveModelOutputToArray(out.X,n,p,numSamples);

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

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

A_lambda = [regularizationParameter * eye(n);A];
B_0 = [zeros(n,p);B];
relative_error = norm(double(A_lambda*X - B_0))/norm(double(B_0)) %#ok<NOPTS>
relative_error =

   1.2189e-04