Estoy tratando de encontrar el espacio nulo (espacio solución de Ax = 0) de una matriz dada. Encontré dos ejemplos, pero parece que tampoco puedo trabajar. Además, no puedo entender lo que están haciendo para llegar allí, así que no puedo depurar. Espero que alguien pueda ayudarme a superar esto.Python (NumPy, SciPy), encontrar el espacio nulo de una matriz
Las páginas de documentación (numpy.linalg.svd
y numpy.compress
) son opacas para mí. Aprendí a hacer esto creando la matriz C = [A|0]
, encontrando la forma de escala escalonada reducida y resolviendo las variables por fila. Parece que no puedo seguir cómo se está haciendo en estos ejemplos.
¡Gracias por toda la ayuda!
Aquí es mi matriz de la muestra, que es el mismo que el wikipedia example: Método
A = matrix([
[2,3,5],
[-4,2,3]
])
(found here y here):
import scipy
from scipy import linalg, matrix
def null(A, eps=1e-15):
u, s, vh = scipy.linalg.svd(A)
null_mask = (s <= eps)
null_space = scipy.compress(null_mask, vh, axis=0)
return scipy.transpose(null_space)
Cuando lo intento, le regreso una lata vacía matriz:
Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> from scipy import linalg, matrix
>>> def null(A, eps=1e-15):
... u, s, vh = scipy.linalg.svd(A)
... null_mask = (s <= eps)
... null_space = scipy.compress(null_mask, vh, axis=0)
... return scipy.transpose(null_space)
...
>>> A = matrix([
... [2,3,5],
... [-4,2,3]
... ])
>>>
>>> null(A)
array([], shape=(3, 0), dtype=float64)
>>>
la página de Wikipedia se ha vinculado a da en realidad una Muy buena explicación de por qué debería usar una SVD para calcular el espacio nulo (o resolver) de una matriz cuando se trata de valores de coma flotante. http://en.wikipedia.org/wiki/Kernel_%28matrix%29#Numerical_computation_of_null_space El enfoque que describes (resolver las variables fila por fila) amplificará cualquier error de redondeo, etc. (Esta es la misma razón por la que deberías casi nunca calcule explícitamente el inverso de una matriz ...) –