pianofisica

Mathematics & Physics, Maxima, a bit Python & Wolfram, and Arts

Maximaでベクトル解析その2(勾配、回転、発散)

数学の具体的な計算にMaximaを使って、数学もMaximaも同時に学んでしまいましょう。今回はMaximaを使ってベクトル解析をしてみたいと思います。微分演算子  \nabla を使ったベクトルの演算を定義し、その公式をいくつかみてみます。また、それらの演算や公式の微分形式における意味について解説します。

Maximaのごく基本的な使い方については以下の記事を参照してください:

pianofisica.hatenablog.com

また、Maximaでベクトルの内積外積を入力する方法は

pianofisica.hatenablog.com

を参考にしてみてください。



勾配(gradient)

勾配ベクトル

 \displaystyle{{\rm grad}\ f=\vec{\nabla}f=\left(\begin{array}{c} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \\ \frac{\partial f}{\partial z} \end{array}\right)}

Maximaに入力するには

depends([f],[x,y,z])$
grad(f):=matrix([diff(f,x)],[diff(f,y)],[diff(f,z)])$

とします。たとえば  f(x,y,z)=(x^2+y^2+z^2)/2 の場合には

grad((x^2+y^2+z^2)/2);

により

 \displaystyle{{\rm grad}\left( \frac{x^2+y^2+z^2}{2}\right)=\left(\begin{array}{c}x \\ y \\ z \end{array}\right)}

と計算されます。

微分(exterior derivative)

ちなみに、勾配  {\rm grad}\ f というのは微分形式の言葉でいうと、

0-形式(関数)  f に外微分  d を作用させた

 \displaystyle{d\,f=\frac{\partial f}{\partial x}dx+\frac{\partial f}{\partial y}dy+\frac{\partial f}{\partial z}dz }

の各成分です。

微分形式の入門としては、東京大学出版会の『多様体の基礎』(松本)が読みやすくておすすめです:

方向微分

ベクトル解析ではあまり見かけませんが、関数  f をベクトル  \vec{V} の方向に偏微分した時の偏微分係数は

 \displaystyle{(\vec{V}\cdot\vec{\nabla})\ f=V_x\frac{\partial f}{\partial x} +V_y \frac{\partial f}{\partial y} +V_z \frac{\partial f}{\partial z} }

によって計算できます:

inn(a,b):=transpose(a).b$
depends([Vx,Vy,Vz],[x,y,z])$
V:matrix([Vx],[Vy],[Vz])$
dirder(V,f):=inn(V,grad(f))$

たとえば  f(x,y,z)=(x^2+y^2+z^2)/2 \vec{V}={}^t(1,1,0) 方向に偏微分すると

dirder(matrix([1],[1],[0]), (x^2+y^2+z^2)/2);

より、その偏微分係数は  x+y と求まります。

