Si encuentras algún detalle que no entiendes puedes dejarlo en los comentarios y haremos todo lo necesario de ayudarte rápidamente.
Solución:
De la documentación de MathWorks para la división de matriz izquierda:
Si A es una matriz de m por n con m ~= n y B es un vector columna con m componentes, o una matriz con varias de tales columnas, entonces X = AB es la solución en el sentido de los mínimos cuadrados de la siguiente – o sistema de ecuaciones sobredeterminado AX = B. En otras palabras, X minimiza la norma (A*X – B), la longitud del vector AX – B.
El equivalente en numpy es np.linalg.lstsq:
In [15]: B = np.array([[2],[4]])
In [16]: b = np.array([[4],[4]])
In [18]: x,resid,rank,s = np.linalg.lstsq(B,b)
In [19]: x
Out[19]: array([[ 1.2]])
Matlab en realidad hará una serie de operaciones diferentes cuando se usa el operador , dependiendo de la forma de las matrices involucradas (ver aquí para más detalles). En su ejemplo, Matlab está devolviendo una solución de mínimos cuadrados, en lugar de resolver la ecuación lineal directamente, como sucedería con una matriz cuadrada. Para obtener el mismo comportamiento en numpy, haz esto:
import numpy as np
import numpy.linalg as lin
B = np.array([[2],[4]])
b = np.array([[4],[4]])
print np.linalg.lstsq(B,b)[0]
que debería darle la misma solución que Matlab.
Puedes formar el inverso izquierdo:
import numpy as np
import numpy.linalg as lin
B = np.array([[2],[4]])
b = np.array([[4],[4]])
B_linv = lin.solve(B.T.dot(B), B.T)
c = B_linv.dot(b)
print('cn', c)
Resultado:
c
[[ 1.2]]
En realidad, podemos simplemente ejecutar el solucionador una vez, sin formar un inverso, como este:
c = lin.solve(B.T.dot(B), B.T.dot(b))
print('cn', c)
Resultado:
c
[[ 1.2]]
…. como antes
¿Por qué? Porque:
Tenemos:
Multiplicar por B.T
Nos da:
Ahora, B.T.dot(B)
es cuadrado, rango completo, tiene un inverso. Y por lo tanto podemos multiplicar por el inverso de B.T.dot(B)
o use un solucionador, como el anterior, para obtener c
.
Comentarios y valoraciones del tutorial
Más adelante puedes encontrar los comentarios de otros sys admins, tú asimismo puedes insertar el tuyo si te apetece.