В этом примере показано, как использовать fixed.qrFixedpointTypes
аналитически определить фиксированные точки для расчета разложения QR.
Задайте количество строк в матрицах и , количество столбцов в матрице , и количество столбцов в матрице . Этот пример наборы быть единичной матрицей тот же размер как количество строк .
m = 10; % Number of rows in matrices A and B n = 3; % Number of columns in matrix A
Используйте функцию помощника realUniformRandomArray
сгенерировать случайную матрицу таким образом, что элементы между и . Матрица единичная матрица.
rng('default')
A = fixed.example.realUniformRandomArray(-1,1,m,n);
B = eye(m);
Используйте fixed.qrFixedpointTypes
выбрать типы данных с фиксированной точкой для матриц и та гарантия никакое переполнение произойдет в преобразовании оперативный к и оперативный к .
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.qrFixedpointTypes(m,max_abs_A,max_abs_B,precisionBits)
T = struct with fields:
A: [0x0 embedded.fi]
B: [0x0 embedded.fi]
T.A
тип, вычисленный для преобразования к оперативный так, чтобы это не переполнялось.
T.A
ans = [] DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 28 FractionLength: 24
T.B
тип, вычисленный для преобразования к оперативный так, чтобы это не переполнялось.
T.B
ans = [] DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 28 FractionLength: 24
Бросьте входные параметры к типам, определенным fixed.qrFixedpointTypes
.
A = cast(A,'like',T.A); B = cast(B,'like',T.B);
Ускорьте fixed.qrAB
при помощи fiaccel
сгенерировать исполняемый файл MATLAB (MEX) функция.
fiaccel fixed.qrAB -args {A,B} -o qrAB_mex
Вычислите разложение QR.
[C,R] = qrAB_mex(A,B);
Функциональный fixed.qrAB
преобразовывания к и к . В этом примере, единичная матрица, таким образом, размер экономики ортогональный фактор разложения QR.
Q = C';
является ортогональным, таким образом, единичная матрица в погрешности округления.
I = Q'*Q
I = 1.0000 -0.0000 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 -0.0000 1.0000 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 60 FractionLength: 48
верхняя треугольная матрица.
R
R = 2.2180 0.8559 -0.5607 0 2.0578 -0.4017 0 0 1.7117 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 28 FractionLength: 24
isequal(R,triu(R))
ans = logical
1
Оценивать точность fixed.qrAB
функционируйте, вычислите относительную погрешность.
relative_error = norm(double(Q*R - A))/norm(double(A))
relative_error = 1.3415e-06
Подавите mlint
предупреждения.
%#ok<*NOPTS>