2024-04-27 13:27:33 发布
网友
所以给我布置了一个作业,要求解三次样条的系数。现在我清楚地知道了如何在纸上以及用MatLab做数学题,我想用Python来解决这个问题。给定一个方程A x=b,在这里我知道A和b的值,我想用Python来解x,但是我很难找到一个好的资源来做这样的事情。
例如
A = |1 0 0| |1 4 1| |0 0 1| x = Unknown 3x1 matrix b = |0 | |24| |0 |
解x
一般情况下,使用solve:
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有点不同,它更适合。
inv
numpy.lstsq
因为这是家庭作业,你最好至少读一读解三对角线性系统的方法。
除了振亚的代码外,您可能还发现使用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.])
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)
一般情况下,使用
solve
:如果你的问题是带状的(通常是三次样条曲线),那么就有http://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve_banded.html
对这个问题的一些评论:最好用
inv
来解线性系统。numpy.lstsq
有点不同,它更适合。因为这是家庭作业,你最好至少读一读解三对角线性系统的方法。
除了振亚的代码外,您可能还发现使用np.dot函数很直观:
Numpy是Python中科学计算的主要包。如果您是windows用户,请在这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy否则请按照以下说明操作:http://www.scipy.org/install.html。
相关问题 更多 >
编程相关推荐