如何定义一个类似微分记号d那样的变分符号δ并参与变分计算
mathematica吧
全部回复
仅看楼主
level 3
bmc013 楼主
最近在看老大中的《变分法基础》想按照书中P66页定义的拉格朗日泛函变分那样进行变分运算
我想定义类似微分算子那样的变分算子δ进行下述计算
我这样做
J[y_, x_, x0_, x1_] := (y^2 /. {x -> x0}) +
Integrate[x y + D[y, x]^2, {x, x0, x1}]
varJ[J_, y_, x_, x0_, x1_] :=
D[J[y + epsilon delta[y], x, x0, x1], epsilon] /. {epsilon -> 0}
varJ[J, y[x], x, x0, x1]
但是和教材的结果不同,变分记号δ并不能按上述运算规则进行变分运算,恳请群友帮助解决这个问题。
2020年02月21日 02点02分 1
level 3
bmc013 楼主
补充一下其他可能用到的变分记号运算规则:
2020年02月21日 03点02分 2
吧务
level 12
ClearAll[\[Delta], J]
J[y_] := y[x0]^2 + Integrate[x y[x] + y'[x]^2, {x, x0, x1}]
\[Delta][F_ /; Module[{y}, FreeQ[Level[F[y], {-1}], y]]] :=
Function[y,
Evaluate[D[
F[y[#] + \[Epsilon] \[Delta][
y][#] &], \[Epsilon]] /. \[Epsilon] -> 0]]
\[Delta][J][y]
2020年02月21日 07点02分 3
十分感谢!!!
2020年02月21日 08点02分
level 3
bmc013 楼主
非常感谢,我还想问一下:J[y_] := y[x0] + y[x] + y'[x] + x*y''[x]
\[Delta][F_ /; Module[{y}, FreeQ[Level[F[y], {-1}], y]]] :=
Function[y, Evaluate[F[y[
#] + \[Epsilon] \[Delta][y[#
]] &]]]
\[Delta][J][y]
怎样得到这种形式的中间结果:
y[x0] + \[CurlyEpsilon]*\[Delta][y[x0]] +
y[x] + \[CurlyEpsilon]*\[Delta][y[x]] +
y'[x] + \[CurlyEpsilon]*\[Delta][y'[x]] +
x (y''[x] + \[CurlyEpsilon]*\[Delta][y''[x]])
问题在于 (y[
#] + \[Epsilon] \[Delta][y[#
]] &)'[x] 进行替换计算同时也对\[Delta]求导,使得结果多出了一部分。
2020年02月21日 10点02分 8
level 3
bmc013 楼主
不好意思,我在您的回复下面留言的内容有些错误,本想删除我的评论,结果带楼都误删了。
ClearAll[J, \[Delta], Derivative]
J[y_] := y[x0] + y[x] + y'[x] + x*y''[x]
\[Delta][F_ /; Module[{y}, FreeQ[Level[F[y], {-1}], y]]] :=
Module[{\[Delta]y},
Function[y,
Evaluate[
F[y[#] + \[CurlyEpsilon] \[Delta]y[#] &] /. {\[Delta]y[
x_] :> \[Delta][y][x],
Derivative[k_][\[Delta]y][x_] :> \[Delta][Derivative[k][y]][
x]}]]]
\[Delta][J][y]
非常感谢您的这个回答,实际上\[Delta][y''][x] 写成\[Delta][ y''[x]] 更符合规定,此外若能利用变分和微分可以互换等运算规则,再进一步得到\[Delta]''[y[x]] 就更基本完善了,我是这样修改的:
J[y_] := y[x0] + y[x] + y'[x] + x*y''[x]
\[Delta][F_ /; Module[{y}, FreeQ[Level[F[y], {-1}], y]]] :=
Module[{\[Delta]y},
Function[y,
(Evaluate[F[y[#] + \[CurlyEpsilon] \[Delta]y[#] &] /.
{\[Delta]y[x_] :> \[Delta][y][x],
Derivative[k_][\[Delta]y][x_] :> \[Delta][
Derivative[k][y][x]]}]) /. {\[Delta][
Derivative[m_][y][x_]] :>
Derivative[m][\[Delta]][y[x]] }](*修改*)
]
\[Delta][J][y]
但是结果中出现了\[CurlyEpsilon] \[Delta][y][x],应该是\[CurlyEpsilon] \[Delta][y[x]]才对,我该怎样进一步修改?
2020年02月23日 02点02分 13
level 2
mathematica不自带变分计算吗?
2020年02月23日 04点02分 14
吧务
level 12

\[Delta]y[x_] :> \[Delta][y][x]
改成
\[Delta]y[x_] :> \[Delta][y[x]]
就可以了
另外Mathematica里有变分相关的程序包,可以在帮助里搜VariationalMethods看下是不是你需要的
2020年02月23日 07点02分 15
非常感谢。
2020年02月23日 09点02分
吧务
level 15
没有学过变分法,光看LZ的截图,感觉顶楼与2楼的规则(5)有些费解……
2020年02月29日 03点02分 16
1