回転(rotation または curl

 \displaystyle{{\rm rot}\ \vec{V}=\vec{\nabla}\times \vec{V}=\left(\begin{array}{c} \frac{\partial V_z}{\partial y} -\frac{\partial V_y}{\partial z} \\  \frac{\partial V_x}{\partial z} -\frac{\partial V_z}{\partial x} \\  \frac{\partial V_y}{\partial x} -\frac{\partial V_x}{\partial y} \end{array}\right)}

rot(V):=matrix(
[diff(V[3][1],y)-diff(V[2][1],z)], 
[diff(V[1][1],z)-diff(V[3][1],x)], 
[diff(V[2][1],x)-diff(V[1][1],y)])$

たとえば  U={}^t(xz,zy,yx) と選ぶとその回転は

rot(matrix([x*z],[z*y],[y*x]));

により  {\rm rot}\ \vec{U}={}^t(x-y,x-y,0) と計算されます。

また別なベクトル場として  V={}^t(-y,x,0) の回転をとってみると

rot(matrix([-y],[x],[0]));

より  {\rm rot}\ \vec{V}={}^t(0,0,2) と求まります。

さらに、ベクトル場として  W={}^t(x,y,0) を選ぶと

rot(matrix([x],[y],[0]));

より  {\rm rot}\ \vec{W}={}^t(0,0,0) となります。

ちなみに、回転  {\rm rot}\vec{V} は、微分形式の言葉でいうと1-形式  V

 \displaystyle{V=V_x\,dx+V_y\,dy+V_z\,dz }

に外微分  d を作用させた

 \displaystyle{dV=dV_x\wedge dx+dV_y\wedge dy+dV_z\wedge dz \\\quad =\left(\frac{\partial V_x}{\partial x}dx+\frac{\partial V_x}{\partial y}dy+\frac{\partial V_x}{\partial z}\right)\wedge dx  \\\qquad+\left(\frac{\partial V_y}{\partial x}dx+\frac{\partial V_y}{\partial y}dy+\frac{\partial V_y}{\partial z}dz\right)\wedge dy+\left(\frac{\partial V_z}{\partial x}dx+\frac{\partial V_z}{\partial y}dy+\frac{\partial V_z}{\partial z}dz\right)\wedge dz \\\quad =\left(\frac{\partial V_z}{\partial y}-\frac{\partial V_y}{\partial z}\right)dy\wedge dz +\left(\frac{\partial V_x}{\partial z}-\frac{\partial V_z}{\partial x}\right)dz\wedge dx +\left(\frac{\partial V_y}{\partial x}-\frac{\partial V_x}{\partial y}\right)dx\wedge dy }

の各成分です。ここで  \wedge はウェッジ積というもので

ウェッジ積(wedge product)

 dx^i\wedge dx^j=-dx^j \wedge dx^i

という性質をもった反対称な積です。高次の積についても同様に

 dx^i\wedge dx^j\wedge dx^k=-dx^j \wedge dx^i\wedge dx^k=-dx^i\wedge dx^k\wedge dx^j

などです。また、積は線型性

 \alpha \wedge (c_1 \beta_1+c_2 \beta_2)=c_1\alpha\wedge\beta_1+c_2\alpha\wedge\beta_2

をみたすものと定義します。ここで  c_1 c_2 は0-形式(関数または定数)とします。

発散(divergence)

 \displaystyle{{\rm div} \vec{V}=\vec{\nabla}\cdot\vec{V}=\frac{\partial V_x}{\partial x} + \frac{\partial V_y}{\partial y} + \frac{\partial V_z}{\partial z} }

div(V):=diff(V[1][1],x)+diff(V[2][1],y)+diff(V[3][1],z)$

たとえば  V={}^t(x-y,x-y,0) を選ぶと、その発散は

div(matrix([x-y],[x-y],[0]));

より  {\rm div}\ \vec{V}=0 と計算されます。

発散  {\rm div}\vec{V} は、微分形式の言葉でいうと2-形式  V

 \displaystyle{V=V_x\,dy\wedge dz +V_y\,dz \wedge dx +V_z\,dx\wedge dy }

に外微分  d を作用させた

 \displaystyle{dV=dV_x\wedge dy\wedge dz +dV_y\wedge dz \wedge dx +dV_z\wedge dx\wedge dy \\\quad = \left(\frac{\partial V_x}{\partial x} + \frac{\partial V_y}{\partial y} + \frac{\partial V_z}{\partial z}\right) dx\wedge dy\wedge dz}

の成分です。

ラプラシアン(Laplacian)

 \displaystyle{\triangle\ f={\rm div}\ ({\rm grad}\ f)=\vec{\nabla}\cdot\vec{\nabla}\ f=\frac{\partial^2 f}{\partial x^2} + \frac{\partial^2 f}{\partial y^2} + \frac{\partial^2 f}{\partial z^2} }

Lap(f):=div(grad(f))$

この演算子をここまでに見てきた微分形式の言葉でいうと、

まず、 {\rm grad}\ f というのは、0-形式  f に外微分をしたものです。

ここではそのあと発散をとっているわけですが、0-形式の外微分は1-形式なので、

2-形式の外微分として表される発散の演算はできません。

そこでホッジ作用素  * という演算が導入されて、それは

ホッジ作用素(Hodge star operator)

 *1=dx\wedge dy\wedge dz \\ * dx=dy\wedge dz \quad * dy=dz\wedge dx \quad * dz=dx\wedge dy\\ * dy\wedge dz =dx \quad *dz\wedge d=dy \quad *dx\wedge dy=dz \\ * dx\wedge dy\wedge dz =1

と定義し、それを線形に拡張して定義されます。これにより1-形式の

 \displaystyle{d\,f=\frac{\partial f}{\partial x}dx+\frac{\partial f}{\partial y}dy+\frac{\partial f}{\partial z}dz }

はホッジ作用素により

 \displaystyle{* d\,f=\frac{\partial f}{\partial x}dy\wedge dz+\frac{\partial f}{\partial y}dz\wedge dx+\frac{\partial f}{\partial z}dx\wedge dy}

という2-形式になります。ここで外微分をとると

 \displaystyle{d* d\,f=\left(\frac{\partial^2 f}{\partial x^2}+\frac{\partial^2 f}{\partial y^2}+\frac{\partial^2 f}{\partial z^2}\right)dx\wedge dy\wedge dz}

より、その成分は確かにラプラシアンになっていることがわかります。

最後に0-形式に戻すために、もう一度ホッジ作用素を作用させて

 \displaystyle{*d* d\,f=\frac{\partial^2 f}{\partial x^2}+\frac{\partial^2 f}{\partial y^2}+\frac{\partial^2 f}{\partial z^2}}

を得ます。逆にいうと、微分形式の言葉で0-形式上のラプラシアン *d*d で定義されます。

さらに、ホッジ作用素を使うと、2-形式

 \displaystyle{V_2=V_x\,dy\wedge dz +V_y\,dz \wedge dx +V_z\,dx\wedge dy }

は1-形式

 \displaystyle{V_1=V_x\,dx+V_y\,dy+V_z\,dz }

のホッジ双対: V_2=*\,V_1 であることがわかります。

ちなみに、極座標ラプラシアンを表す方法を紹介しているのが次の記事です:

pianofisica.hatenablog.com



ベクトル解析の公式

裳華房の『解析学解論』(矢野・石原)は、ベクトル解析(だけでなく、常微分方程式複素解析フーリエ解析)のエッセンスが要領よくまとめられ、豊富な練習問題が載っていて、理工系学部生におすすめです:

手計算でテキストをフォローできるようになることも必要ですが、Maximaを使って問題を解いてみるのも、Maximaの使い方の練習問題としても有用です。


上で導入したベクトルの演算に対して以下の公式が成り立ちます:

その1

 \displaystyle{{\rm rot}({\rm grad}\ f)=\vec{\nabla}\times(\vec{\nabla} f)=0 }

rot(grad(f));

この公式は、微分形式の言葉でいえば0-形式  f に外微分  d を2回続けて作用させると

恒等的にゼロであるということを表しています:

 d^2\ f=0

その2

 \displaystyle{{\rm div}({\rm rot} \vec{V})=\vec{\nabla}\cdot(\vec{\nabla} \times \vec{V})=0 }

div(rot(V));

この公式を微分形式の言葉でいいかえると1-形式  V

 \displaystyle{V=V_x\,dx+V_y\,dy+V_z\,dz }

に外微分  d を2回続けて作用させると恒等的にゼロであることを示しています:

 d^2\ V=0

その3

 \displaystyle{{\rm rot}({\rm rot} \vec{V})={\rm grad}({\rm div}\vec{V})-\triangle \vec{V} }

rot(rot(V))-grad(div(V))+Lap(V);

この公式を少し整理した

 \displaystyle{{\rm grad}({\rm div}\vec{V})-{\rm rot}({\rm rot} \vec{V})=\triangle \vec{V} }

ですが、これは微分形式の言葉でいうと2-形式

 \displaystyle{V=V_x\,dy\wedge dz +V_y\,dz \wedge dx +V_z\,dx\wedge dy }

ラプラシアンの定義そのものです:

 *\,d*d-d*d*=\triangle

ここで  k-形式に作用する余微分作用素

微分作用素(codifferential)

 \delta=(-1)^k*d*

を導入すると、  k-形式のラプラシアンが一般に

 d\delta+\delta d=\pm\triangle

 \pmは定義の揺れによります)と定義されます。

その4

 \displaystyle{{\rm rot} (\ f\vec{V})=f{\rm rot}\vec{V} + ({\rm grad}\ f)\times \vec{V} }

ext(a,b):=matrix(
[a[2][1]*b[3][1]-a[3][1]*b[2][1]],
[a[3][1]*b[1][1]-a[1][1]*b[3][1]],
[a[1][1]*b[2][1]-a[2][1]*b[1][1]])$
expand(rot(f*V)-f*rot(V)-ext(grad(f),V));
その5

 \displaystyle{{\rm div} (\ f\vec{V})=f{\rm div}\vec{V} + ({\rm grad}\ f)\cdot \vec{V} }

expand(div(f*V)-f*div(V)-inn(grad(f),V));

公式その4、その5はいずれも外微分Leibniz

 d(\, f \alpha)=f d\alpha+df\wedge \alpha

を表しています。


キーワードMaxima、ベクトル解析、微分形式