我正在尝试使用 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'
最佳答案
一种解决方案是使用 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))
(注意二次方程式有两个解,所以这两个都会给出)。
关于python - 结合 Sympy 和不确定性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19647988/