cvc4中实数的对数/指数

时间:2017-11-20 13:35:17

标签: logarithm exponent cvc4

我正在寻找一个能够提供包含对数或指数的实数公式模型的求解器。

cvc4可以处理包含实数的对数或指数的函数吗?同样,cvc4可以表示常量e吗?

根据this question,z3只能处理常数指数,这对我没有帮助。

This question只询问整数的对数。

1 个答案:

答案 0 :(得分:1)

我对cvc4不熟悉,但我可能有一些关于对数的有用属性,你可以根据自己的限制来利用这些属性。

从技术上讲,没有计算机(无论多么强大)知道e是什么,因为它是超越的(不能表示为具有有理系数的多项式方程的解)。

如果限制为只能取整数的对数,则可以将e表示为一个近似值并以此方式求解。公式最终比直接取对数更长,但优点是你可以有效地计算基数是任意有理数的对数,而只能单独找到整数的对数。

ea/ba为整数的分数b近似。

(a/b)^n = x

log(base a/b)(x) = n

这并没有真正让你到任何地方,所以我们必须走一条需要更多代数的不同路线。

(a/b)^n = x

(a^n)/(b^n) = x

a^n = x * b^n

log(base a)(x * b^n) = n

log(base a)(x) + log(base a)(b^n) = n

log(base a)(x) + n*log(base a)(b) = n

log(base a)(x) = n - n*log(base a)(b)

log(base a)(x) = n * (1 - log(base a)(b))

n = log(base a)(x) / (1 - log(base a)(b))

换句话说,log(base a)(x) / (1 - log(base a)(b))ln(x)的近似值,其中a/be的近似值。显然,ln(x)的近似值更接近ln(x)的实际值,因为a/b更接近e。请注意,我在此处保留了一般信息,a/b可以表示任何有理数,而不只是e

如果这并没有完全回答你的问题,我希望它至少有帮助。

刚试了一个任意的例子。

如果您分别将ab视为2718310000,我尝试了这个快速计算:

log(base 27183)(82834) / (1 - log(base 27138)(10000)) = 11.32452...

                                            ln(82834) = 11.32459...