2014年12月1日月曜日

wxMaximaで2次元球面の計量テンソルを計算する

2次元球面のパラメータ付け

二次元球面S2 = { (x,y,z) | x2+y2+z2=r2 } (ただしrは定数)におけるパラメータ付けを
  • x = r sinθ cosφ
  • y = r sinθ sinφ
  • x = r cosθ
とする。これはwxMaximaでは

(%i1) x(\theta,\phi):=r*sin(\theta)*cos(\phi)$
(%i2) y(\theta,\phi):=r*sin(\theta)*sin(\phi)$
(%i3) z(\theta,\phi):=r*cos(\theta)$

とx,y,zを定義できる。


自然基底の作成

x,y,zをθで微分した結果をx1,y1,z1とすると

(%i4) define(x1(\theta,\phi),diff(x(\theta,\phi),\theta))$
(%i5) define(y1(\theta,\phi),diff(y(\theta,\phi),\theta))$
(%i6) define(z1(\theta,\phi),diff(z(\theta,\phi),\theta))$

同様にx,y,zをφで微分した結果x2,y2,z2は

(%i7) define(x2(\theta,\phi),diff(x(\theta,\phi),\phi))$
(%i8) define(y2(\theta,\phi),diff(y(\theta,\phi),\phi))$
(%i9) define(z2(\theta,\phi),diff(z(\theta,\phi),\phi))$

として定義する。
これらをベクトルとしてまとめることで、自然基底e1,e2を次のように定義する。

(%i10) e1(\theta,\phi):=[x1(\theta,\phi),y1(\theta,\phi),z1(\theta,\phi)]$
(%i11) e2(\theta,\phi):=[x2(\theta,\phi),y2(\theta,\phi),z2(\theta,\phi)]$


計量テンソルの計算

e1とe2をそれぞれ内積をとって、trigsimpで三角関数の式を簡単化する。

(%i12) E(\theta,\phi):=trigsimp(e1(\theta,\phi).e1(\theta,\phi))$
(%i13) F(\theta,\phi):=trigsimp(e1(\theta,\phi).e2(\theta,\phi))$
(%i14) G(\theta,\phi):=trigsimp(e2(\theta,\phi).e2(\theta,\phi))$

計量テンソルの計算ができた。ためしに、

(%i15) E(\theta,\phi);

などとすれば、Eの式を確認できる。


バッチファイルで一気に実行

次のような上で入力した式を記したwxMaximaのバッチファイルを用意する。ファイル名は2sphere.mac。

x(\theta,\phi):=r*sin(\theta)*cos(\phi)$
y(\theta,\phi):=r*sin(\theta)*sin(\phi)$
z(\theta,\phi):=r*cos(\theta)$
define(x1(\theta,\phi),diff(x(\theta,\phi),\theta))$
define(y1(\theta,\phi),diff(y(\theta,\phi),\theta))$
define(z1(\theta,\phi),diff(z(\theta,\phi),\theta))$
define(x2(\theta,\phi),diff(x(\theta,\phi),\phi))$
define(y2(\theta,\phi),diff(y(\theta,\phi),\phi))$
define(z2(\theta,\phi),diff(z(\theta,\phi),\phi))$
e1(\theta,\phi):=[x1(\theta,\phi),y1(\theta,\phi),z1(\theta,\phi)]$
e2(\theta,\phi):=[x2(\theta,\phi),y2(\theta,\phi),z2(\theta,\phi)]$
E(\theta,\phi):=trigsimp(e1(\theta,\phi).e1(\theta,\phi))$
F(\theta,\phi):=trigsimp(e1(\theta,\phi).e2(\theta,\phi))$
G(\theta,\phi):=trigsimp(e2(\theta,\phi).e2(\theta,\phi))$

「ファイル(F)」 > 「バッチファイル(B)」から、用意したバッチファイル(2sphere.mac)を選ぶ。

一気に実行されるので、その後参照したい式を入力する。下のスクリーンショットは%i16から%i18が手で入力した式。


次回はwxMaximaでガウス曲率の計算。

2014年11月2日日曜日

2次元球面のリーマン曲率テンソルなど

 空間の曲がり具合を表す量として曲率がある。ここではリーマン曲率テンソル、リッチテンソル、リッチスカラーを2次元球面について計算してみる。
  R3における2次元球面S2の定義とパラメータ付けをこの回と同じにする。パラメータの記号をu1 = θ、u2 = φとする。
