大野 豊、磯田 和男 監修:数値計算ハンドブック |
作成日:2012-12-02 最終更新日: |
アルゴリズムを FORTRAN で記述している。 特に偏微分方程式の各種スキームが詳しい。 目次は次の通り。
今となっては古めかしいところも多いだろう。 それも致し方ない。数値計算の分野は日進月歩だからだ。 それでも、ここに書かれていることを基本として理解しておくのは悪くはないだろう。
一つだけ、数値積分について記述する。台形則の考え方である。 まず、x = a から x = b までの f(x) の定積分の値を、端点のみで近似したとする。 h = b - a とすると、次のようになる。
`int_a^bf(x)dx=h/2{f(a)+f(b)}`
次に、近似をよくするために`h_1 = h / 2` としよう。`x_0 = a, x_1 = a + h, x_2 = b`とすると
`int_a^bf(x)dx=h_1/2{f(a)+f(a+h_1)}+h_1/2{f(a+h_1)+f(b)}`
この考え方を進めて、区間`[a, b]`を`n`等分しよう。
`h = (b-a)/n` ここで `( a=x_0 < x_1 < ... < x_(n-1) < x_n = b )`
各区間 `[x_0, x_1], [x_1, x_2], ......, [x_(n-1), x_n]` の各台形の面積の和は次の式であたえられる。
`int_a^bf(x)dx=h/2[sum_(i=1)^n{f(x_(i-1))+f(x_i)}]`
無限区間`(-oo, +oo)` において解析的である場合には, 等間隔に刻み幅 `h` をとった上記台形則が、精度においてほとんど例外なく最良の結果を与えることが知られている。
上記の結果から、一般区間 `(a, b)` を無限区間`(-oo, +oo)` に変換するような変数変換をすれば、 高精度な積分公式となることが期待される。仮に、そのような変数変換が存在したとする。 すなわち、`x = tau(t)` と変数変換をする。このときf(x)の定積分は次のように変換される。
`int_a^bf(x)dx = int_-oo^(+oo)f{tau(t)}tau'(t)dt`
右辺に刻み幅 `h` の台形則を適用すると、次の公式が得られる。
`int_-oo^(+oo)f{tau(t)}tau'(t)dt = h sum_(i=-oo)^(+oo)f{tau(ih)}tau'(ih)`
右辺は無限和になっているが、`|f{tau(t)}tau(t)|`が`|t|`の増大とともに減少するようにとれば、 実際の計算は有限和ですむ。したがって、n を分点数とすれば、次の近似式が得られる。
`int_-oo^(+oo)f{tau(t)}tau'(t)dt = h sum_(i=-m')^(+m)f{tau(ih)}tau'(ih)`
` (n = |-m'| + |+m | + 1)`
さて、関数`tau(t)`はどのようにとればいいのだろうか。 高橋秀俊と森正武は、変数変換後の被積分関数が次のような場合に最適な公式になることを見出した。 `|f{tau(t)}tau'(t)| ~= exp{-a_1 exp(a_2 |t| ) } (|t| -> oo)`
ここで、`a_1, a_2` はある定数である。このように、被積分関数の形が、 指数関数が二重に適用されていることから、二重指数関数型公式と呼ばれている。
具体的な例として、
`x = tau(t) = tanh{pi/2sinh(t)}`
`tau(t) = cosh(t)/(cosh^2 {pi/2sinh(t)})`
を選択できる。こうすると積分は次のようになる。
| `int_a^b f(x)dx` | `=(b-a)/2 int_-1^(+1) f((b-a)/2t + (b+a)/2)dt` |
| `=pi/2 h((b-a)/2 sum_(i=-oo)^(+oo) f[(b-a)/2 tanh{pi/2sinh(ih)} + (b+a)/2] cosh(ih) / (cosh^2 {pi/2(sinh(ih))}))` |
このページの数式は MathJax で記述している。
| 書 名 | 数値計算ハンドブック |
| 著 者 | 大野 豊、磯田 和男 監修 |
| 発行日 | 1990年 9月 1日(第1刷) |
| 発行元 | オーム社 |
| 定 価 | 25000 円(本体) |
| サイズ | 版 ページ |
| ISBN | 4-275-07584-2 |
| NDC |
まりんきょ学問所 > 数学の本 > 大野 豊、磯田 和男 監修:数値計算ハンドブック