问题
So I was given a homework assignment that requires solving the coefficients of cubic splines. Now I clearly understand how to do the math on paper as well as with MatLab, I want to solve the problem with Python. Given an equation Ax = b where I know the values of A and b, I want to be able to solve for x with Python and I am having trouble finding a good resource to do such a thing.
Ex.
A = |1 0 0|
|1 4 1|
|0 0 1|
x = Unknown 3x1 matrix
b = |0 |
|24|
|0 |
Solve for x
回答1:
In a general case, use 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.])
If your problem is banded (which cubic splines it often are), then there's http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve_banded.html
To comment on some of the comments to the question: better not use inv
for solving linear systems. numpy.lstsq
is a bit different, it's more useful for fitting.
As this is homework, you're really better off at least reading up on ways of solving tridiagonal linear systems.
回答2:
Numpy is the main package for scientific computing in Python. If you are windows user then download it here: http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy else follow these instructions: 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)
回答3:
In addition to the code of Zhenya, you might also find it intuitive to use the np.dot function:
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.])
来源:https://stackoverflow.com/questions/22163113/matrix-multiplication-solve-ax-b-solve-for-x