数学方程

时间:2017-10-07 18:09:38

标签: numpy z3py mathematical-expressions

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

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

解决问题的最佳方法是什么,我使用numpy和Z3,但无法得到正确答案,任何领导都会有所帮助

3 个答案:

答案 0 :(得分:0)

这改编自https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.roots.html

>>> import numpy as np
>>> valA=2.1
>>> valC=4.3
>>> valD=5.4
>>> valB=3.2
>>> coeff = [valA, valB, valC, valD]
>>> np.roots(coeff)
array([-1.38548682+0.j        , -0.06916135+1.36058497j,
   -0.06916135-1.36058497j])
>>>

答案 1 :(得分:0)

以下是使用z3py对此进行编码的方法,出于本示例的目的,我将S作为40Val作为2,但您可以在s.add

的相应行中轻松修改这些值
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]

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

答案 2 :(得分:-2)

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

int64和s.val是已知值 z3是数字单位。

s¹= val / 3。单位x 将xΔ2初始值除以x-val-1 正确将计算添加到numpy单位

z3 = val / int64(z3到单位val(x-val) 将单位除以初始val3-²