Точное решение от Sympy решить - PullRequest
0 голосов
/ 12 октября 2019

Есть ли способ отфильтровать решение Sympy, чтобы оно возвращало только точные решения, а не выражения?

Пример

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)

Возвращает решение:

[{\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)}]

WereasМне бы понравился пустой словарь, так как это решение не является точным, но является выражением.

Я искал в документации Sympy, но ничего не нашел.

1 Ответ

0 голосов
/ 12 октября 2019

Способность обнаруживать линейные подмножества систем уравнений и принимать решения на основе их решения является открытой проблемой SymPy. В вашем случае вы можете помочь системе, запросив manual=True, что даст [] в качестве решения.

...