exponenta event banner

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

В этом примере показано, как реализовать аппаратно эффективное решение для уравнения матрицы вещественных значений A 'AX = B с использованием блока «Решение матрицы реальных пакетов с использованием QR-декомпозиции без Q».

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

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

m = 100; % 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 = 'RealBurstQlessQRMatrixSolveModel';
open_system(model);

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

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

Использовать функцию помощника 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);

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

В блоке Real Burst Matrix Solve Using Q-less QR Decomption выводятся данные по одной строке за раз. При выводе строки результата блок устанавливает validOut к true. Строки X выводятся в том порядке, в котором они вычисляются, сначала последняя строка, поэтому для интерпретации результатов необходимо восстановить данные. Для восстановления матрицы X из выходных данных используйте вспомогательную функцию matrixSolveModelOutputToArray.

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

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

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

relative_error = norm(double(A'*A*X - B))/norm(double(B)) %#ok<NOPTS>
relative_error =

   5.3565e-04