fixed.qrFixedpointTypes

Определите фиксированные точки для преобразования A и R и B к C оперативный =Q'B, где Q R =A является разложением QR A

Описание

пример

T = fixed.qrFixedpointTypes(m,max_abs_A,max_abs_B,precisionBits) возвращает фиксированные точки для A и B, которые гарантируют, что никакое переполнение не произойдет в QR-алгоритме.

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

Примеры

свернуть все

В этом примере показано, как использовать fixed.qrFixedpointTypes аналитически определить фиксированные точки для расчета разложения QR.

Задайте матричные размерности

Задайте количество строк в матрицах A и B, количество столбцов в матрице A, и количество столбцов в матрице B. Этот пример наборы B быть единичной матрицей тот же размер как количество строк A.

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

Сгенерируйте матрицы A и B

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

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

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

Используйте fixed.qrFixedpointTypes выбрать типы данных с фиксированной точкой для матриц A и B та гарантия никакое переполнение произойдет в преобразовании A оперативный к R=QA и B оперативный к C=QB.

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 тип, вычисленный для преобразования A к R=QA оперативный так, чтобы это не переполнялось.

T.A
ans = 

[]

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 28
        FractionLength: 24

T.B тип, вычисленный для преобразования B к C=QB оперативный так, чтобы это не переполнялось.

T.B
ans = 

[]

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 28
        FractionLength: 24

Используйте заданные типы, чтобы вычислить разложение QR

Бросьте входные параметры к типам, определенным 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);

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

Функциональный fixed.qrAB преобразовывания A к R=QA и B к C=QB. В этом примере, B единичная матрица, таким образом, Q=C размер экономики ортогональный фактор разложения QR.

Q = C';

Проверьте, что Q является Ортогональным, и R является Верхней треугольной

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

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

Входные параметры

свернуть все

Количество строк в A в виде положительного скаляра с целочисленным знаком.

Типы данных: double

Максимум абсолютного значения A в виде скаляра.

Пример: max(abs(A(:)))

Типы данных: double

Максимум абсолютного значения B в виде скаляра.

Пример: max(abs(B(:)))

Типы данных: double

Необходимое количество битов точности в виде положительного скаляра с целочисленным знаком.

Типы данных: double

Выходные аргументы

свернуть все

Фиксированные точки для A и B, возвращенного как struct. Struct T имеет поля T.A и T.B. Эти поля содержат fi объекты, которые задают фиксированные точки для A и B, которые не гарантируют переполнения, произойдут в QR-алгоритме.

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

Советы

Использование fixed.qrFixedpointTypes вычислить фиксированные точки для входных параметров этих функций и блоков.

Алгоритмы

Количество целочисленных битов, требуемых предотвратить переполнение, выведено из следующих границ на росте R и C =Q'B [1]. Необходимое количество целочисленных битов добавляется к количеству битов точности, precisionBits, из входа, плюс один для знакового бита, плюс один бит для промежуточного усиления CORDIC приблизительно 1,6468 [2].

Элементы R ограничены в величине

max(|R(:)|)mmax(|A(:)|).

Элементы C =Q'B ограничены в величине

max(|C(:)|)mmax(|B(:)|).

Ссылки

[2] Voler, Джек Э. "Тригонометрический вычислительный метод CORDIC". Транзакции IRE на электронно-вычислительных машинах EC-8 (1959): 330-334.

Введенный в R2021b
Для просмотра документации необходимо авторизоваться на сайте