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