Sympy evalf не работает с 1 переменной subs () в выражении с 2 переменными - PullRequest
0 голосов
/ 10 октября 2018

Для проекта колледжа в Python, использующего Sympy, мне нужно оценить вывод символической функции 2 var после частичной замены, например:

f = (x-1) / sqrt ((x-10) ^ 2 + (y-10) ^ 2) / x = 1 => f = 0

Если я использую функцию 1 var, она отлично работает:

>>> from sympy import *
>>> x = symbols('x')
>>> F = 1-x
>>> F.evalf(subs={x: 1})
0.e-125

Но в случае функции 2 var sub, кажется, не выполняет правильную замену:

>>> from sympy import *
>>> x,y = symbols('x y')
>>> F = (x-1)/sqrt((x-10)**2+(y-10)**2)
>>> F.evalf(subs={x: 1})
(x - 1.0)*((x - 10.0)**2 + (y - 10.0)**2)**(-0.5)

Я ожидал F = 0, поскольку x = 1

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Как упомянуто выше, если y = nan создает математическое исключение, и поэтому замена никогда не происходит.Но я узнал, что если я просто использую подпрограммы, тогда я получаю то, что хочу:

>>> F.subs(x,1)
0

Теперь, если я явно подставлю только y = nan, тогда я получу ответ nan

>>> F.subs(y,nan)
nan

Imугадывает, что evalf просто проверяет наличие дополнительных исключений, прежде чем оценивает подстановку.

0 голосов
/ 10 октября 2018

Я не эксперт по симпати, но я нашел встречный пример, когда значение y делает выражение ненулевым:

>>> F.evalf(subs={x:1,y:float("nan")})
nan

, когда y равно nan, результатне ноль.Таким образом, невозможно упростить выражение, не зная значения y (примечание: sympy радостно оценивает F.evalf(subs={x:1,y:oo}) в 0, даже если результат должен быть также равен nan)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...