我试着用symphy来解一个多项式方程,它的系数有不确定性。所以对于不确定性,我尝试使用不确定性模块。有没有什么方法可以做到以下几点:

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/

10-09 04:53