pinv

Псевдоинверсия Мура-Пенроуза

Синтаксис

B = pinv(A)
B = pinv(A,tol)

Описание

пример

B = pinv(A) возвращает Псевдоинверсию Мура-Пенроуза матричного A.

B = pinv(A,tol) задает значение для допуска. pinv обрабатывает сингулярные значения A, которые меньше, чем допуск как нуль.

Примеры

свернуть все

Сравните решения системы линейных уравнений, полученных наклонной чертой влево (\) и pinv.

Если прямоугольная матрица коэффициентов, A имеет низкий ранг, то задача наименьших квадратов минимизации norm(A*x-b) имеет бесконечно много решений. Два решения возвращены x1 = A\b и x2 = pinv(A)*b. Различающие свойства этих решений состоят в том, что x1 имеет только rank(A) ненулевые компоненты, и norm(x2) меньше, чем для любого другого решения.

Создайте 8 6 матрица, которая имеет rank(A) = 3.

A = magic(8); 
A = A(:,1:6) 
A = 8×6

    64     2     3    61    60     6
     9    55    54    12    13    51
    17    47    46    20    21    43
    40    26    27    37    36    30
    32    34    35    29    28    38
    41    23    22    44    45    19
    49    15    14    52    53    11
     8    58    59     5     4    62

Создайте вектор для правой стороны системы уравнений.

b = 260*ones(8,1)
b = 8×1

   260
   260
   260
   260
   260
   260
   260
   260

Номер, выбранный для правой стороны, 260, является значением 8 8 волшебной суммы для A. Если бы A были все еще 8 8 матрица, то одно решение для x было бы вектором 1 с. Только с шестью столбцами существует решение, поскольку уравнения все еще сопоставимы, но решение не составляет всю 1 с. Поскольку матрица имеет низкий ранг, существует бесконечно много решений.

Решите для двух из решений с помощью наклонной черты влево и pinv.

x1 = A\b
Warning: Rank deficient, rank = 3, tol =  1.882938e-13.
x1 = 6×1

    3.0000
    4.0000
         0
         0
    1.0000
         0

x2 = pinv(A)*b
x2 = 6×1

    1.1538
    1.4615
    1.3846
    1.3846
    1.4615
    1.1538

Оба из этих решений точны, в том смысле, что norm(A*x1-b) и norm(A*x2-b) находятся на порядке ошибки округления. x1 решения является особенным, потому что он имеет только три ненулевых элемента. Решение x2 является особенным, потому что norm(x2) меньше, чем он, для любого другого решения, включая norm(x1).

norm(x1)
ans = 5.0990
norm(x2)
ans = 3.2817

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

свернуть все

Введите матрицу.

Типы данных: single | double
Поддержка комплексного числа: Да

Допуск сингулярного значения, заданный как скаляр. pinv обрабатывает сингулярные значения, которые меньше, чем tol как нули во время вычисления псевдоинверсии.

Допуском по умолчанию является max(size(A))*eps(norm(A)).

Пример: pinv(A,1e-4)

Больше о

свернуть все

Псевдоинверсия Мура-Пенроуза

Псевдоинверсия Мура-Пенроуза является матрицей, которая может действовать как частичная замена для матричной инверсии в случаях, где это не существует. Эта матрица часто используется, чтобы решить систему линейных уравнений, когда система не имеет уникального решения или имеет много решений.

Для любого матричного A псевдообратный B существует, уникален, и имеет те же размерности как A'. Если A является квадратным и не сингулярным, то pinv(A) является просто дорогим способом вычислить inv(A). Однако, если A не является квадратным, или является квадратным и сингулярным, то inv(A) не существует. В этих случаях pinv(A) имеет некоторых (но не все) свойств inv(A):

1.  ABA=A2.  BAB=B3.  (AB)*=AB(AB    Эрмитов)4.  (BA)*=BA(BA    Эрмитов)

Псевдообратное вычисление основано на svd(A). Вычисление обрабатывает сингулярные значения меньше, чем tol как нуль.

Советы

  • Можно заменить большую часть использования pinv, применился к векторному b, как в pinv(A)*b, с lsqminnorm(A,b), чтобы получить решение методом наименьших квадратов минимальной нормы системы линейных уравнений. lsqminnorm обычно более эффективен, чем pinv, и это также поддерживает разреженные матрицы.

Алгоритмы

pinv использует сингулярное разложение, чтобы сформировать псевдоинверсию A. Сингулярные значения по диагонали S, которые меньше, чем tol, обработаны как нули, и представление A становится:

A=USV*=[U1  U2][S1000][V1  V2]*A=U1S1V1*.

Псевдоинверсия A затем равна:

B=V1S11U1*.

Расширенные возможности

Смотрите также

| | | | |

Представлено до R2006a