3

我正在尝试使用 sympy 来求解多项式方程,其系数具有不确定性。因此,对于不确定性,我正在尝试使用不确定性模块。有没有办法做到以下几点:

x=ufloat(10,0.2)  #the xs are coefficients
x1=ufloat(8,0.01)
x3=ufloat(25,2)
L=Symbol("L")
eqn=(x*(L**2))+(x1*(L*1))+(x3*(L**0))
solve(eqn,L) #ideally this should give the value of L with it's propagated uncertainty

没有它抛出错误:

TypeError: unsupported operand type(s) for *: 'Variable' and 'Pow'
4

2 回答 2

2

有一个基于不确定性和 sympy 的 python 包可以做到这一点:maabara

它仍处于测试阶段,但请参阅此处的示例


更新

上面的链接已经无效。你可以在github上找到这个包。这是用户指南


2019 年 3 月 2 日更新

上面的链接也失效了。你可以在github上找到一个同名的包。这是用户指南

于 2014-03-05T18:20:18.883 回答
2

一种解决方案是使用Symbol('x')然后将其替换为您的 ufloat(您可能需要使用它lambdify来执行此操作)。这应该可行,假设 SymPy 能够用符号系数以一般形式求解方程。由于这只是一个二次方,它会。对于三次,它也会,但对于高阶多项式,你就不走运了。我还假设ufloat插入二次方程时会做正确的事情。

就像是

x, x1, x3 = symbols('x x1 x3')
L=Symbol("L")
eqn=(x*(L**2))+(x1*(L*1))+(x3*(L**0))
s = solve(eqn,L)
lambdify([x, x1, x3], s)(ufloat(10,0.2), ufloat(8,0.01), ufloat(25,2))

(注意二次方有两个解,所以这两个都给出)。

于 2013-10-29T21:54:17.050 回答