Contenido principal

pinv

Pseudoinversa de Moore-Penrose

Descripción

B = pinv(A) devuelve la pseudoinversa de Moore-Penrose de la matriz A.

ejemplo

B = pinv(A,tol) especifica un valor para la tolerancia. pinv trata como cero los valores singulares de A que son menores que o iguales a la tolerancia.

Ejemplos

contraer todo

Compare las soluciones de un sistema de ecuaciones lineales obtenidas mediante la barra invertida (\), pinv y lsqminnorm.

Si una matriz de coeficientes rectangular A es de rango bajo, el problema de mínimos cuadrados de minimizar norm(A*x-b) tiene infinitas soluciones. x1 = A\b y x2 = pinv(A)*b devuelven dos soluciones. Las propiedades diferenciadoras de estas soluciones son que x1 tiene solo componentes de rank(A) distintos de cero y norm(x2) es más pequeña que para cualquier otra solución.

Cree una matriz de 8 por 6 que tenga 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

Cree un vector para el lado derecho del sistema de ecuaciones.

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

   260
   260
   260
   260
   260
   260
   260
   260

El número elegido para el lado derecho, 260, es el valor de la suma mágica de 8 por 8 para A. Si A siguiera siendo una matriz de 8 por 8, una solución para x sería un vector de unos. Con solo seis columnas existe una solución porque las ecuaciones siguen siendo constantes, pero la solución no es toda unos. Dado que la matriz es de rango bajo, hay infinitas soluciones.

Resuelva dos de las soluciones usando la barra invertida y 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

Ambas soluciones son exactas, en el sentido de que norm(A*x1-b) y norm(A*x2-b) están en orden de error de redondeo. La solución x1 es especial porque solo tiene tres elementos distintos de cero. La solución x2 es especial porque norm(x2) es más pequeña que para cualquier otra solución, incluida norm(x1).

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

Usar lsqminnorm para calcular la solución de mínimos cuadrados de este problema produce la misma solución que usar pinv. lsqminnorm(A,b) suele ser más eficiente que pinv(A)*b.

x3 = lsqminnorm(A,b)
x3 = 6×1

    1.1538
    1.4615
    1.3846
    1.3846
    1.4615
    1.1538

norm(x3)
ans = 
3.2817

Argumentos de entrada

contraer todo

Matriz de entrada.

Tipos de datos: single | double
Soporte de números complejos:

Tolerancia de valores singulares, especificada como escalar. pinv trata como ceros los valores singulares que son menores que o iguales a tol durante el cálculo de la pseudoinversa.

La tolerancia predeterminada es max(size(A))*eps(norm(A)).

Ejemplo: pinv(A,1e-4)

Más acerca de

contraer todo

Sugerencias

  • Puede sustituir la mayoría de usos de pinv aplicados a un vector b, como en pinv(A)*b, con lsqminnorm(A,b) para obtener la solución de mínimos cuadrados de norma mínima de un sistema de ecuaciones lineales. Por ejemplo, en Resolver sistemas de ecuaciones lineales usando pseudoinversas, lsqminnorm produce la misma solución que pinv. lsqminnorm es, por lo general, más eficiente que pinv porque lsqminnorm usa la descomposición ortogonal completa de A para encontrar su aproximación de rango bajo y aplica sus factores a b. En cambio, pinv usa la descomposición de valores singulares para formar de manera explícita la pseudoinversa de A que luego debe multiplicar por b. lsqminnorm también admite matrices dispersas.

Algoritmos

pinv usa la descomposición de valores singulares para formar la pseudoinversa de A. Los valores singulares a lo largo de la diagonal de S que son menores que o iguales a tol se tratan como ceros y la representación de A se convierte en:

A=USV*=[U1U2][S1000][V1V2]*A=U1S1V1*.

Entonces, la pseudoinversa de A es igual a:

B=V1S11U1*.

Capacidades ampliadas

expandir todo

Historial de versiones

Introducido antes de R2006a

expandir todo

Consulte también

| | | | |