是否有一个python模块来解决线性方程?

sta*_*ion 40 python

我想用三个或更多变量求解线性方程.在python中有一个很好的库来做吗?

小智 65

是的,非常受欢迎的NumPy软件包具有执行此操作的功能.他们的例子:

解决方程组3 * x0 + x1 = 9x0 + 2 * x1 = 8:

>>> import numpy as np
>>> a = np.array([[3,1], [1,2]])
>>> b = np.array([9,8])
>>> x = np.linalg.solve(a, b)
>>> x
array([ 2.,  3.]) 
Run Code Online (Sandbox Code Playgroud)

https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.solve.html

  • 我可以使用np.linalg.solve(a,b)函数来求解模2的方程组(在Galois域上)吗?或者,如果你知道另一个可以解决这个问题的软件包,那将非常有用:) (2认同)
  • numpy的"求解"不会解决方程组的方程式多于变量(我的用例).为此,请改用sympy. (2认同)

004*_*004 7

您可以在python中使用最小二乘法来求解方程组,例如求解方程3x + 4y = 75x + 6y = 8

>>> import numpy
>>> a=[[3,4],[5,6]]
>>> b=[7,8]
>>> numpy.linalg.lstsq(a,b)
(array([-5. ,  5.5]), array([], dtype=float64), 2, array([ 9.27110906,  0.21572392]))
Run Code Online (Sandbox Code Playgroud)


gar*_*rej 7

使用@Jeremy 的例子:

from sympy import *
x0, x1 = symbols(['x0', 'x1'])
sol = solve([3 * x0 + x1 - 9, x0 + 2 * x1 - 8], [x0, x1])
print(sol)
Run Code Online (Sandbox Code Playgroud)

输出:

{x0: 2, x1: 3}

使用@004 示例,符号略有不同:

from sympy import *
x, y = symbols(['x', 'y'])
system = [
    Eq(3*x + 4*y, 7),
    Eq(5*x + 6*y, 8)
]
soln = solve(system, [x, y])
print(soln)
Run Code Online (Sandbox Code Playgroud)

{x:-5,y:11/2}

注意:有时您可能会看到以下符号表示法:x, y = symbols('x, y'),这似乎不太像 Python。