numpy 用來(lái)解方程的話有點(diǎn)復(fù)雜,需要用到矩陣的思維!我矩陣沒(méi)學(xué)好再加上 numpy 不能解非線性方程組,所以...我也不會(huì)這玩意兒!
遜色于 sage 和 z3,但解方程也是非常不錯(cuò)的!
from sympy import * x = symbols('x') y = symbols('y') res = solve([x+y-3,x-y-1],[x,y])[0] print(res)
sage 既能解線性方程組,又能解非線性方程組,堪稱解方程界的神器,但是表達(dá)式不支持位運(yùn)算,比如:與或非,取余以及異或。出現(xiàn)位運(yùn)算的方程就只能用 z3 創(chuàng)建約束求解!sage 的優(yōu)點(diǎn)也很明顯:表達(dá)式簡(jiǎn)單易寫,運(yùn)算速度快!
在線sage求解
var('x y') solve([x**3+y**2+666==142335262,x**2-y==269086,x+y==1834],[x,y])
z3 也叫約束求解器,用來(lái)解任何方程都沒(méi)有問(wèn)題!但是 windows 不太好裝,所以我基本上是在linux
上跑,python2 和 python3 都支持!使用的思路非常簡(jiǎn)單:
先創(chuàng)建你所需類型的符號(hào)變量
再初始化一個(gè)約束器,
添加約束
最后判斷約束是否有解以及求解變量
下面列舉常用的函數(shù),順便給個(gè) z3-solver文檔
# 符號(hào)變量類型 Int('x') Real('x') Bool('x') BitVec('x',N) # N bit的符號(hào)變量,用于位操作 BitVecVal(num,N) # N bit的數(shù)據(jù) num # 初始化約束器 solver = Solver() # 添加約束 solver.add(x+y==10,x-y==0) # 求解約束 solver.check() ans = solver.mode() # 初始化多個(gè)符號(hào)變量 x = [Int('x%d' % i) for i in range(n)] # 取結(jié)果中某個(gè)變量的值 value = ans[x].as_long()
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com