「Maxima」を活用して数学の学習ロードを駆け抜けよう!
(注) MathJaxを使用しているので、 スマホでは表示に時間がかかることがあります。
モバイル利用(Android)でのメニュー選択は、 SiteMapを利用するか、 「長押し」から「新しいタブを開く」を選択してください。
■ 数式処理ソフト「Maxima」を活用した数学学習 [Map] |
| ||||
| ||||
[御案内] 「Maxima」(マキシマ)は,フリーの数式処理ソフトです. 有料の Mathematica や Maple に劣らないレベルの数式処理が可能であり, Linux,Windows,MacOSのみならず,Android版もあります. ここでは,数学学習での Maxima の活用法について解説します. | ||||
[お知らせ] スマホ(Android)版Maximaの解説本を出版しました. 計算問題やグラフの確認をするときに非常に重宝します. フリーソフトなので一度試してみてください. PC版のコマンドレファランスとしても利用できます。
| ||||
|
■数学学習での活用 |
|
いろいろな関数 |
|
■球面調和関数 掲示板[No.5]で球面調和関数について質問があったので調べてみました. 名前を聞いたことがある程度でしたが, 電子の動きの解析,CGにおけるライティング, あるいは気象シミュレーションや信号処理などに現れる関数です. 球面上の関数は,この関数を基底としてフーリエ級数のような 級数展開ができるようです. 以下ではシュレディンガー方程式で解説しましたが, 要するに,ラプラシアン \(\small \Delta (\nabla^2)\) を含む方程式 を球座標 \(\small (r, \theta, \phi)\) で考えたときに, 角度成分\(\small (\theta, \phi)\) の満たす関数が球面調和関数です. この関数は球面上の関数に対して完全正規直交系をなしており, 球面上の任意の関数を球面調和関数を用いて級数展開することができます. ラプラシアンは物理・工学では頻出するので, そのことからも球面調和関数の重要性が分かります. 天文学,地球物理学,CGや音響に関わる分野など多くの分野で利用されています. あらゆる方向からの角度 \(\small (\theta,\phi)\) に関する情報を 球面調和関数を利用して展開することで, 膨大な情報を幾つかの係数値に圧縮できるようです. その圧縮効果から,物体の形状表現等, ラプラシアンと関わりのない分野でも利用されています(参照). 球面調和関数の概要について発表したので,参考にしてください.
【注】このページでは,球座標の他に,下記の認識は得ていることが前提となります.
|
シュレディンガー方程式 電子が原子核の回りでどのような波を作っているかを考えると, それはシュレディンガー方程式 \[\small \begin{align*} -\frac{\hbar^2}{2m} \left(\frac{\partial^2}{\partial x^2}\right. &+\left.\frac{\partial^2}{\partial y^2}+\frac{\partial^2}{\partial z^2}\right) \psi\\ &+V\psi=E\psi \end{align*}\] を満たします. \(\small \hbar\) は換算プランク定数(ディラック定数)です. この解 \(\small \psi\) は波動関数であり, \(\small |\psi|^2\)は電子の存在確率を表す確率密度関数であるようです. 方程式の左辺にはラプラシアンが含まれています.この方程式を, 球座標 \(\small (r, \theta, \phi)\) を利用して変形します. そして,解 \(\small \psi\) を \[\begin{align*}\small \psi(r,\theta,\phi) &\small =R(r)Y(\theta,\phi)\end{align*}\] と変数分離すると,定数 \(\small \lambda\) に対して, \(\small R(r)\) は下記の「3.」の方程式を満たします. それに対して \(\small Y(\theta,\phi)\) は,次のような方程式を満たします. \begin{align*} \small \left\{\frac1{\sin\theta}\frac{\partial}{\partial \theta}\right. &\small \left(\sin\theta\frac{\partial}{\partial \theta}\right)\\ &\small \left.+\frac1{\sin^2\theta}\frac{\partial^2}{\partial \phi^2}\right\} Y(\theta,\phi)\\ &\small =-\lambda Y(\theta,\phi) \end{align*} \(\small V, E\) を含む項は \(\small R(r)\) が満たす方程式に含まれるので, \(\small Y(\theta,\phi)\) は, 要するにラプラシアンの角度成分に関する固有関数になっています. この関数 \(\small Y(\theta,\phi)\) が球面調和関数です. これをさらに \(\small Y(\theta,\phi)=\Theta(\theta)\Phi(\phi)\) と変数分離して求めると, 下記の「2, 3」では凄まじいとしか言いようのない計算の結果, 最終的には次のようになるようです(参照1, 参照2, 参照3).
|
|
球面調和関数 シュレディンガー方程式のようなラプラシアンを含む方程式の解で, 角度依存性に関する \(\small (\theta, \phi)\) の関わる部分, つまり前述の解で 1, 2 の積で定義される \(\small Y_l^m(\theta,\phi)=\Theta_l^m(\theta)\Phi_m(\phi)\) が球面調和関数です.再掲すると,次の式で表されます. \[ \begin{align*} \small Y_l^m(\theta,\phi) =&\small \sqrt{\small \frac{2l+1}{4\pi}\frac{(l-m)!}{(l+m)!}}\\ &\small \times P_l^{m}(\cos\theta)e^{im\phi} \end{align*} \] この関数は,前述のルジャンドル培関数の \(\small P_l^{-m}(\theta)\) に関する性質を利用すると, \[ \begin{align*} \small Y_l^{-m}(\theta,\phi) =(-1)^m&\small \sqrt{\frac{2l+1}{4\pi}\frac{(l-m)!}{(l+m)!}}\\ &\small \times P_l^{m}(\cos\theta)e^{-im\phi} \end{align*} \] となり,符号が微妙に異なります.そこで, \(\small m\)の符号部分を統一的に表すため, 球面調和関数を次のような式で定義することにします. \[\begin{align*} \small Y_l^m(\theta,\phi) &\small =(-1)^{\frac{m+|m|}{2}}\\ &\small \times \sqrt{\frac{2l+1}{4\pi}\frac{(l-|m|)!}{(l+|m|)!}}\\ &\small \times P_l^{|m|}(\cos\theta)e^{im\phi} \end{align*} \] 式の形から,\(\small (-1)^{\frac{m+|m|}{2}}\) は, \(\small m\le 0\) のときは \(\small 1\), \(\small m>0\) のときは \(\small (-1)^m\) です. \(\small e^{im\phi}=\cos\phi+i\sin\phi\) を含むので,これは複素関数です. ただし,\(\small |m|\leq l\) である必要があります.この関数は, 電子の動きを考える必要のある量子力学・量子化学や電磁気学にとどまらず, ラプラシアンを含む方程式の解に現れる重要な関数です. 空間におけるいろいろな現象や形状を扱う場合にも必要とされ, 地球物理学,天文学,3次元CAD,3次元CG, 臓器形状、音響等に関する分野でも必須の関数になっているようです[参照]. 要するに,経度方向 \(\small \phi\) については通常のフーリエ級数で, 緯度方向 \(\small \theta\) についてはルジャンドル培関数で展開していることに なります.この関数について,Maximの機能を利用して考えてみましょう. \(\small \theta\) は \(\small z\) 軸からの角であり, \(\small \phi\) は \(\small xy\) 平面における \(\small x\) 軸からの角です (下図では\(\small \varphi\)).
|
|
球面調和関数の絶対値のグラフ 複雑な式で定義される球面調和関数は, 具体的にはどのような式になるのでしょうか. 具体的な \(\small l, m\) に対して式を求めて グラフを調べてみましょう. 下記は \(\small Y_0^0\) の場合です. これは,原点からの距離 \(\small r\) が 角 \(\small \theta, \phi\) の値によらず一定ということなので, 原点を中心とする球です(図は略). \(\small Y_1^0\) の場合は次のようになります. そのままでは定義式に含まれる微分の計算が行われませんが, 「nouns」をつけることで,計算が実行されます. 次に,この関数のグラフを描画してみましょう. 最初に,計算結果を \(\small f(\theta,\phi)\) として定義して, その関数の球座標によるグラフを描画させます. 「%」は,直前の式である(%o6)のことです. Maximaでは,極方程式 \(\small r=f(\theta, \phi)\) のままでグラフ描画が可能です. オプション変数の「transform_xy」に「spherical_to_xyz」を指定することで, 球座標を直交座標に変換して描画することができます. 「same_xyz」は3つの座標軸の間隔を同じにとり, 「grid」では刻み幅を指定しています. (%i8)の末尾を「;」にすると, グラフ画面を閉じたときグラフの情報が保存されます. 単にグラフを確認するだけの場合は「$」として保存されないようにします. 平面の極座標で \(\small r=\cos\theta\) のグラフは, 中心が \(\small (\frac12,0)\) で,原点で \(\small y\) 軸に接する円ですが, 球座標では \(\small \theta \) が \(\small z\) 軸の正の側からの角なので, 任意の \(\small \phi\) で中心が \(\small (0,0,\frac12)\) で原点で \(\small xy\) 平面に接する円になります. 要するに,その点を中心として \(\small xy\) 平面に接する球です. しかしながら,「球面調和関数のグラフ」として表示されるグラフは, \(\small z\leq 0\) の側にも原点で接する球があります. 球面調和関数 \(\small Y_l^m(\theta,\phi)\) は基本的には複素関数なので, そのままでは3次元グラフとして表示することはできません.上記の2つの場合は 虚部が含まれないので, そのままの式でもグラフを表示できていますが, \(\small \frac{\pi}{2}\le \theta\le \pi\) では \(\small \cos\theta\le 0\) であるので,その部分のグラフは表示されません. そこで,絶対値を取った関数のグラフを考えます. 絶対値をとった関数を媒介変数表示により \(\small x=r\sin\theta\cos\phi, y=r\sin\theta\sin\phi, z=r\cos\theta\) としてグラフ表示すると下図のようになります.ただし,Maximaでは, 空間での媒介変数は \(\small u,v\) を使用する必要があります. この場合の \(\small r\) は \(\small |f(u,v)|\) になります. (注1) Maximaでは球座標のグラフを描画できるので, 実際には媒介変数に直す必要はありません(参照). (注2) 球面調和関数は,グラフ描画ソフト「gnuplot」で扱うことも可能です. 具体的な式を入力すれば描画できるのは当然ですが, ルジャンドル培関数 \(\small P_l^m(x)\) を用いた式で定義することもできます. (参照). |
|
掲示板[No.5]で質問があったのは,
\[\small R_{2,1}(r)\left\{\frac1{\sqrt{2}}\left(Y_1^{1}(\theta,\phi)+
Y_1^{-1}(\theta,\phi)\right)\right\}\]
であるので,括弧内の関数について同様のグラフを考えてみましょう.
下図のように,球が横並びに接するグラフになるようです.
他の場合も同様にして,
球面調和関数の絶対値のグラフを描画することができます.
下図は,球面調和関数のグラフとして例示されることが多い
\(\small Y_2^0(\theta,\phi)\) の絶対値のグラフです.
「%」は直前の結果である(%o17)を表します. このようにして,球面調和関数の絶対値のグラフを描くことはできますが, それはラプラシアンを含む方程式の解の角度依存性の部分を取り出して, その複素関数の絶対値を取って表示しているだけです. 解 \(\small \psi(r,\theta,\phi)\) の意味を正しく把握するには, その方程式に関する専門知識が必要になります. |
|
極方程式のグラフ Maximaでは球座標でのグラフを描画できるので, 何も媒介変数に直す必要はありません(参照). 極方程式のままでグラフを描画できれば, [eq1,eq2,eq3]への置き換えの手間を省くことができます. たとえば,\(\small Y_2^0\) の場合は次のようになります. (%i30)の「trigsimp」は,三角関数を含む式を簡約化するコマンドです. 絶対値を取った関数を \(\small g(\theta,\phi)\) に置きかえていますが, この置き換えを省略して plot3dの関数部分を「abs(f(theta,phi))」とすることもできます. 図は前述の画面と同じなので省略します. グラフが面白いのでいろいろ試してみました. 以下に,グラフだけ紹介します. \(\small |Y_2^1+Y_2^{-1}|\) \(\small |Y_3^0|\) \(\small |Y_3^2+Y_3^{-2}|\) \(\small |Y_4^0|\) \(\small |Y_5^4|\) |
|
球面調和関数の実部のグラフ 複素関数である球面調和関数を可視化するとき, 「どの部分を視たいのか」という関心事により, 絶対値ではなく実部(realpart)や虚部(imagpart), あるいは絶対値の2乗をとる場合もあります (シュレディンガー方程式の解で \(\small |\psi|^2\) は確率密度関数に なるようです). そのため,同じ \(\small Y_l^m\) でもグラフが異なる場合があります. 下図は,\(\small Y_5^4\) の実部を取った場合です. 前述の絶対値 \(\small |Y_5^4|\) のグラフとは全く異なります. 下図は \(\small Y_3^0\) の実部です. \(\small Y_3^0<0\) の部分は描画されません. |
|
球面調和関数の性質 球面調和関数は,フーリエ級数の基底としての三角関数と同様の性質を持ち, 球面上の関数に対する完全正規直交性を持っています. そのため,球面上の関数を球面調和関数を用いて級数展開することができるので, 応用上は極めて重要です. 数学の専門分野のみならず,気象シミュレーション, CGにおけるライティング(光源からの反射や陰の計算), あるいは音響の分野など,多数の分野で利用されています (参照). 以下に主な性質のみを紹介します. 数学的な詳細解説は, リンク集の関連サイトを参照してください(参照). ここでは,\(\small Y_l^m\) を \(\small Y_{lm}\) と表すことにします.
|
実球面調和関数 球面調和関数は \(\small e^{im\phi}\) を含むので, \(\small e^{-im\phi}\) と組み合わせると虚数単位を含まない形で 表すことができます. それは,要するに \(\small Y_l^m(\theta,\phi)\) の実部と虚部を 取ったものです.以下では,\(\small m>0 \) とし, \(\small y_l^0=Y_l^0\) とします. \[\begin{align*} \small y_l^m &\small =\dfrac{(-1)^mY_l^m+Y_l^{-m}}{\sqrt{2}}\\ &\small =\sqrt{2}{\rm Re}\,((-1)^mY_l^m)\\ &\small =\sqrt{2}K_l^mP_l^m(\cos\theta)\cos{m\phi}\\ \small y_l^{-m} &\small =\dfrac{(-1)^{m}Y_l^{m}-Y_l^{-m}}{\sqrt{2}i}\\ &\small =\sqrt{2}{\rm Im}\,((-1)^{m}Y_l^{m})\\ &\small =\sqrt{2}K_l^{m}P_l^{m}(\cos\theta)\sin(m\phi) \end{align*}\] ここで,\(\small P_l^0(\cos\theta)\), \(\small P_l^m(\cos\theta)\cos{m\phi}\), \(\small P_l^m(\cos\theta)\sin{m\phi}\) の直交性から, 球面上の関数 \(\small f(\theta,\phi)\) は次のような形に展開することもできます. 展開の形はそれぞれの専門分野で異なり, 物理・工学系は \(\small e^{im\phi}\) を含む形で, 地球物理学などでは下記の形で考える場合が多いようです. \[\begin{align*} \small f(\theta,\phi)=\sum_{l=0}^{\infty}\sum_{m=0}^{l} &\small (a_{lm}\cos{m\phi}\\ &\small +b_{lm}\sin{m\phi})P_l^m(\cos\theta) \end{align*}\] ここで,係数 \(\small a_{lm}, b_{lm}\) は次の式で表されます. ただし,\(\small a_{l0}\) の分母は \(\small 2\pi\) を \(\small 4\pi\) で置き換えるものとします. \[\begin{align*} \small a_{lm}=\dfrac{2l+1}{2\pi} &\small \dfrac{(l-m)!}{(l+m)!}\int_{0}^{2\pi}\!\int_{0}^{\pi} f(\theta,\phi)\\ &\small \times P_l^m(\cos\theta)\cos{m\phi}\sin\theta\,d\theta\,d\phi\\ \small b_{lm}=\dfrac{2l+1}{2\pi} &\small \dfrac{(l-m)!}{(l+m)!}\int_{0}^{2\pi}\!\int_{0}^{\pi} f(\theta,\phi)\\ &\small \times P_l^m(\cos\theta)\sin{m\phi}\sin\theta\,d\theta\,d\phi \end{align*}\] 下図は,実球面調和関数の絶対値 \(\small |y_l^m|\) のグラフです. \(\small l\) が増えるごとに突起の数が増えていき, \(\small m\) の値が異なるごとに突起の方向が変わっていきます. 右上の小さい球は,球面上の濃淡で表した場合です. 複雑な物体やいろいろな方向からくる情報は, それを球面調和関数で展開することで, いろいろな方向の突起を足し合わせることで 表現することができるようです. |
下図は,Maximaによる実球面調和関数 \(\small |y_5^m|~(m\ge 0)\) のグラフです.
この実球面調和関数のグラフを描画するアプリ (exeファイル)があります.このアプリを利用すると,たとえば \(\small |y_8^4|\) のグラフは次のように表示されます.
|
|
Maximaのパッケージ この球面調和関数に関する解説の大部分を書き終えてから, Maximaにはこの関数が定義されているパッケージがあることを 下記のサイトで気づきました. 球面調和関数は,直交多項式のパッケージ「77. orthopoly」に含まれています. さらに,そのパッケージを新たに読み込まなくても, 関数名のコマンドである「spherical_harmonic」が入力されると, そのパッケージが自動的に読み込まれるようです. 前項で述べたように, 球面調和関数は直交関数と呼ばれる関数群に属します. パッケージ「orthpoly」には,そのような関数が多数登録されており, ラゲール多項式,ルジャンドル多項式,ハーミット多項式なども含まれています. 上記サイトでは極座標から直交座標への変換例も紹介されているので, このサイトにしたがい実際にやってみましょう. ここまで定義してきた \(\small Y_3^3\) では, (%o1)で表示される式に「\(\small -\)」が付いています. 他のサイトで示されている式も「\(\small -\)」が付いているので, おそらくMaximaで定義されている関数は, \(\small Y_l^m\) の定義式の符号部分 \(\small (-1)^{\frac{m+|m|}{2}}\) が省略されているのではないかと思われます. (%i2)で実部を取り出し,(%i3)では \(\small \sin^3\theta\) を 3倍角の公式を利用して展開しています. (%i4)のコマンド「ratsubst(A,B,C)」は, 「Cの式でBの部分をAで置きかえる」というコマンドです. 球座標と直交座標の間では \(\small z=r\cos\theta\) であるので, \(\small \theta={\rm acos}\,(z)(=\cos^{-1}(z))\) と置き替えたことは, \(\small r=1\) が仮定されていると思われます. なお,(%o4)の右側を省略しています.(%i5)にある「atan2(y,x)」は逆正接関数です. \(\small \tan\phi=\frac{y}{x}\) であるので,「ratsubst」により \(\small \phi\) を \(\small \tan^{-1}(y/x)\) で置きかえようとする ものです.ただし, 「atan(y/x)」は \(\small -\frac{\pi}{2}\sim\frac{\pi}{2}\) の範囲での値を求めるので, \(\small x\lt 0\) の場合はうまくいきません. そのような場合にも対応できるように, 「atan2(y,x)」は \(\small -\pi\sim\pi\) までの間で \(\small \tan^{-1}(y/x)\) の値を求めるコマンドです. (%i6)では,\(\small x^2+y^2\) を \(\small 1-z^2\) で置きかえているので, \(\small x^2+y^2+z^2=1\) という条件の下で考えていると思われます. 単なる置き換えではなく,式の簡約化も同時に行われます. ★ \(\small r=1\) で考えると,球面調和関数は \(\small x,y,z\) の多項式で書き表すことができるようです. 直交座標でラプラスの方程式 \(\small \Delta \psi=0\) を満たす 多項式で,\(\small \psi(kx,ky,kz)=k^n\psi(x,y,z)\) を満たすような 関数が球面調和関数であるようです. (参照). |
|
リンク集:球面調和関数 この項目を記述するにあたっては,下記のサイトを参照させていただきました. [1] 球面調和関数の可視化
[2] 球面調和関数の解説 □要点解説
□詳細解説
□多項式表現での解説
|
|
[3] シュレディンガー方程式の解法
[4] プログラム
|
|
[5] 球面調和関数の応用例 □CGでの利用
□他の分野での利用
[6] 直交関数系と直交多項式 □直交関数系 □直交多項式
|
|