Logarithm/Exponential cvc4 中的实数

Logarithm/Exponential of real numbers in cvc4

我正在寻找可以提供涉及对数或指数的实数公式模型的求解器。

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


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

This question 只询问整数的对数。

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

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

如果您的能力有限,只能对整数取对数,则可以将 e 表示为派系近似值,并以此方式求解。该公式最终比直接取对数要长一些,但优点是您可以有效地计算底数为任何有理数的对数,而只单独求整数的对数。

e近似为分数a/b,其中ab都是整数。

(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...