我了解该功能applyrule
用于patmatch
识别模式并相应地应用转换。
假设,我想写一个规则,用于将方向的空间导数转换为动量空间,这样:
。
我试图定义如下规则:
In: applyrule(diff(f::function,z)=-I*k*f,diff(E1(x, y, z), z))
Out: diff(E1(x, y, z), z)
这是行不通的。原因是,patmatch 无法匹配上述模式:
In: patmatch(diff(E1(x, y, z), z), diff(f::function, z))
Out: false
相反,如果没有diff()
运算符,
In: patmatch(E1(x, y, z), f::function)
Out: true
作为一种解决方法,我目前编写以下命令:
applyrule(diff(dE1(X), z) = -I*k*dE1(X),expression)
对于每个字段组件expression
,它工作正常。
但我想知道一种更简单的方法来做到这一点,这样我就不必分别为每个组件编写规则。具体来说,无法patmatch
识别内部模式diff()
是令人不安的。解决此问题的任何解决方法或解决方案都会有所帮助。