我们可以替换 sympy 中来自 sympy.Function 变量微分的“导数”项吗?

Mar*_*Mag 4 python symbolic-math sympy

当运行以下代码Derivative(Ksi(uix, uiy), uix))Derivative(Ksi(uix, uiy), uiy))出现术语时:

In [4]: dgN
Out[4]:
Matrix([
[-(x1x - x2x)*(-x1y + x2y)*((x1x - x2x)**2 + (-x1y + x2y)**2)**(-0.5)*Derivative(Ksi(uix, uiy), uix) + (-x1y + x2y)*(-(-x1x + x2x)*Derivative(Ksi(uix, uiy), uix) + 1)*((x1x - x2x)**2 + (-x1y + x2y)**2)**(-0.5)],
[-(-x1x + x2x)*(-x1y + x2y)*((x1x - x2x)**2 + (-x1y + x2y)**2)**(-0.5)*Derivative(Ksi(uix, uiy), uiy) + (x1x - x2x)*(-(-x1y + x2y)*Derivative(Ksi(uix, uiy), uiy) + 1)*((x1x - x2x)**2 + (-x1y + x2y)**2)**(-0.5)]])
Run Code Online (Sandbox Code Playgroud)

我想用Derivative我知道的函数导数的符号表达式来替换这些术语,例如,我想设置Derivative(Ksi(uix,uiy), uix) = 2 * uix。有没有一种巧妙的方法来进行这种替换并获得dgNwith Derivative(Ksi(uix,uiy), uix)set to 的符号表达式2 * uix?这是我的代码:

import sympy as sp 

sp.var("kPenN, Xix, Xiy, uix, uiy, Alpha, x1x, x1y, x2x, x2y, x3x, x3y ", real = True) 
Ksi = sp.Function('Ksi')(uix,uiy)
Xi          = sp.Matrix([Xix, Xiy])
ui          = sp.Matrix([uix, uiy])
xix         = Xix + uix
xiy         = Xiy + uiy   
xi          = sp.Matrix([xix, xiy])
x1 = sp.Matrix([x1x, x1y])
x2 = sp.Matrix([x2x, x2y])

N           = sp.Matrix([x2 - x1, sp.zeros(1)]).cross(sp.Matrix([sp.zeros(2,1) , sp.ones(1)]))
N = sp.Matrix(2,1, sp.flatten(N[0:2]))
N = N / (N.dot(N))**(0.5)

xp = x1 + (x2 - x1)*Ksi
# make it scalar (in agreement with 9.231)
gN = (xi - xp).dot(N)
dgN = sp.Matrix([gN.diff(uix), gN.diff(uiy)])
Run Code Online (Sandbox Code Playgroud)

小智 5

您想要的替代可以通过以下方式实现

dgN_subbed = dgN.subs(sp.Derivative(Ksi, uix), 2*uix)
Run Code Online (Sandbox Code Playgroud)

这里 Ksi 没有参数 (uix,uiy),因为在创建 Ksi 时已经声明了这些参数。

Ksi如果您将其定义为,则语法会更直观一些Ksi = sp.Function('Ksi'),而将参数(无论它们是什么)留到稍后提供。然后sp.Derivative(Ksi(uix, uiy), uix)就是引用导数的方法。