使用SymPy求导时返回0的问题求助:如何让latex2sympy生成的函数被识别为SymPy内置函数
SymPy求导时返回0的问题求助:如何让latex2sympy生成的函数被识别为SymPy内置函数
大家好,我正在用Python + Nest.js开发一个兼具绘图和微积分计算功能的计算器应用,选用SymPy来实现微积分相关特性,但最近在求导功能上遇到了一个头疼的问题。
我的derivative.py代码如下:
from latex2sympy2 import latex2sympy, latex2latex import sympy as smp def derivative(latex): x = smp.symbols('x', real=True) f = latex2sympy(latex) dfdx = smp.diff(f, x) return smp.latex(dfdx)
目前大部分流程都能正常跑,但唯独smp.diff()这一步总是返回0——比如输入sin(x),求导结果居然是0,这显然不对。
我自己排查了一下,发现问题可能出在latex2sympy()的返回值上:它生成的函数是不带SymPy命名空间前缀的,比如返回的是sin(x)而不是smp.sin(x),导致smp.diff()没法识别这是SymPy的内置函数。更奇怪的是,我把完全相同的代码放到Google Colab里运行,却能得到正确的求导结果(比如sin(x)的导数是cos(x))。
举个测试例子:
f = latex2sympy(latex) # 这里latex传入的是'$$ \sin x $$' # 得到的f是sin(x) dfdx = smp.diff(f, x) # 结果dfdx居然是0
我猜想核心问题应该是smp.diff()需要处理的是smp.sin(x)这种明确属于SymPy命名空间的函数对象,而不是latex2sympy生成的sin(x)。想请教各位大佬,有没有办法让latex2sympy生成的函数自动关联到SymPy的命名空间,或者有没有其他可行的办法解决这个求导返回0的问题?
备注:内容来源于stack exchange,提问作者1HA
相关产品推荐
相关产品推荐

