最终,我的目标是在数值上区分表达式“u”(参见代码)相对于 t、相对于 X 和相对于 X 的三倍。
第一个想法是只用数字写下表达式,为 X 和 t 提供数组(linspaces)。这导致错误“'Add' object has no attribute 'cosh'”。关于这个错误,我唯一知道的是它表明我应该使用 sympy-functions 而不是 numpy-functions 或其他方式。但是,使用符号策略表达式(sympy-functions)然后尝试lambdify 给出了同样的错误,这次没有属性'sinh'。
我不知道我哪里错了。符号表达式定义得很好,只有当我将第一个lambdify添加到代码中时才会发生错误。
import numpy as np
import sympy as sp
c_1=1.35
c_2=0.7
X = sp.Symbol('X')
t = sp.Symbol('t')
u = sp.Function('u')(X,t)
u = 2*(c_1-c_2)*(c_1*(sp.cosh(sp.sqrt(c_2)*(X-c_2*t)/2))**2 + c_2*(sp.sinh(sp.sqrt(c_1)*(-X-c_1*t)/2))**2)/((sp.sqrt(c_1)-sp.sqrt(c_2))*sp.cosh((sp.sqrt(c_1)*(-X-c_1*t) + sp.sqrt(c_2)*(X-c_2*t))/2)+ (sp.sqrt(c_1)+sp.sqrt(c_2))*sp.cosh((sp.sqrt(c_1)*(-X-c_1*t)-sp.sqrt(c_2)*(X-c_2*t))/2))**2
Y= np.linspace(-20,20,100)
T = np.linspace(-35,35,300)
U = sp.lambdify(X,u,"numpy")
U2 = sp.lambdify(t,U(Y),"numpy")(T)
有谁知道如何修复我的代码以防止此错误,或者知道另一种方法来数字区分 u,如上所述?