是否可以在 sympy 中制作這樣的 delta 運算子?我不確定如何編碼。如果存在方法,應該真的很容易。
uj5u.com熱心網友回復:
我不知道 SymPy 是否公開了一些對你有用的東西。如果沒有,我們可以創建一些原始的東西。
注意:以下方法需要一些面向物件編程的知識以及 SymPy 處理事物的方式。這是一個 5 分鐘的嘗試,并不打算在生產中使用(事實上,沒有對此代碼進行任何測驗)。有很多事情可能無法按預期作業。但是,對于您的情況,它可能會起作用:)
一種可能的方法是定義一個“漸變”類,如下所示:
class Grad(Expr):
def __mul__(self, other):
return other.diff(*self.args)
def _latex(self, printer):
# create a latex representation to be visualize in Jupyter Notebook
return r"\frac{\partial}{%s}" % " ".join([r"\partial %s" % latex(t) for t in self.args])
我們可以x
通過寫來創建某物的漸變gx = Grad(x)
。一旦gx
與其他事物相乘,它會回傳該事物相對于 的偏導數x
。
然后你會像這樣定義你的符號/函式和矩陣:
from sympy import *
init_printing()
var("x, y")
N1, N2, N3 = [s(x, y) for s in symbols("N1:4", cls=Function)]
A = Matrix(3, 2, [Grad(x), 0, 0, Grad(y), Grad(x), Grad(y)])
B = Matrix(2, 6, [N1, 0, N2, 0, N3, 0, 0, N1, 0, N2, 0, N3])
display(A, B)
最后,將矩陣相乘以獲得符號結果:
A * B
最終,您可能想要創建一個函式:
def delta_operator(x, y, N1, N2, N3):
A = Matrix(3, 2, [Grad(x), 0, 0, Grad(y), Grad(x), Grad(y)])
B = Matrix(2, 6, [N1, 0, N2, 0, N3, 0, 0, N1, 0, N2, 0, N3])
return A * B
因此,每當您必須應用該運算子時,您只需執行delta_operator(x, y, N1, N2, N3)
以獲得與上述類似的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/474836.html
上一篇:查找遞增序列的第n個字符