【发布时间】:2020-11-25 22:11:48
【问题描述】:
我在 Sympy 中执行以下操作来生成表达式:
- 创建一些矩阵 Q_{ij},其中包含 x 和 y 的一些函数 \eta、\mu、\nu。
- 对索引求和并取一些偏导数。
- 用一些简单的表达式替换 \eta、\mu 和 \nu(比如 \sin(x)*\cos(y))。
- 尝试简化表达式,以便显式计算简单表达式的偏导数。
当我这样做时,它给了我以下错误:
NotImplementedError: Improve MV Derivative support in collect
我使用的具体代码是:
from sympy import *
# Set up system and generate functions
x, y, z = symbols('x y z')
i, j, k, m, p = symbols('i j k m p')
xi = Matrix([x, y, z])
lims = range(0, 3)
eta = Function('eta', real=True)(x, y)
mu = Function('mu', real=True)(x, y)
nu = Function('nu', real=True)(x, y)
Q = Matrix([[2/sqrt(3)*eta, nu, 0],
[nu, -1/sqrt(3)*eta + mu, 0],
[0, 0, -1/sqrt(3)*eta - mu]])
# Create complicated expression of partial derivatives
Phi_L1 = -sum(Eijk(3, p + 1, i + 1)
*diff(diff(diff(Q[k, l], xi[j]), xi[j]), xi[p])
*diff(Q[k, l], xi[i])
for i in lims
for j in lims
for k in lims
for l in lims
for p in lims
)
Phi_L1 = simplify(Phi_L1)
# Choose example functions and try to evaluate expression explicitly
eta1 = sin(x)*cos(y)
mu1 = sinh(x)*cosh(y)
nu1 = x**2*y**2
expr1 = Phi_L1.subs(eta, eta1).subs(mu, mu1).subs(nu, nu1)
simplify(expr1)
我找不到给出相同错误的更简单示例。例如,以下内容按预期工作:
f = Function('f', real=True)(x, y)
expr = diff(diff(f, x), y)
simplify(expr.subs(f, sinh(x)*cosh(y)))
【问题讨论】:
标签: python sympy symbolic-math