以下でリーマン曲率テンソル、リッチテンソル、リッチスカラーの計算を行う。その際、前回計算した2次元球面におけるクリストッフェル記号の値を使う。添字にはアインシュタインの規約を適用するものとする。

リーマン曲率テンソルの計算

リーマン曲率テンソルは定義の仕方によって正負が異なるが、ここでは以下のように定義する。

これは、第3,4添字について交代なので

が成り立つ。そこで第1,2添字が(1,1),(1,2),(2,1),(2,2)の場合を計算する。
曲面の場合はリーマン曲率テンソルの独立成分は1つだが、後々の計算のため他の成分も求めてみる。
R1121については、


R1221については、


R2112については、


R2212については、


リッチテンソルの計算

リッチテンソルを次の式で定義する。これも他の本では正負の異なる定義をしているため注意が必要。


上で計算したリーマン曲率テンソルを使うと、R11,R12,R21,R22






これらを行列に配置すると


リッチスカラーの計算

リッチスカラーを次の式で定義する。


これを2次元球面で計算すると次のようになる。


2014年10月27日月曜日

2次元球面のクリストッフェル記号

R3における2次元球面S2の定義とパラメータ付けを前回と同じにする。パラメータの記号をu1 = θ、u2 = φとする。またS2の接平面をTS2とする。
以下でクリストッフェル記号の計算を行う。添字にはアインシュタインの規約を適用するものとする。

クリストッフェル記号の定義

