矩阵乘法,解 Ax = b 求解 x

15 投票
3 回答
62820 浏览
提问于 2025-04-17 20:43

我有一个作业,要求我解决三次样条的系数问题。现在我很清楚怎么在纸上和用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

3 个回答

2

除了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.])
8

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)
20

一般情况下,可以使用 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 是有点不同,它更适合用来拟合数据。

因为这是作业,建议你至少了解一下如何解决三对角线性方程组的方法。

撰写回答