主要目的是更优雅的定义奇异函数的Macaulay括号积分法则。

如果要计算奇异函数,如下定义。Macaulay的下值。
Macaulay[x_, a_, n_Integer?NonNegative] := (x - a)^n*UnitStep[x - a]
Macaulay[x_, a_, n_Integer?Negative] :=
Derivative[-n - 1][DiracDelta][x - a]
对积分法则,定义 Macaulay的上值
Macaulay /: Integrate[Macaulay[x_, a_, n_Integer?Negative], x_] :=
Macaulay[x, a, n + 1]
Macaulay /: Integrate[ Macaulay[x_, a_, n_Integer?NonNegative], x_] :=
1/(n + 1) Macaulay[x, a, n + 1]
现在的问题是,因为Macaula已经有了下值定义,在积分时,下值会优先上值被计算
(* in *)
Integrate[Macaulay[x, a, -2], x]
(* out *)
DiracDelta[-a + x]
如果清除Macaula的下值,会得到我想要的结果。
(* in *)
DownValues[Macaulay] =.
Integrate[Macaulay[x, a, -2], x]
(* out *)
Macaulay[x, a, -1]
-------------------------------------------------------
我参考了stackexchange上的帖子,可以改变求值顺序。
https://mathematica.stackexchange.com/questions/95087/is-it-possible-to-change-the-order-that-symbol-definitions-are-checked-downval
(* in *)
Hold[Integrate[Macaulay[x, a, -3], x]] /. UpValues[Macaulay]
(* out *)
Hold[Macaulay[x, a, -3 + 1]]
但这不是我想要的。一旦去除Hold,Macaulay[x, a, -3 + 1] 又会自动计算其下值。
如何能既保留Macaulay的下值定义,又阻止计算直接返回Macaulay[x, a, -3 + 1]形式呢?

如果要计算奇异函数,如下定义。Macaulay的下值。
Macaulay[x_, a_, n_Integer?NonNegative] := (x - a)^n*UnitStep[x - a]
Macaulay[x_, a_, n_Integer?Negative] :=
Derivative[-n - 1][DiracDelta][x - a]
对积分法则,定义 Macaulay的上值
Macaulay /: Integrate[Macaulay[x_, a_, n_Integer?Negative], x_] :=
Macaulay[x, a, n + 1]
Macaulay /: Integrate[ Macaulay[x_, a_, n_Integer?NonNegative], x_] :=
1/(n + 1) Macaulay[x, a, n + 1]
现在的问题是,因为Macaula已经有了下值定义,在积分时,下值会优先上值被计算
(* in *)
Integrate[Macaulay[x, a, -2], x]
(* out *)
DiracDelta[-a + x]
如果清除Macaula的下值,会得到我想要的结果。
(* in *)
DownValues[Macaulay] =.
Integrate[Macaulay[x, a, -2], x]
(* out *)
Macaulay[x, a, -1]
-------------------------------------------------------
我参考了stackexchange上的帖子,可以改变求值顺序。
https://mathematica.stackexchange.com/questions/95087/is-it-possible-to-change-the-order-that-symbol-definitions-are-checked-downval
(* in *)
Hold[Integrate[Macaulay[x, a, -3], x]] /. UpValues[Macaulay]
(* out *)
Hold[Macaulay[x, a, -3 + 1]]
但这不是我想要的。一旦去除Hold,Macaulay[x, a, -3 + 1] 又会自动计算其下值。
如何能既保留Macaulay的下值定义,又阻止计算直接返回Macaulay[x, a, -3 + 1]形式呢?