井田 隆自作ソフトウェア/Igor マクロ

[ English Page is HERE. ]


Igor のマクロをプレーンテキストで提供しています。 コピー&ペーストで Igor のプロシージャウィンドウにコピーすればすぐに使えます。


1. 特殊関数

1-1 逆誤差補関数

erfci.txt

誤差補関数 y=erfc(x) の逆関数 x=erfci(y) を計算するマクロです。

1-2 Voigt 関数と Faddeeva 関数

VoigtPoppeWijers.txt

Poppe & Wijers のアルゴリズムを使って 「規格化された複素誤差補関数」(Faddeeva 関数):
wofz(z)=exp(-z*z)*erfc(-i*z)

(ここで i は虚数単位,erfc(x) は誤差補関数,変数 z は複素数で良い)
を計算し,これを利用して「ローレンツ型関数 (Lorentzian) とガウス型関数 (Gaussian) の畳み込み」(Voigt 関数) を計算するための Igor マクロです。

Voigt 関数
fVoigtPoppeWijers(x,GamL,GamG)

(ここで GamL, GamG はそれぞれ Lorentzian, Gaussian 関数の半値全幅)

Faddeeva 関数
wofz(z)

を使えます。

参考文献は [G.P.M.Poppe & C.M.J.Wijers, ACM Trans.Math.Software, 16, 38-46 (1990)] です。


2. 数値積分

2-1 Gauss-Legendre 積分

GaussLegendre.txt

任意の標本点数の Gauss-Legendre 積分の横軸と重みを生成するマクロです。

マクロ GauLegInit(n0) を実行すると,標本点 n0 までの横軸と重みデータの ウェーブ xGL[0..n0*(n0+1)/2-1], wGL[0..n0*(n0+1)/2-1] が生成されます。

標本点数 n (n <= n0) の数値積分について i 番目の要素を参照したい場合,
xGL[n*(n-1)/2+i-1], wGL[n*(n-1)/2+i-1]

として参照して下さい。

コンパイルに失敗した時は,コマンドラインから "make xGL, wGL" と入力するなどして, ダミーのウェーブを作ってみてください。

例えば,関数 f(x) の alpha から beta の範囲の積分値を求めたいとき,

ans = 0;

i = 0;

do

x = alpha + (beta-alpha) * xGL[n*(n-1)/2+i];

ans = ans + wGL[n*(n-1)/2+i] * f(x);

i = i + 1;

while (i < n);

ans = (beta - alpha) * ans;

とすれば, n-点 Gauss-Legendre 積分の結果が得られます。


2-1 Gauss-Hermite 積分

GaussHermite.txt

任意の標本点数の Gauss-Hermite 積分の横軸と重みを生成するマクロです。

マクロ GauHerInit(n0) を実行すると,標本点 n0 までの横軸と重みデータの ウェーブ xGH[0..n0*(n0+1)/2-1], wGH[0..n0*(n0+1)/2-1] が生成されます。


3. ユーティリティ

3-1 誤差表記

niceNum2Str.txt

数値と誤差値を入力して,有効な数字のみを括弧内の誤差つきで表現した文字列を生成する文字列型関数です。 (2007年9月21日改訂)

実行例を以下に示します。
Igor での記述結果
niceNum2Str(15345.5413,235.1543)15300(200)
niceNum2Str(15345.5413,134.1543)15350(130)
niceNum2Str(15345.5413,1.1543)15345.5(12)
niceNum2Str(15345.5413,0.0543)15345.54(5)
niceNum2Str(15345.5413,0.0143)15345.541(14)


2007年9月21日修正