Sympy evalf не работает с 1 переменной subs () в выражении с 2 переменными

1

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

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

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

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

Но в случае функции 2 var subs, похоже, не делает права на замещение:

>>> 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

Теги:
sympy

2 ответа

2
Лучший ответ

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

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

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

  • 0
    Вы правы, я не думал об этом, но я узнал, если я просто: >>> F.subs (x, 1) 0 теперь, если я явно подставлю y = nan только тогда, я получу ответ nan >>> F.subs (y, nan) nan
  • 0
    Я думаю, что вы могли бы написать свой ответ на этот вопрос.
1

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

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

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

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

Im guessing evalf просто проверяет больше исключений, прежде чем оценивать замену.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню