2025/07/28 シミュレーション工学対策
t6o_o6t.icon
シミュレーション工学、持ち込み不可(!?)t6o_o6t.icon
何をするんだろう?
3次の行列式の求め方を復習しておく
余因子展開・サラスの公式
/icons/hr.icon
常微分方程式
概要
常微分方程式を解く、すなわち方程式を満たす関数を計算によって求める方法が講義された。
各点$ (x_i, y_i)の情報から、微分方程式の積分形を次のように表すことができる。
$ y(x_{i+1})=y(x_i)+\int_{x_i}^{x_{i+1}}f(x, y(x))dx
本講義では、積分形に含まれる積分項の計算に関するテクニックが紹介された。
オイラー法
前進オイラー法:$ y(x_i)から逐次的に$ y(x_{i+1})を求める。計算方法はつねに自明である(陽解法)が、不安定。
後退オイラー法:右辺に$ y(x_{i+1})が含まれる式を代数的に変形してから計算する。変形の方法が非自明である(陰解法)が、安定である。
ルンゲ・クッタ法:テイラー展開の2次項以降も用いて計算する方法。
古典的ルンゲ・クッタ法:4次項以降までを使って求める。
アダムス法:Lagrange補完により$ fを近似し、積分項を求める方法。
オイラー法・ルンゲクッタ法
このテキストが非常に分かりやすくできているので、こちらも参考に勉強したほうが良さそう
ルンゲクッタ法の導出で使われるテイラー展開は次のページを参考に
授業内で「2次のルンゲクッタ」として紹介されている方法は、この資料では「修正オイラー法」に対応する。
この資料中では、$ y(x+h)のテイラー展開の2次項までから導かれるものを2次のルンゲクッタとしており、その一種が修正オイラー法である。
前進オイラー法と後退オイラー法を書けるようにしておく?
古典的ルンゲ・クッタ法の公式は覚えるしかないかな?
メタ的には出題しにくいとも考えられる?
外挿法
概要: 台形公式による積分の近似の精度を高めるための2つのテクニック
1. $ 2^n個の分割での台形公式による積分の近似$ S_nを求める。
一見難しそうだが、単純である。
実際に計算したいt6o_o6t.icon
2. リチャードソンの補外による高精度化を説明する。
$ nを1増やすと誤差が4分の1になるということを覚えておけば、その場で導出できる。
3. ロンベルグ積分による高精度化を説明する。
TODO
線形多段階法
Lagrange補間: 複数の点をすべて通る関数を求める方法。
このサイトで図形的なイメージをつかむとよい。
アダムス法:
講義では説明なしに積分結果が表示されたので、このサイトで詳細を確認するとよさそう。
1. Lagrange補間により、点$ y(x_{i-p})から点$ y(x_i)までの$ p個の点を通る関数を求める。
つまり$ f(x, y(x))をLagrange補間で近似する。
2. 近似で得られた式を使って、積分項を計算する。
実際に練習したい気もするt6o_o6t.icon
一般的な方程式に対する方法
TODO
/icons/hr.icon
非線型方程式
概要
平方根を求める方法、および非線形な方程式の解を計算する方法が講義された。
平方根の計算
一辺ともう一辺の平均を計算し続ける。
スライドに書かれているのは下図のようなことだと思う
https://scrapbox.io/files/68871cb046e6fe589bbc7f74.jpg
スライドにある例で練習しておく。
ニュートン法
$ f(x)=0を解くための手法。
導出
まず、テイラー展開から$ hを導く。
1. $ f(x_k+h)の近似的なテイラー展開をする。
2. 2階以上の微分を無視する。
3. $ f(x_k+h)=0を$ hについて解くと、$ h=-\frac {f(x_k)}{f'(x_k)}を得る。
また、$ h=x_{k+1}-x_kである。
以上の2式を$ x_{k+1}について解く。
たのしいt6o_o6t.icon
code:js
let f = (x) => x - (x - Math.cos(x))/(1 + Math.sin(x))
let ans = f(f(f(f(1))))
console.log(ans - Math.cos(ans)) // 0
実際、出そうな気がする
二分法
TODO
Geminiに練習問題を作ってもらいました
問題形式で理解していくほうが楽しいね!
始点と終点で符号が異なる区間を見つけて、二分探索で0となる点を探す方法っぽい
逐次代入法
$ x_{k+1}=\phi(x_k)の反復計算によって解を求める。
/icons/hr.icon
偏微分方程式と差分法
概要
偏微分方程式に含まれる変数を、離散的な値として考える必要がある。
e.g. $ x_1, x_2, ...
(偏)微分をあらわすには、前進差分 $ \frac{f_{i+1}-f_{i}}{\Delta x}のように、関数値を使って近似すればよい。
後退差分、中間差分についても同様。
前進差分によって作った差分方程式は
差分法の誤差
$ f_{i+1}=f((i+1)\Delta x),\ f_i=f(i\Delta x)
$ fのテイラー展開で$ f_{i+1}や$ f_i、$ f_{i-1}を表すと、誤差を導出できる
線形移流方程式の計算
方程式
$ \frac {\partial f}{\partial t}+c\frac{\partial f}{\partial x}=0
時間と空間それぞれに対して、前進差分を使って偏導関数を表現する。
$ f_{i}^{n}という記法に注意する。これは$ n乗を表しているのではなく、$ n番目の関数値を表している。
/icons/hr.icon
行列の解法
概要
連立1次方程式$ Ax=bの解法について講義された。
行列の三角分解による解法(LU分解法)
三角行列を係数行列とする連立方程式は簡単に解ける。
そこで、係数行列$ Aを上三角行列$ Lと下三角行列$ Uに分解することを考える。これを三角分解という。
三角分解の方法:クラウト法:
三角分解の定義を書き下して、方程式を解く。
3次正方行列なら未知数が12個に対して方程式が9本となる。そのため残りの3個の未知数は自由に定めることができ、それを利用して解く。
ガウスの消去法による解法
反復法
三角行列を係数行列とする連立方程式の解き方
スライド中に例題があるので、試してみること(すごく簡単)
三角分解
方程式$ Ax=bの係数行列$ Aを、下三角行列$ Lと上三角行列$ Uに分解すること.
$ A=LU
L: Lower、U: Upperのようだ
LU分解してあれば、$ \det(A)は$ Lと$ Uの対角成分の積から得る。
ガウス消去法
方法はすでに数値計算概論で勉強しているので、あとは数式で表現できるかが課題 ☑ 前進消去
ふだんの計算方法をすなおに式にすればOK
❓後退代入
$ b_kを数式で表して、$ x_kについて解くと数式で表現できるはず
$ b_k=\sum_{j=k}^{n}a_{kj}x_{j}
$ x_k=\frac{\bigg(b_k-\sum_{j=k+1}^{n}a_{kj}\bigg)} {a_{kk}}
反復法
解の初期値を定めて、繰り返し代入することで正しい値を得る方法。ガウス・ザイデル法は
ヤコビ法
$ i番目の方程式を$ x_iに対して解く。
そして、$ \bold xの初期値を定めて、方程式に代入する操作を繰り返す。
ガウス・ザイデル法
$ i番目の方程式への代入を行ったあと、更新後の$ x_iを次の方程式への代入でも使用する。
/icons/hr.icon
固有値問題(固有値を求める)
概要
ヤコビ法
利用する定理
$ MAM^Tが対角行列のとき、その行列の対角成分と$ Aの固有値は等しくなる。
適当な$ Mを定義し、$ MAM^Tの非対角成分が0になる条件を求める。
2次の場合は簡単に条件を導くことができる。
n次の場合は条件を導くのが難しいので、$ a_{pq}を順に選んで非対角成分が0に近づくように繰り返す。
条件が求まったら、$ MAM^Tの対角成分を求める。
二分法
固有値の特性
$ n次正方行列に対して$ n個存在する。
$ MAM^Tが対角行列のとき、その行列の対角成分と$ Aの固有値は等しくなる。
直交行列を左右から乗じた$ P^TAPの固有値は$ Aの固有値と等しくなる。
シルベスターの慣性法則:
ヤコビ法
☑ 2次正方行列の場合の、条件を満たす$ \thetaの導出
$ M=\begin{pmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta\end{pmatrix}
このように定義し、$ MAM^Tを計算し、非対角成分が0になる$ \thetaの条件を求める
☑ n次正方行列への拡張
$ p,qを順番に選び、上記のような行列$ Mを作る。
n次に拡張するために、$ \cos\thetaなどを置かない部分については、対角成分を1、それ以外は0とする。
$ \thetaを計算する。計算式は2次の場合とほぼまったく変わらない
→ 2次の場合の$ \thetaを先に計算しておくと安心
二分法
概要
$ \det (A-\lambda I)=0となる$ \lambdaを求めたい。
小行列:行列の一部分。
主座小行列:左上の小行列。
正方行列$ A-\lambda Iの$ i次主座主行列を$ i=1から$ i=nまで考える。
その行列式を$ p_i(\lambda)とする。
利用する定理(スツルムの定理)
連続する$ p_i(\lambda)の符号の変化回数は、$ Aの固有値のうち、$ \lambdaより小さいものの個数。
例:$ \lambda=0で$ p_i(\lambda)をすべて求める。このとき、符号変化回数は負の固有値の個数と等しい。
$ [\alpha ,\beta] で符号変化回数に対して二分法を適用することにより、固有値の値を調べる。
改訂コレスキー分解
行列$ \bold A-\lambda\bold Iを$ U^TDUという形に分解する。
$ Dは対角行列であり、$ Uは対角要素が1の下三角行列である。
分解の計算は、LU分解と同様に要素を文字でおいて、連立方程式を解くことで得る。
シルベスターの慣性則より$ U^TDUの固有値の個数は$ Aの固有値数に等しくなる。
反復法
ベキ乗法:最大の固有値を求める
基本的な原理:$ \bold y^{(k)}=\bold A\bold y^{(k -1)}という計算を反復して行うと、$ \bold y^{(k)}は、求める固有ベクトルに近づいていく。
問題点:単に$ \bold Aを乗じていくと、$ \bold y^{(k)}が大きくなり続けて発散する可能性がある。
$ y^{(k)}の大きさを1に保つ。
授業資料では、この点については触れられていなかった
固有値の取り出し方
$ k-1回目で、$ \bold y^{(k-1)}が収束したとする。
固有ベクトル$ \bold y^{k-1}に関する固有値が$ \lambdaだとする。
$ y^{(k)}=\bold A\bold y^{(k-1)}なので、$ y^{(k)}=\lambda y^{(k-1)}。
両辺に$ y^{(k-1)}を乗じて整理すると、$ \lambdaを得られる。
$ \bold y^{k}が絶対値最大の固有値に収束する理由
初期ベクトル$ y^{(0)}を適当に定義する。
任意のベクトルは固有ベクトル$ \bold x_iの線形結合で表せるから、
$ y^{(0)}=c_1x_1+c_2x_2+...,\ \ y^{(k)}=Ay^{(k-1)}
左からAを乗じると、右辺は$ c_i\bold A\bold x_iの和で表せる。
$ \bold x_iは固有ベクトルなので、対応する固有値を$ \lambda_iとすれば、
$ c_i\bold A\bold x_i=c_i\lambda_i\bold x_i
この操作を繰り返すと、
$ y^{(k)}=A^ky^{(0)}=c_1\lambda_1^kx_1+c_2\lambda _2^kx_2+...
絶対値が最大の固有値を$ \lambda_1とすれば、
$ \lambda_1^kでくくることで$ y(k)が$ c_1\lambda_1^k x_1に収束することがわかる。
↑ この部分の理解が足りていない
逆ベキ乗法:最小の固有値を求める
原点移動法:
フーリエ変換
/icons/hr.icon
提出課題
復習問題3(常微分方程式)
問1は単なる変形で済む。$ y_{k+1}=y_k+(1+\lambda h)^nの導出は前進オイラー法の練習に良いのではないか
問2は、Lagrange補間の定義から、2点間の補間における式を導き、積分形の式を得るところまでの流れを復習するのに良いと思う
問3:TODO
もし問題用紙にルンゲクッタ法や$ k_nの定義が書かれていなかったら、非常に恐ろしいことになりそう
復習問題4(常微分方程式・プログラム)
TODO。前進オイラー法のプログラムは理解しておいたほうが良さそう
復習問題5(非線形方程式を逐次代入法で解く)
できそうなのでパス
★ 復習問題6(偏微分方程式)
移流方程式を解けない
前進差分、後退差分の求め方、そこからの計算は式を注意深く見れば問題なさそう
★復習問題7(LU分解)
コレスキー分解$ A=LDL^Tが成り立つことの証明。
$ Aが正則のとき下三角行列$ Lで$ A=LL^Tと分解できる。
$ Lの対角成分だけ取り出した$ D'を考えて、$ L=L'D'とすれば、
$ A=L'D'(L'D')^T=L'D'L'^TD'^Tとなる。
$ DD'^T=Dと置きなおすと、
復習問題8()