2008年2月19日火曜日

Mathematica使ってみた

研究室の計算鯖が落ちたので、一週間前と、2日前からしてた2つの計算がお亡くなりになった。やる気下がるわ。
とりあえず、学会に向けて、グリーン関数の数値計算のほうを再度走らせる。普通にUの摂動展開を使って自己エネルギーを求める場合、どうしても多重数値積分と主値積分が必要になってくるんだが、この2つが厄介者である。超単純に、区分求積みたいなのしてるがこれでいいんかい度Maxである。数値積分のやり方をいちいち勉強してらんないので、Mathematica使ってみることにした。運営交付金からライセンス料はらってもらってるんで年度内に一度は使わないと怒られそうだ。

Mathematicaも厄介だった。まずはMathematicaにバッチ処理させる方法を調べる。
明らかに直訳な、本家サイトを漁った結果、「mathはスタンドアロンのカーネルを実行する」という文があった。はぁ?攻殻とケンタッキーしか思い浮かばん文章だな。日本語で(ry。まぁとりあえず

math< 実行文を書いといたテキストファイル

ってやっとくとファイルの中身を読み込んで実行してくれるぽい。
実行文の例

kb=861734231*10^-13
T=4
beta=1/kb/T
fermi[x_] = 1/(1+Exp[beta*x])
outfermi=OpenWrite["fermi.txt"]
For[i=-100,i<100,i++,Write[outfermi,FortranForm[N[fermi[i*0.1],10]]]]
Close[outfermi]
Quit

ちなみにこれはフェルミ分布関数を計算させてみた。
とりあえず分かった超基本事項のメモ

変数の代入はkb=・・・みたく変数名=数値でよい
関数の定義は fermi[x_]=・・・のように関数名[変数名_]=関数の式
結果の出力は
ストリーム名=OpenWrite["ファイル名"]
Write[ストリーム名,出力データ]
Close[ストリーム名]
終了は
Quit
コメントアウトは(*・・・*)
1/2みたいに小数点がない形式で書くと、厳密な数として扱われる
小数点がある形式にすると、近似した実数とみなされ、それが入った関数の処理は機械精度で行われる
ループ、条件分岐etcもつかえる
N[数値,桁数]で内部の数値をその桁数の値に変換してくれる

で、本題の積分もさせてみたんだが、特異点のある関数に対する積分なんで収束しにくいとかいうエラーメッセージでるわ、明らかに傾向が変だわで私の腕ではMathematicaでこれを計算させるのは無理な悪寒。知識が十分ありゃMathematicaは最強のツールになるんだろうがねぇ。しかも、今のライセンスでは、分散ノードから使えないぽいから、時間かかる計算できないやーんってオチ。

1 コメント:

匿名 さんのコメント...

http://209.85.175.104/search?q=cache:_2XX0l1NtQAJ:library.wolfram.com/infocenter/Books/3232/+Green%27s+Function+mathematica+nb&hl=ja&ct=clnk&cd=4&gl=jp