Когда следующий код запускается Derivative(Ksi(uix, uiy), uix))
и Derivative(Ksi(uix, uiy), uiy))
термины появляются:Можем ли мы заменить «производные» члены в sympy, исходящие из дифференциации переменных sympy.Function?
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)]])
Я хотел бы заменить этот Derivative
условия от, скажем, символическое выражение производной функции, я знаю, я, например, хотел бы установить Derivative(Ksi(uix,uiy), uix) = 2 * uix
. Есть ли опрятный способ сделать эту замену и получить символическое выражение для dgN
с Derivative(Ksi(uix,uiy), uix)
, установленное в 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)])
Похоже, вы сделали бы это с помощью того же инструмента, который вы используете для любой другой подстановки, метода ['subs'] (http://docs.sympy.org/latest/tutorial/basic_operations.html#substitution). Разве это не сработало? – user2357112
Я не работал. Возможно, я сделал это неправильно – MarcoMag