Multiplica matricial, resuelve Ax = b resuelve para x

Así que me asignaron una tarea que requiere resolver los coeficientes de splines cúbicos. Ahora entiendo claramente cómo hacer las matemáticas en papel, así como con MatLab, quiero resolver el problema con Python. Dada una ecuación Ax = b donde sé los valores de A y b, quiero poder resolver para x con Python y tengo problemas para encontrar un buen recurso para hacer tal cosa.

Ex.

A = |1 0 0| |1 4 1| |0 0 1| x = Unknown 3x1 matrix b = |0 | |24| |0 | 

Solución para x

En un caso general, utilice solve :

 >>> import numpy as np >>> from scipy.linalg import solve >>> >>> A = np.random.random((3, 3)) >>> b = np.random.random(3) >>> >>> x = solve(A, b) >>> x array([ 0.98323512, 0.0205734 , 0.06424613]) >>> >>> np.dot(A, x) - b array([ 0., 0., 0.]) 

Si su problema está agrupado (qué splines cúbicos es a menudo), entonces hay http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve_banded.html

Para comentar algunos de los comentarios a la pregunta: mejor no usar inv para resolver sistemas lineales. numpy.lstsq es un poco diferente, es más útil para el ajuste.

Como esta es la tarea, realmente está mejor al menos leer sobre formas de resolver sistemas lineales tridiagonales.

Numpy es el paquete principal para computación científica en Python. Si es usuario de Windows, descárguelo aquí: http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy o siga estas instrucciones: http://www.scipy.org/install.html .

 import numpy A = [[1,0,0],[1,4,1],[0,0,1]] b = [0,24,0] x = numpy.linalg.lstsq(A,b) 

Además del código de Zhenya, también puede resultarle intuitivo utilizar la función np.dot:

 import numpy as np A = [[1,0,0], [1,1,1], [6,7,0]] b = [0,24,0] # Now simply solve for x x = np.dot(np.linalg.inv(A), b) #np.linalg.inv(A) is simply the inverse of A, np.dot is the dot product print x Out[27]: array([ 0., 0., 24.])