numpy 用来解方程的话有点复杂,须要用到矩阵的思惟!我矩阵没学好再加上 numpy 不能解非线性方程组,因此...我也不会这玩意儿!python
逊色于 sage 和 z3,但解方程也是很是不错的!linux
from sympy import * x = symbols('x') y = symbols('y') res = solve([x+y-3,x-y-1],[x,y])[0] print(res)
sage 既能解线性方程组,又能解非线性方程组,堪称解方程界的神器,可是表达式不支持位运算,好比:与或非,取余以及异或。出现位运算的方程就只能用 z3 建立约束求解!sage 的优势也很明显:表达式简单易写,运算速度快!
在线sage求解git
var('x y') solve([x**3+y**2+666==142335262,x**2-y==269086,x+y==1834],[x,y])
z3 也叫约束求解器,用来解任何方程都没有问题!可是 windows 不太好装,因此我基本上是在linux
上跑,python2 和 python3 都支持!使用的思路很是简单:github
下面列举经常使用的函数,顺便给个 z3-solver文档windows
# 符号变量类型 Int('x') Real('x') Bool('x') BitVec('x',N) # N bit的符号变量,用于位操做 BitVecVal(num,N) # N bit的数据 num # 初始化约束器 solver = Solver() # 添加约束 solver.add(x+y==10,x-y==0) # 求解约束 solver.check() ans = solver.mode() # 初始化多个符号变量 x = [Int('x%d' % i) for i in range(n)] # 取结果中某个变量的值 value = ans[x].as_long()