Numpy 数学方程

Numpy 数学方程,numpy,z3py,mathematical-expressions,Numpy,Z3py,Mathematical Expressions,我有一个等式:S=val.X^3-val.X^2+val.X-val 知道所有变量都是int64,S和val是已知值 解决这个问题的最佳方法是什么,我使用了numpy和Z3,但没有得到正确的答案,任何线索都会有帮助 以下是如何使用z3py对其进行编码,在本例中,我将s设为40,将Val设为2,但您可以在下面的s对应行中轻松修改这些值。添加: from z3 import * S = BitVec ('S', 64) X = BitVec ('X', 64) Val = BitVec (

我有一个等式:S=val.X^3-val.X^2+val.X-val

知道所有变量都是int64,S和val是已知值

解决这个问题的最佳方法是什么,我使用了numpy和Z3,但没有得到正确的答案,任何线索都会有帮助


以下是如何使用z3py对其进行编码,在本例中,我将
s
设为
40
,将
Val
设为
2
,但您可以在下面的
s对应行中轻松修改这些值。添加

from z3 import *

S   = BitVec ('S', 64)
X   = BitVec ('X', 64)
Val = BitVec ('Val', 64)

s = Solver()
s.add (S == 40)
s.add (Val == 2)
s.add (S == Val * X * X * X - Val * X * X + Val * X - Val)

res = s.check()

if res == sat:
   print s.model()
elif res == unsat:
   print "No solution"
else:
   print "Solver returned: " + res
当我运行它时,我得到:

$ python b.py
[X = 4611686018427387907, Val = 2, S = 40]

这看起来可能令人惊讶,但请记住位向量算法是模块化的;如果你进行计算,你会发现它确实满足你的方程。

s=val.x^3.x^2+val.x-val

int64和s.val是已知值 z3是numphy单位

sü=val/3.0至单位x 将xΔ2初始值除以x-val-ª 正确地将计算添加到numpy单位

z3=val/int64(z3至单位val(x-val)
将单位除以初始值3-²

解释了如何初始化Z3Py的变量。忘记了第二部分和最后一部分是负数。只需更改为:
coeff=[valA,-valB,valC,-valD]
谢谢您的回答,我想问您一件事,我现在的主要问题是如何只比较这一部分的前64位带S?S/X/Val的“Val*X*X*X-Val*X+Val*X-Val”都声明为64位量,因此它们正好有64位。我不确定你所说的“64个第一位”是什么意思,它们只有这些。
$ python b.py
[X = 4611686018427387907, Val = 2, S = 40]