2da*_*aaa 3 wolfram-mathematica
我刚刚开始使用Mathematica,我已经得到了关于进行替换的一个非常基本的问题,但我无法让它工作.
我想找到函数phi [x,y]的函数的欧拉 - 拉格朗日方程,然后替换函数phi [x,y]
如果我输入以下内容:
VariationalD[tau*phi[x, y]^2 - 2*phi[x, y]^4 + phi[x, y]^6 + Dot[D[phi[x, y], {{x, y}}], D[phi[x, y, {{x, y}}]]], phi[x, y], {x, y}]
我明白了
Plus[Times[2,tau,phi[x,y]],Times[-8,Power[phi[x,y],3]],Times[6,Power[phi[x,y],5]],Times[-2,Plus[Derivative[0,2][phi][x,y],Derivative[2,0][phi][x,y]]]]
Run Code Online (Sandbox Code Playgroud)
现在如果我尝试% /. phi[x,y] -> phi0[x,y] + psi[x,y]它会替换所有多项式项,但不能用于导数项.
如何强制替换这些函数?
我同意rcollyer所说的一切,但我认为他的最终解决方案可能有点不透明.
我能提出的最简单的规则(与rcollyer的基本相同)是
{phi[x__] :> phi0[x] + psi[x], f_[phi][x__] :> f[phi0][x] + f[psi][x]}
Run Code Online (Sandbox Code Playgroud)
或者副作用较小的东西是
{phi[x__] :> phi0[x] + psi[x], Derivative[n__][phi][x__] :> Derivative[n][phi0][x] + Derivative[n][psi][x]}
Run Code Online (Sandbox Code Playgroud)
如果这将是一个更容易Derivative有一个Default属性(比较Default[Times]有Default[Derivative]).它应该是类似Default[Derivative] := Sequence[]但不幸的是,它与模式匹配效果不佳.
回到你的问题,你可能想要定义类似的东西
VariationalD[expr_, sym_, var_] := Module[{
vRule = {sym[x__] :> sym[x] + var[x],
Derivative[n__][sym][x__] :> Derivative[n][sym][x] + Derivative[n][var][x]}},
(expr /. vRule) - expr]
Run Code Online (Sandbox Code Playgroud)
假设var符号的变化sym很小的地方.当然,你需要做的是系列扩展var=0,只保留线性部分.然后在具有衍生物的任何术语上使用部分集成var.所有这些都应该包含在上面的模块中.