Mathematica中如何進行微分變換?

我有一個微分方程,比如

frac{partial U^2(x,y)}{partial x^2}+frac{partial U^2(x,y)}{partial y^2}=0,

如果我還一組變數,比如

	heta=arctan{frac{y}{x}}, r=sqrt{x^2+y^2}

怎麼使用規則變換求得U在新變數下的微分方程呢?


  • 先說內置做法。

Mathematica內置了不同坐標系下的拉普拉斯算符,查下幫助直接用就行

Laplacian[U[r, [Theta]], {r, [Theta]}, "Polar"] // FullSimplify

  • 然後說下普適性比較強的推導方法

left{
egin{aligned}
frac{partial}{partial x}=frac{partial r}{partial x}frac{partial}{partial r}+frac{partial 	heta }{partial x}frac{partial}{partial 	heta}\
frac{partial}{partial y}=frac{partial r}{partial y}frac{partial}{partial r}+frac{partial 	heta }{partial y}frac{partial}{partial 	heta}
end{aligned}

ight.Rightarrow left(
egin{aligned}
frac{partial}{partial x} \
frac{partial}{partial y} \
end{aligned}

ight)=J^{T}cdotleft(
egin{aligned}
frac{partial}{partial r} \
frac{partial}{partial 	heta} \
end{aligned}

ight)

其中J=frac{partial(r,	heta)}{partial(x,y)}為雅可比矩陣

所以就可以在Mathematica中直接定義frac{partial}{partial x},frac{partial}{partial y} 兩個算符,代碼如下

(*因為需要用{r,[Theta]}表示所以先求{r,[Theta]}對{x,y}的雅可比矩陣然後再求逆*)
J = Inverse[D[r {Cos[[Theta]], Sin[[Theta]]}, {{r, [Theta]}}]] // FullSimplify;
{px, py} = Function /@ (J[Transpose].{Hold[D[#, r]], Hold[D[#, [Theta]]]}) //
ReleaseHold

之後將原微分方程用px,py兩個算符表示,化簡即得

px[px[U[r, [Theta]]]] + py[py[U[r, [Theta]]]] // FullSimplify

這種做法對於任意坐標變換都是適用的,而且不局限於拉普拉斯算符


symbolic - Analogue for Maple"s dchange


推薦閱讀:

如何寫出易讀的 Mathematica 代碼?
怎樣用Mathematica解帶字母的方程組?
編寫過10萬行Mathematica代碼 (精簡後) 是種什麼樣的體驗?

TAG:WolframMathematica |