この項目の流れは「テンソル解析(田代嘉宏著)」p.205を参考にしている。
点P(u1,u2) と点P'(u1+du1,u2+du2) における自然基底 { e1(P), e2(P) } と { e1(P'), e2(P') } は一般には異なるため、



とおく。このベクトル dTS2ej (ただし j = 1, 2) をPにおける自然基底で表す。



ここで、係数 ωij を duk により、



とおく。この係数 Γijk(iとjは対称) がクリストッフェル記号である。

クリストッフェル記号の計算

クリストッフェル記号と計量テンソル gij には、



の関係が成り立つ(「テンソル解析」p.205-206またはWikipedia「クリストッフェル記号」を参照)。これを使って2次元球面におけるクリストッフェル記号を計算する。
i = 1 とすると以下のように計算を進められる。このとき gij = 0 ( i ≠ j のとき) であることから、 l = i = 1 の項だけが残ることに気をつける。



これを行列表示して前回計算した gij を使うと、



となる。同様に i = 2 の場合についても計算すると、





以上で2次元球面におけるクリストッフェル記号を計算できた。

自然基底の微小変化

2次元球面のクリストッフェル記号が分かったため、それを使うと「クリストッフェル記号の定義」にある dTS2ej (ただし j = 1, 2) を以下のように計算することができる。





この dTS2e1 の結果から次のことが分かる。e1の変化は、θが0とπに近いときφの変化によってe2方向に大きい。
また、dTS2e2 の結果からは次のことが分かる。e2は、 θ = π/4, 3π/4 のときφの変化でe1方向にずれる。またθが0とπに近いときθの変化でe2方向に大きく変化する。

はリーマン曲率テンソル、リッチテンソル、リッチスカラーの2次元球面における計算を行ってみたい。

2014年10月18日土曜日

2次元球面のガウス曲率

数学には面の曲がり具合を表現するガウス曲率がある。この記事では2次元球面におけるガウス曲率を計算してみる。

2次元球面の定義

3次元ユークリッド空間R3の2次元球面S2
S2 = { (x,y,z) ∈ R3 | x2 + y2 + z2 = r2 }
で定義する(rは定数)。
このときベクトルr

としておく。さらにθ(0<θ<π)、φ(0<φ<2π)で
  • x = r sinθ cosφ
  • y = r sinθ sinφ
  • z = r cosθ
のようにパラメータ付けされているとする。

自然基底

ベクトルrをθとφで偏微分したものをそれぞれe1, e2とすると、自然基底{e1, e2}は

となる。

計量テンソル

計量テンソルgijを行列表示した[gij]は、

ここでE,F,Gを

とする。また[gij]は対角行列なので対角成分の逆数をとると、逆行列[gij]が

と計算できる。

第二基本形式の係数

自然基底{e1, e2}がなす平面に垂直なベクトルnを、

とする。ベクトルrの二回微分は、

となる。これらを用いて第二基本形式 II = L dθ2 + 2M dθdφ + N dφ2 の係数L,M,Nは、

と計算できる。

ガウス曲率

上で計算したE,F,G,L,M,Nによりガウス曲率Kは、

と計算できる。
球面の場合θとφによらない一定値になるようだ。

次は、2次元球面のクリストッフェル記号を計算してみる。
wxMaximaでのガウス曲率の計算もしてみた。

2014年2月21日金曜日

Linux Mint を CUPS プリンタサーバにする(その3)

 前回まででWindows7から印刷できるようになった。今回はiPad、Android、Ubuntuから印刷できるようにしたい。

5. Avahiのインストール

iPadからAirPrintで印刷できるように、Avahiをインストールしようと思ったが
$ service --status-all
をすると
avahi-daemon
が見つかり、私の環境では既にあったため特にインストールする必要がなかった。

もしなければ、
$ sudo apt-get install avahi-daemon
が必要かもしれない。

6. iPad(iOS6)からの印刷

iBooksを使って試しに印刷してみる。印刷したいファイルを開き、下図のようにタップして進める。


 ここでプリントを選択。プリンタを選ぶとプリンタサーバのDCP350Cがあるのでそれを選ぶ。「プリンタオプション」で「プリント」がタップできるようになったので、タップすると印刷ができた。


7. Androidからの印刷

※現在JfCupsPrintはGooglePlayにないようです。そのためこの項目は削除しました。(2015/09/26追記)

8. Ubuntu13.10(32bit)からの印刷

「プリンター」ウインドウを開く。

「追加」を選ぶ。

「新しいプリンター」ダイアログ(「デバイスを選択」)が開くので、「ネットワーク」から設定したプリンタサーバ(この例ではmyserver-System-Product-Name)を選び、「進む」をクリック。

「プリンターの説明」では「プリンター名」と「説明」には共に「DCP350C」を入力、「場所」は空欄にしたまま「適用」をクリック。

「テストページを印刷しますか?」では「テストページの印刷」を選択した。

「プリンターのプロパティ」で「OK」をクリックして終了。

 以上でプリンタサーバ(Linux Mint)を設定し、Windows、iPad、Android、Ubuntuから印刷することができた。

2014年2月20日木曜日

Linux Mint を CUPS プリンタサーバにする(その2)

 前回はLinuxをインストールして、PCから直接プリンタへ印刷するまでだった。今回はそのPCがプリンタサーバとして動くように設定する。また、Windows7(クライアント)から自宅のネットワークを介して、Linux PC(プリンタサーバ)に接続されているプリンタで印刷してみる。

3. プリンタサーバとしての設定

3.1. プリンタの共有設定

「設定」 > 「プリンタ」を選び「プリンター」ウインドウを表示する。「サーバー」 > 「設定...」で下図のように共有できるよう設定する。


さらに、「プロパティ」 > 「ポリシー」で共有するにチェックする。



3.2. 同一ネットワークからの印刷を許可する

$ sudo gedit /etc/cups/cupsd.conf
で以下の箇所に追記する(赤が追記箇所)。

<Location />
  # Allow shared printing...
  Order allow,deny
  Allow @LOCAL
  Allow 192.168.11.0/24
</Location>

cupsd.confの編集後、cupsを再起動する。
$ sudo /etc/init.d/cups restart

「設定」 > 「プリンター」でダイアログを開き、「サーバー」 > 「接続...」を選ぶ。
「CUPS サーバーに接続」ダイアログで、「CUPS サーバー:」を「/var/run/cups/cups.sock」を選ぶ。「接続」を押す。




これで他のPCから印刷ができるようになった。

参考:

4. Windows7からの印刷

いよいよ、クライアント側(Windows7)から印刷をしてみる。
「デバイスとプリンター」を開く。「プリンターの追加」を選ぶ。
「ネットワーク、ワイヤレスまたはBluetoothプリンターを追加します」を選ぶ。
「探しているプリンターはこの一覧にはありません」を選ぶ。
「共有プリンターを名前で選択する」に「http://192.168.11.11:631/printers/DCP350C」を入力。(この例は、プリンタサーバのIPアドレスが192.168.11.11の場合。)

「プリンターの追加ウィザード」では「製造元」に「Brother」を「プリンター」に「Brother DCP-350C Printer」を選ぶ。
必要に応じて、テストページを印刷する。

ここまででWindows7から印刷する環境ができた。
はiPad、Android、Ubuntuから印刷してみる。