结合Sympy和不确定性

时间:2013-10-29 01:15:26

标签: python sympy uncertainty

我正在尝试使用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'

2 个答案:

答案 0 :(得分: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))

(注意二次方有两种解决方案,所以这两种方法都有。)

答案 1 :(得分:2)

有一个基于不确定性和同情心的python包:maabara

它仍处于测试阶段,但请参见示例here


<强>更新

上述链接已无效。您可以在github找到该套餐。 这是User Guide


更新于2019年3月2日

上面的链接也已经死了。 您可以在github上找到同名的包。 这是User Guide