因此我得到了一项需要求解三次样条系数的作业。现在我清楚地了解如何在纸上和MatLab上进行数学运算,我想用Python解决问题。给定一个方程Ax = b,我知道A和b的值,我希望能够用Python解决x,我很难找到一个好的资源去做这样的事情。
实施例
A = |1 0 0|
|1 4 1|
|0 0 1|
x = Unknown 3x1 matrix
b = |0 |
|24|
|0 |
解决x
答案 0 :(得分:12)
在一般情况下,请使用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.])
如果你的问题被绑定(通常是三次样条),那就是http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve_banded.html
对该问题的一些评论发表评论:更好的不使用inv
来解决线性系统问题。 numpy.lstsq
有点不同,它对拟合更有用。
由于这是家庭作业,你至少可以阅读解决三对角线性系统的方法。
答案 1 :(得分:4)
Numpy是Python中科学计算的主要软件包。如果您是Windows用户,请在此处下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy否则请按照以下说明操作: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)
答案 2 :(得分:1)
除了Zhenya的代码之外,您还可以直观地使用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.])