数值和代数导数与sympy的混合

时间:2019-09-24 13:35:37

标签: python sympy

我是一个新的sympy用户,我想知道与分析定义的函数以及某些数据的插值一起使用的最佳方法是什么。 这是一个示例:

from sympy import *
import numpy as np
from scipy.interpolate import interp1d

def f(x,y):
    return 3*x*exp(y)

def g(z1,z2):
    return 5*z1*z2

def f2(x):
    return 3*x+2

#Dummy data:
xdata = np.linspace(0.,1.,100)
ydata = 3*xdata+2
#Numerically defined function:
f2num = lambda x: interp1d(xdata,ydata)(x)  

#Using only the algebraic functions works as expected:
x,y = symbols('x y')
g(f(x,y),f2(x)).diff(x) #Returns 45*x*exp(y) + (45*x+30)*exp(y)
g(f(x,y),f2(x)).diff(x).evalf(subs={x : 2, y: 3}) #Returns 3615.4

#But I would like to be able to do something analogous using f2num:
g(f(x,y),f2num(x)).diff(x)
g(f(x,y),f2num(x)).diff(x).evalf(subs={x : 2, y: 3})

实现上述行为的最佳方法是什么? 换句话说,我有没有办法定义一个sympy.Function 将f2num的导数视为未定义函数 除非对其进行数字评估? 我尝试使用sympy.Function类和fdiff,但未成功。

谢谢。

0 个答案:

没有答案