Sympy 解决的精确解决方案
Exact solution from Sympy solve
有没有办法将 Sympy 求解过滤为 return 精确解而不是表达式?
例子
import sympy as sp
x, y = sp.var('x,y',real=True);
l1, l2, l3 = sp.symbols('\lambda_1,\lambda_2,\lambda_3', real = True)
f = x**(sp.Rational(1/3))*y**(sp.Rational(2/3)) #define function
c = [x + y - 1, -x, -y]
L = f - l1*c[0] - l2*c[1] - l3*c[2]
gradL = sp.Matrix([sp.diff(L,c) for c in L.free_symbols])
stationary_points = sp.solve(gradL, L.free_symbols, dict=True)
求解returns:
[{\lambda_1: \lambda_3 + 0.666666666666667*x**(1/3)/y**(1/3),
\lambda_2: \lambda_3 + 0.666666666666667*x**(1/3)/y**(1/3) - 0.333333333333333*y**(2/3)/x**(2/3)}]
如果我喜欢空字典,因为这个解决方案并不精确,而是表达式。
我在 Sympy 文档中进行了搜索,但没有找到任何内容。
检测方程组的线性子集并根据其解做出决策的能力是一个开放的 SymPy 问题。对于您的情况,您可以通过请求 manual=True
来帮助系统,这将给出 []
作为解决方案。
有没有办法将 Sympy 求解过滤为 return 精确解而不是表达式?
例子
import sympy as sp
x, y = sp.var('x,y',real=True);
l1, l2, l3 = sp.symbols('\lambda_1,\lambda_2,\lambda_3', real = True)
f = x**(sp.Rational(1/3))*y**(sp.Rational(2/3)) #define function
c = [x + y - 1, -x, -y]
L = f - l1*c[0] - l2*c[1] - l3*c[2]
gradL = sp.Matrix([sp.diff(L,c) for c in L.free_symbols])
stationary_points = sp.solve(gradL, L.free_symbols, dict=True)
求解returns:
[{\lambda_1: \lambda_3 + 0.666666666666667*x**(1/3)/y**(1/3),
\lambda_2: \lambda_3 + 0.666666666666667*x**(1/3)/y**(1/3) - 0.333333333333333*y**(2/3)/x**(2/3)}]
如果我喜欢空字典,因为这个解决方案并不精确,而是表达式。
我在 Sympy 文档中进行了搜索,但没有找到任何内容。
检测方程组的线性子集并根据其解做出决策的能力是一个开放的 SymPy 问题。对于您的情况,您可以通过请求 manual=True
来帮助系统,这将给出 []
作为解决方案。