なんとなく生きてます

雑記帳備忘録チラシの裏

数値解析(Euler法とか)~確認事項これだけ~

  • 単精度実数
     ( 1 + \frac{f_{1}}{2^{1}}  + \frac{f_{2}}{2^{2}} + \frac{f_{3}}{2^{3}}  + ... + \frac{f_{23}}{2^{23}} ) \times 2^{n} ただし、nは-126〜127

  • 倍精度実数
    ( 1 + \frac{f_{1}}{2^{1}}  + \frac{f_{2}}{2^{2}} + \frac{f_{3}}{2^{3}}  + ... + \frac{f_{52}}{2^{52}} ) \times 2^{n}
    ただし、nは-1022〜1023

  • 漸化式の誤差
    参考
    http://www.misojiro.t.u-tokyo.ac.jp/~murota/lect-suchi/recrel131007.pdf

  • 2次方程式での桁落ちによる誤差の拡散を防ぐ計算方法
    定番

  • 引き算(a-bなど)の桁落ちを防ぐ計算方法
    {a}\sim{b}のもとでa-bの桁落ちを防ぐためには {a}^{2}-{b}^{2}を用いて
    a-b=\frac{{a}^{2}-{b}^{2}}{a+b}
    として計算できる. ただし、当たり前だけど{a}^{2}-{b}^{2}=(a-b)(a+b)より、{a^{2}}\sim{b^{2}}ではない.

  • LU分解

  • Gaussの消去法におけるpivottingの意義
    絶対値が最大のものを選択することで、 情報落ちを防ぐことができることに加えて、桁落ちの誤差が伝播しないようにする事ができる.

  • Euler(オイラー)法
    まず、常微分方程式
     \frac{dy}{dt} = f(t, y(t))
    が成り立っていて、fが十分なめらかであるという仮定のもとで話をすすめる. ここで、y(t)についてのデータが得たいとする. しかし普通はデータは離散的に手元にあるものだから、(音楽ファイルのサンプリングレートとかもそう) データを取っていた時間をTをn分割してh = \frac{T}{n}とできてt_{i} = hiと表せる. さらに、Taylar展開でt周りの展開によってy(t_{n}+h)
    y(t_{n}+h) = y(t_n) + hy'(t_n) + ...
    と近似できて、2次の項から先を微小項として無視すると
    y(t_{n}+h) \approx y(t_n) +  hy'(t_n)
    とできる. また、
    t_{n}+h = t_{n+1}
    であったから、これを用いて
    y(t_{n+1}) \approx y(t_n) + h(f(t_n, y(t_n)))
    と計算できる. これがEular法なわけだけど、何がしたいのかというと、この式でy(t_n)の値がデータとして与えられていれば、そこから y(t_{n+1})の値が得られるというわけで、この計算を繰り返せばy(t)のグラフの大体の形が離散的なデータから復元できるというわけである.

  • Heun(ヘウン)法
    Euler法の精度を上げるため、単純にEuler方でもちいたt_{n}t_{n+1}の間の勾配の平均をとって近似を行う. すなわち、Euler方では
    y(t_{n+1}) \approx y(t_{n}) + h(f(t_{n}, y(t_{n})))
    としていたところを、
    y(t_{n+1}) \approx y(t_n) + {\frac{h}{2}}\{f(t_{n}, y(t_{n})) + f(t_{n+1}, y(t_{n+1}))\}
    さらにy(t_{n+1})をEuler方で近似した結果を使って、
    y(t_{n+1}) \approx y(t_n) + {\frac{h}{2}}\{f(t_{n}, y(t_{n})) + f(t_{n+1}, y(t_n) + h(f(t_n, y(t_n))))\}
    として近似計算を行う.

  • 中点則
    \frac{dy}{dt}=\frac{y(t+h)-y(t-h)}{2h}として近似を行う手法

  • 線形方程式の安定性と絶対安定

under const

under const