【发布时间】:2019-12-04 07:31:18
【问题描述】:
简介
我们一直在从事最近的一个项目,并一直在寻找合适的系统来计算一些值。 SymPy 被推荐为一个丰富的数学库。但是,我们无法让它与我们的项目“工作”。
我们一直在努力解决的问题是,我们将使用的许多值已经被四舍五入多次,并且很可能容易出现浮点错误。为了在之前的项目中解决这个问题,我们使用Interval Arithmetic 来相当有效地使用 JavaScript。 Python 的 mpmath 似乎很相似,但 SymPy 不仅使用 mpmath,还提供了我们将来可能需要的其他潜在有用的功能。
问题
我们最近一直在研究的一个示例方程是a = b * (1 + c * d * e),我们希望在所有其他变量已知的情况下求解e。但是,有些变量需要表示为一个值范围,因为我们不知道确切的值,而是一个很小的范围。
代码
from sympy import *
from sympy.sets.setexpr import SetExpr
a, b, c, d, e = symbols('a b c d e')
b = 40
c = 1
d = 0.1
a = SetExpr(Interval(45.995, 46.005))
equ = Eq(b * (1 + c * d * e), a)
solveset(equ, e)
ValueError: The argument '45.995*I' is not comparable.
这只是最新的尝试,但我尝试过设置域、设置符号的不等式、使用AccumBounds 以及许多其他解决方案,但我不禁认为我们完全忽略了一些简单的事情。
解决方案
使用一个区间似乎可以使用所选答案提供的代码,但它不会扩展到需要区间或值范围的多个符号。看来我们将扩展 mpmath 库以支持额外的区间函数。
【问题讨论】: