символi c и числовое деление, sqrt с тем же кодом - PullRequest
0 голосов
/ 07 мая 2020

У меня есть кодовое выражение, например

def div(a, b):
    return a / b

, которое я хотел бы вернуть a / b символически , если я вызываю функцию с int или выражением sympy, т.е. :

from sympy import Rational, sqrt

compute(1.0, 7.0) == 0.14285714285714285  # (1)
compute(1, 7) == sympy.Rational(1, 7)     # (2)
compute(1, sqrt(2)) == 1 / sqrt(2)        # (3)

В приведенном выше определении числа (1) и (3) выполняются правильно, но возвращается значение с плавающей запятой 0.14285714285714285 для (2). Этот

def div(a, b):
    return Rational(a, b)

вообще не работает с (1) и (3).

Вдобавок к разделению, я хотел бы знать, как заставить это работать для sqrt тоже.

Есть подсказки?

1 Ответ

1 голос
/ 08 мая 2020

Аргументы не относятся к типу SymPy, поэтому вы получаете Python деление. Попробуйте:

def div(a, b):
    from sympy import S
    return S(a) / b

(Обработка a будет иметь эффект обработки b во время деления.)

...