Оценить параметрическую производную символической функции в Python - PullRequest
2 голосов
/ 06 мая 2019

Я новичок в Python (v 3.7) и пытаюсь численно оценить производную символической функции, которая содержит параметры, но я не могу правильно передать значения.

Я пробовал разные комбинации, получая вдохновение от чтения этого вопроса и чего-то еще от здесь .

Вот минимальный пример, который повторяет мою проблему:

import sympy as sym
from sympy import*

x, y, a = sym.var('x, y, a')
def f(x,y):
    return a*x**2 + x*y**2
fprime = sym.diff(f(x,y),x)

print(f(1,1))
print(fprime.evalf(subs={x: 1, y: 1}))

Как и ожидалось, выход первого отпечатка равен a+1, но проблема возникает со вторым отпечатком, потому что вывод, который я получаю, равен 2.0*a*x + y**2, тогда как я хочу получить 2*a+1.

Как мне изменить мой код? Я также попытался определить fprime отдельно и выполнить следующее:

def fprime(x,y):
    return sym.diff(f(x,y),x)
print(fprime(x,1))

но все равно я не могу добиться прогресса. Спасибо!

1 Ответ

1 голос
/ 06 мая 2019

Просто используйте подстановку.Используйте evalf, когда вы пытаетесь получить число из выражения, которое является числом.Ваш, содержащий неоцененный a еще не является числом, поэтому оценка отклоняет его.

>>> fprime.subs({x: 1, y: 1})
2*a + 1
...