『数値解析入門』
https://gyazo.com/4d09ee9a0bec038263840db75881451e
1 数値解析の基礎
1.1 数値の内部表現と丸め誤差
1.2 打切り誤差と数値拡散
1.3 数値解析の手法
2 行列の計算
2.1 行列の種類と性質
条件数: 21
行列のノルムを用いて条件数$ \mathrm{cond}(A)\coloneqq\|A\|\|A^{-1}\| が定義される
condition number
行列のノルムには$ \|PQ\|\le\|P\|\|Q\| なる性質があるので、単位行列$ I=AA^{-1} のノルムが$ 1 であることから$ \mathrm{cond}(A)\ge 1 である
条件数は$ A\bm{x}=\bm{b} の係数行列や右辺ベクトルが微小に変化したときに、解がどの程度変化するかの指標になる
反復法を用いる場合は収束の速さに関係する
条件数が大きい場合は悪条件となり、精度良く解くのが難しくなる
ill condition
2.2 固定値と固有ベクトル
2.2.1 固有値・固有ベクトルの性質
2.2.2 ベクトル反復法
2.2.3 行列変換法
3 連立方程式の解法
3.1 直接法と反復法
3.2 直接法(消去法)
3.2.1 ガウス-ジョルダン法(掃出し法)
3.2.2 三角分解を用いる方法(コレスキー法と改訂コレスキー法) 3.2.3 疎行列用の解法(スカイライン法)
3.3 反復法
3.3.1 古典的な解法
3.3.2 共役勾配法
3.3.3 前処理付き共役勾配法
4 代数方程式,超越方程式の数値解法
4.1 繰返し法
4.2 区間縮小法
4.3 ニュートン-ラフソン法
4.4 セカント法
4.5 連立非線形方程式の数値解法
4.6 複素数解の数値解法
4.7 多数の解の求め方
5 曲線の当てはめ
5.1 最小2乗法による実験データの当てはめ(1次式)
5.2 最小2乗法による実験データの当てはめ(多項式)
5.3 最小2乗法による実験データの当てはめ(多変数)
5.4 最小2乗法による実験データの当てはめ(非線形関係式)
5.5 最小2乗法による実験データの当てはめ(周期関数,フーリエ変換)
5.6 関数近似
6 数値微分・数値積分
6.1 数値微分
6.1.1 差分法を用いる場合
$ g'(a) = \frac{g(a + h)-g(a)}{h}+O(h)
$ g'(a) = \frac{g(a + h)-g(a -h)}{2h}+O(h^2)
2次の差分法
$ h^2 に比例して打切り誤差が小さくなる
$ g'(a) = \frac{g(a)-g(a-h)}{h}+O(h)
より高次の差分法も考えることができる
$ g(x+2h),g(x-2h),\cdots のように考えれば導出できる
2次の前進差分
$ g'(a) = \frac{-g(a + 2h)+4g(a + h)-3g(a)}{2h}+O(h^2)
4次の中心差分
$ g'(a) = \frac{g(a-2h)-8g(a-h)+8g(a+h)-g(a+2h)}{12h}+O(h^4)
刻み幅は近似精度に関わる
刻み幅と近似精度の関係
$ g(x) = x^4+x^3+x^2+x+1
$ g'(x) = 4x^3+3x^2+2x+1
https://gyazo.com/accda47345f4312404a7812fad99db99https://gyazo.com/b7c8e60f76bfc4ce0c0bce1973982506
本の図では$ 10^{-5} のあたりで誤差がひどくなっていたが、Juliaだとそうでもないあんも.icon
丸め処理を入れたら再現できそう?
両端の誤差の性質は違いそうなのがわかる
code:jl
using Plots
g(x) = x^4+x^3+x^2+x+1
g′(x) = 4x^3+3x^2+2x+1 # 微分記号は \prime + Tabで出せる
forward_diff(f, x, h) = (f(x + h) - f(x)) / h
central_diff(f, x, h) = (f(x + h) - f(x - h)) / (2h)
# central_diff4(f, x, h) = (f(x-2h)-8f(x-h)+8f(x+h)-f(x+2h)) / (12h)
x = 1.0
fdiff = forward_diff.(g, x, h)
cdiff = central_diff.(g, x, h)
# savefig(plt, "forward_diff_vs_central_diff.png")
analytical = g′(x)
ferror = abs.(fdiff .- analytical)
cerror = abs.(cdiff .- analytical)
# savefig(plt_err, "forward_diff_vs_central_diff_error.png")
6.1.2 補間公式を用いる場合
6.2 数値積分
6.2.1 台形則
刻み幅と近似精度の関係
積分計算にどのパッケージを使おう?あんも.icon
code:jl
using Plots, LinearAlgebra, FastGaussQuadrature
f(x) = x^4+x^3+x^2+x+1
analytical = 46/15
function trapezoidal_rule(f, a, b, n)
h = (b - a) / n
x = a:h:b
y = f.(x)
return integral
end
a, b = -1, 1
n = 10:10^3
trapezoidal_quad = trapezoidal_rule.(f, a, b, n)
# error = abs.(trapezoidal_quad .- analytical)
plt = plot(n, trapezoidal_quad; xscale=:log10)
# savefig(plt, "trapezoidal_quad.png")
x, α = gausslegendre(3) # 4次多項式は3点で十分らしい
gausslegendre_quad = dot(α, f.(x))
gausslegendre_quad ≈ analytical # true
6.2.2 シンプソン則
6.2.3 多重積分
7 常微分方程式の解法
7.1 常微分方程式
7.2 常微分方程式の解法
7.2.1 オイラー法
7.2.2 ルンゲ-クッタ法
7.2.3 予測子・修正子法
7.3 1階常微分方程式の初期値問題
7.4 連立常微分方程式
7.5 2階常微分方程式の境界値問題
8 偏微分方程式
8.1 物理現象と偏微分方程式
8.1.1 2階の偏微分方程式の分類
8.1.2 電磁場の偏微分方程式
8.1.3 保存量の偏微分方程式
8.1.4 波動現象の偏微分方程式
8.1.5 流体運動の偏微分方程式
8.2 ラプラス-ポアソン方程式の数値解
8.3 拡散方程式の数値解
8.3.1 陽解法
8.3.2 陰解法
8.8.3 クランク-ニコルソン法
8.3.4 有限な体積要素に対する差分化
8.3.5 対流項を含む拡散方程式
8.4 波動方程式の数値解
8.4.1 波動方程式の解の性質
8.4.2 波動方程式の数値解
8.4.3 数値解の安定性
8.5 波動の数値解
8.5.1 質量保存則と運動量保存則の連立
8.5.2 MAC法による流動の数値解析
8.5.3 スタッガード格子
9 モンテカルロ法
9.1 モンテカルロ法の計算手法
9.2 乱数の発生方法と検定
9.3 モンテカルロ法の適用と応用
9.3.1 数値積分
9.3.2 応用例
10 数値解析の応用
10.1 熱伝導
10.2 流体力学
10.3 分子動力学法
10.3.1 分子動力学法の計算方法
10.3.2 応用例
10.4 物質拡散の応用(湿度場との連成)
10.4.1 材料プロセスと溶質核酸
10.4.2 単結晶プロセス
10.4.3 数値計算例
10.5 連続体力学と有限要素法