Mam następujący prosty kod:

import sympy
from sympy.solvers.diophantine.diophantine import diop_linear

x, y = sympy.symbols('x y')
eq = 2*x+3*y-10
sol_eq = diop_linear(eq)

Zmienna sol_eq jest równa (3*t_0 - 10, 10 - 2*t_0). Teraz chciałbym być w stanie zastąpić sol_eq[0] wartość 1 dla t_0 i oceniaj to. Ale jeśli spróbuję sol_eq[0].subs({t_0:1}) oczywiście otrzymuję błąd, ponieważ t_0 nie jest zdefiniowany. Jeśli zdefiniowałem t_0 jako symbol, wydaje się, że traktuje ich tak różne.

Jakieś sugestie? Pomoc Sympy nie wydaje się wskazać żadnych wskazówek na temat manipulowania rezultatu lub, dokładniej, nie byłem w stanie się dowiedzieć.

0
geguze 19 lipiec 2020, 00:16

1 odpowiedź

Najlepsza odpowiedź

Możesz zdefiniować symbol siebie i będzie działać pod warunkiem, że ustawisz integer=True założenie:

In [1]: import sympy 
   ...: from sympy.solvers.diophantine.diophantine import diop_linear 
   ...:  
   ...: x, y = sympy.symbols('x y') 
   ...: eq = 2*x+3*y-10 
   ...: sol_eq = diop_linear(eq)                                                                                                               

In [2]: sol_eq                                                                                                                                 
Out[2]: (3⋅t₀ - 10, 10 - 2⋅t₀)

In [3]: t0 = Symbol('t_0', integer=True)                                                                                                       

In [4]: sol_eq_1 = tuple(s.subs({t0: 1}) for s in sol_eq)                                                                                      

In [5]: sol_eq_1                                                                                                                               
Out[5]: (-7, 8)
0
Oscar Benjamin 18 lipiec 2020, 22:10