質問
私は微分オペレーターとする。の簡素化の問題について私のオペレーターが
A[F_,G_] := D[F,x] D[G,y]
こういうことができるよう、私が知Fを定義する微分オペレーター AFなAF[G]と[F,G].の方法があ
AF[G_] := A[F,G]
る作品になりますでしょうか。がどのように手配されるように呼び出AFの異なる引数G1,G2,...の誘導体D[F,x]を再計算時だけます。また、私の様に定義AFるに影響を及ぼす可能性があり、特定の形式では、引数に渡された私の機能です。
私の持HoldAll、評価等できません入れられることが重要じゃないかなと思うくんです。私は全く身に覚えがないので知り合いが可能でMathematica.
解決
の問題について説明していただけまんだ簡単な方法でそれができていました。一つのことができるようになるrecastで飛躍的に容易に再定義 A
その機能の誘導体 F
や G
.の場合
A[{dFdx_,dFdy_}, {dGdx_,dGdy_}] := dFdx*dFdy
きのあるものの位置を算出す誘導体の F
する必要があり、その定義 AF
この汎用に関して A
, のような:
With[{ dFdx = D[F,x], dFdy = D[F,y] },
AF[G_] := A[{dFdx, dFdy}, {D[G, x], D[G, y]}]]
利用できる With
代替評価点のunevaluated右側のSetDelayed書(定義を":=")として表示します。ただし、することができず変化するということに関しては間違いないと思毛んのように想定しう A
です。
の場合 A
シンボルとDownValuesに定義されたので、簡単に定義できますので、その部分評価したい用 Hold
, ることルールの置換をして ReleaseHold
, のような:
ReleaseHold[
Hold[AF[G_] := A[F, G]] /. DownValues[A] /.
HoldPattern[D[F, var_]] :> With[{eval = D[F, var]}, eval /; True]]
の With[...]
ビットのルールであるトリックのための強制力の評価にもマッチングパターン内 Hold
というの "Trott-Strzebonski方法", である無名のものに非常に有効でのような仕事をするようになった。しかし、このように本当に制限をインターフェースの意味できないパスは、純粋な機能 A
, り、複雑な定義このうんです。がることができる管理指定すること微分形式とする機能の実際のデリバティブを強くお勧めしようとしているとします。
編集: 思ったより一般に強いということ.
フレキシビリティその後は一時的に抑制する定義 D
(デリバティブオペレーター) Block
, なのでデリバティブの定義に A
残unevaluated、その利用ルール交換代の価値観の誘導体の F
ながら包装まで純粋に取得する関数名を置換権はこのように:
With[{fRules =
{HoldPattern[D[F, x]] :> Evaluate[D[F, x]]}},
Block[{D},
With[{fn = Function[G, Evaluate[A[F, G] /. fRules]]},
AF[G_] := fn[G]]]]
他のヒント
あなただけの行うことはできません。
A[F_] := With[{DF = D[F, x]}, Function[{G}, DF D[G, y]]]
それはあなたが書くとF#のような本当の関数型プログラミング言語でカリー化と似ています:
let a f =
let df = d f x
fun g -> df * d g y