Эффективная оборудованием действительная частично-систолическая матрица реализации решает Используя разложение QR с диагональной загрузкой

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

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

использование блока Real Partial-Systolic Matrix Solve Using QR Decomposition. Этот метод известен как диагональную загрузку и$\lambda$ известен как параметр регуляризации.

Диагональный метод загрузки

Когда вы устанавливаете параметр регуляризации на ненулевое значение в блоке Real Partial-Systolic Matrix Solve Using QR Decomposition, затем блок вычисляет решение методом наименьших квадратов к

$$\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-by-p.

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

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

Действительный блок Partial-Systolic Matrix Solve Using QR Decomposition вычисляет решение эффективно, не вычисляя инверсию путем вычисления разложения 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, количество столбцов в матрице А и количество столбцов в матрице 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 Decomposition, затем диагональный метод загрузки используется. Когда параметр регуляризации является нулем, затем уравнения уменьшают до регулярной формулы наименьших квадратов AX=B.

regularizationParameter = 1e-3;

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

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

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

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

Выберите Fixed-Point Data Types

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

max_abs_A = 1;       % Upper bound on max(abs(A(:))
max_abs_B = 1;       % Upper bound on max(abs(B(:))
precisionBits = 24;  % Number of bits of precision
T = fixed.realQRMatrixSolveFixedpointTypes(m,n,max_abs_A,max_abs_B,precisionBits);
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 порт инициировал Обработчик Данных. После отправки истинного validIn сигнал, перед ready может быть некоторая задержка установлен в ложь. Когда Обработчик Данных обнаруживает передний край ready сигнал, блок устанавливает validIn к истине и отправляет следующую строку A и B. Этот протокол позволяет данным быть отправленными каждый раз, когда передний край ready сигнал обнаруживается, гарантируя, что все данные обрабатываются.

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

Используйте функцию помощника setModelWorkspace добавить переменные, заданные выше к рабочему пространству модели. Эти переменные соответствуют параметрам блоков для блока Real Partial-Systolic Matrix Solve Using QR Decomposition.

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);

Создайте решение из выходных данных

Блок Real Partial-Systolic Matrix Solve Using QR Decomposition выходные данные одна строка за один раз. Когда строка результата выводится, блок устанавливает validOut к истине. Строки X выводятся в порядке, они вычисляются, последняя строка сначала, таким образом, необходимо восстановить данные, чтобы интерпретировать результаты. Чтобы восстановить матрицу X от выходных данных, используйте функцию помощника matrixSolveModelOutputToArray.

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

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

Чтобы оценить точность блока Real Partial-Systolic Matrix Solve Using QR Decomposition, вычислите относительную погрешность.

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