Получить значение многочлена от двух переменных, заменив только одну переменную - PullRequest
0 голосов
/ 29 ноября 2018

Я использую python 3.6.3 в Windows 7. У меня есть следующий код:

from sympy import *
x, a = symbols('x a')
q = 23*a + x**4 + 6*x**3 + x**2*(a + 14) + x*(8*a + 14) + 1

Я хотел получить значение q для x = 3, и я сделал:

q.evalf(subs={x:3})

Я ожидал получить: 56*a + 412, но все, что я получил, это:

23.0*a + x**4 + 6.0*x**3 + x**2*(a + 14.0) + x*(8.0*a + 14.0) + 1

Я не нашел ничего в документации о получении значения выражения путем заменытолько одна переменная.
Как мне получить значение q для x = 3?

1 Ответ

0 голосов
/ 30 ноября 2018

Вы не можете получить значение, используя evalf и неполный словарь переменных.Как упоминалось в комментариях @ForceBru, вы можете использовать функцию подстановки subs().


Есть источники, когда можно исследовать evalf: github или sympy.core.evalf .

Как можно видеть (когда опция verbose равна True) evalf выполняет вычисления как последовательность «атомарных операций»:

q.evalf(subs={x:3}, verbose=True)    
### input x
### output 3.0
### raw ((0, 3, 0, 2), None, 74, None)

### input x**4
### output 81.0
### raw ((0, 81, 0, 7), None, 67, None)

Когда evalf приближается к a в последний раз (пытается два раза), KeyError повышается, и выражение вычисляется с использованием следующих строк :

if 'subs' in options:
    x = x.subs(evalf_subs(prec, options['subs']))
xe = x._eval_evalf(prec)
re, im = xe.as_real_imag()    

x заканчивается как a, но результат оценки x._eval_evalf(prec) равен None.Поскольку xe равно None, последняя упомянутая строка поднимает NotImplementedError.

Это исключение обрабатывается в class EvalfMixin в следующих строках , гдеввод возвращается:

except NotImplementedError:
    # Probably contains symbols or unknown functions
    return v

PS.Я заметил, что слишком поздно ответил на комментарий @ForceBru, строго говоря.Пусть останется как есть.

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