重み付き残差法を理解する｜第2回

# はじめに
有限要素法を勉強していると、割と最初のほうに重み付き残差法（特に、Galerkin法）という用語が登場します。それが有限要素法とどう関係しているのか、よく分からなくないですか？私は分かりませんでした。

そこでいろいろと調べてみると、重み付き残差法というのは微分方程式の数値計算の一種であって、有限要素法と直接関係しているわけではなさそうです。

このシリーズでは2回に分けて重み付き残差法やGalerkin法について私が理解したことをシェアします。最終的には有限要素法とのつながりも説明したいですが、まずは微分方程式の解法としての重み付き残差法を説明します。

あくまで昨日の今日で勉強した内容をまとめていますので、間違いがあるかもしれません。気づいた方がいらっしゃいましたら教えて頂けると嬉しいです。

第2回のこの記事では、重み付き残差法の重み関数の選び方による種類を紹介します。Galerkin法はその一種です。第1回もぜひご覧ください。

https://qiita.com/Sego-don/items/11d6c20b9a98c07a636f

# 目次
[前回のおさらい](#前回のおさらい)
[選点法](#選点法)
[最小二乗法](#最小二乗法)
[Galerkin法](#Galerkin法)
[最後に](#最後に)
[参考資料](#参考資料)

# 前回のおさらい
[第1回](2022-10-19_11d6c20b9a98c07a636f.md)では、重み付き残差法による微分方程式の解法を次のようにまとめました。
1. （任意の）$n$ 個の基底関数 $\phi_i$ を定める。
1. $u(x) = \sum_{i=1}^n a_i \phi_i$ と解を仮定する。
1. $u(x)$ を元の微分方程式に代入し、残差 $r(\boldsymbol{a}, x)$ を求める。
    ```math
        r(\boldsymbol{a}, x) = \frac{d^2}{dx^2} \sum_{i=1}^n a_i\phi_i - f(x) \tag{1}
    ```
1. $n$ 個の重み関数 $w_j(x)$ を用意し、重み付き残差 $R_j(\boldsymbol{a})$ を求める。
    ```math
        R_j(\boldsymbol{a}) = \int_{-\infty}^{\infty} r(\boldsymbol{a}, x)w_j(x)dx \tag{2}
    ```
1. 各 $R_j(a_i)$ がゼロとなる条件から、$a_i$ に関する $n$ 個の連立方程式を得る。
1. 連立方程式を解いて $a_i$ を求める。

残る問題は、重み関数 $w_j(x)$ の選び方です。その選び方にはいくつかの流儀があり、有限要素法で登場するGalerkin法はその一種です。では、その流儀を一つ一つ見ていきましょう。

# 選点法
選点法（Collocation Method）とは、領域の中から $n$ 個の点を抽出し、その点のみで残差を評価する方法です。抽出した点の座標を $x_j$ として、重み関数を次のように定義します。
```math
w_j(x) = \delta(x-x_j) \tag{3}
```
なお、$\delta(x)$ はDiracのデルタ関数です。この場合、重み付き残差は
```math
\begin{align}
R_j(\boldsymbol{a}) &= \int_{-\infty}^\infty r(\boldsymbol{a}, x) \delta(x - x_j) dx \\
         &= r(\boldsymbol{a}, x_j) \tag{4}
\end{align}
```
となり、ただの数値代入法と変わりません。そうです、選点法とはただの数値代入法なのです。これでは[第1回](2022-10-19_11d6c20b9a98c07a636f.md)で述べたような数値代入法の問題点が克服できていないので、あまりよろしくありません。

# 最小二乗法
最小二乗法（Least Square Method）では重み関数として次の式を用います。
```math
w_j(x) = \frac{\partial r(\boldsymbol{a}, x)}{\partial a_j} \tag{5}
```
突然でよく分からないと思うので、大元から説明します。

もともと私たちがやりたかったことは、次の積分残差 $R(\boldsymbol{a})$ をゼロにすることでした。
```math
R(\boldsymbol{a}) = \int_{-\infty}^{\infty} r(\boldsymbol{a}, x) dx \tag{6}
```
ここで、正の値と負の値が打ち消しあってたまたまゼロになることを防ぐため、次の量を評価することにしましょう。
```math
I(\boldsymbol{a}) = \int_{-\infty}^{\infty} \{r(\boldsymbol{a}, x)\}^2 dx \tag{7}
```
この $I(\boldsymbol{a})$ がゼロになる、すなわち最小となる $a_i$ の組み合わせを求めればいいわけです。これが最小二乗法の名前の由来となっています。

最小としたいのであれば微分イコールゼロですね。そこで、$I(\boldsymbol{a})$ を $a_i$ で微分しましょう。
```math
\frac{\partial I(\boldsymbol{a})}{\partial a_i} = 2 \int_{-\infty}^{\infty} r(\boldsymbol{a}, x) \frac{\partial r(\boldsymbol{a}, x)}{\partial a_i} dx \tag{8}
```
これがゼロになるわけですから、
```math
\int_{-\infty}^{\infty} r(\boldsymbol{a}, x) \frac{\partial r(\boldsymbol{a}, x)}{\partial a_i} dx = 0 \tag{9}
```
が $a_i$ のそれぞれについて得られます。この式の左辺って、式（2）の重み付き残差
```math
R_j(\boldsymbol{a}) = \int_{-\infty}^{\infty} r(\boldsymbol{a}, x)w_j(x)dx \tag{10}
```
に式（5）の重み関数
```math
w_j(x) = \frac{\partial r(\boldsymbol{a}, x)}{\partial a_j} \tag{11}
```
を代入したのと同じですよね？

以上が最小二乗法の説明です。こちらは重み付き残差法のメリットを生かしているため選点法よりも精度が良いですが、次で紹介するGalerkin法のほうがより高精度なことが多いです（理由については後述します）。

# Galerkin法
ここまでついてきてくださった皆さんにとって、Galerkin法を理解するのは実にたやすいことでしょう。Galerkin法では、重み関数 $w_j(x)$ を次式で定義します。
```math
w_j(x) = \phi_j(x) \tag{12}
```
すなわち、最初に
```math
u(x) = \sum_{i=1}^n a_i \phi_i \tag{13}
```
と解を仮定した際の基底関数を重み関数として採用するわけです。すると、重み付き残差 $R_j(\boldsymbol{a})$ は
```math
R_j(\boldsymbol{a}) = \int_{-\infty}^\infty r(\boldsymbol{a}, x) \phi_j(x) dx
```
と表されます。

Galerkin法がよく用いられるのは、「汎関数が存在する」という特定の条件下ではGalerkin法が変分法と一致し、一種の解析解を求めていることになるからです。これが先ほど述べた最小二乗法よりもGalerkin法が高精度であることが多い理由です。この辺の詳しい説明は数学チックになりすぎるので控えておきます。[1つ目の参考資料](http://nkl.cc.u-tokyo.ac.jp/11s/intro/CS02.pdf)に詳しい説明があるので、興味がある方は見てみてください。

ちなみに、Galerkinは19世紀後半から20世紀前半のソ連人で、投獄中にこのアイデアを思い付いたそうです。Galerkinヤバい。

# 最後に
微分方程式の解法から始め、Galerkin法までたどり着くことができました。そもそも私がGalerkin法の学習を始めたのは、有限要素法の初期段階にGalerkin法が登場し、よくわかんなくなっちゃったからです。

今後はGalerkin法と有限要素法のつながりについてまとめたいです。

# 参考資料
http://nkl.cc.u-tokyo.ac.jp/11s/intro/CS02.pdf

https://www.hellocybernetics.tech/entry/2019/02/17/152946#%E9%87%8D%E3%81%BF%E4%BB%98%E3%81%8D%E6%AE%8B%E5%B7%AE%E3%81%AE%E6%BA%96%E5%82%99%E3%81%AE%E4%BB%95%E6%96%B9%E3%82%92%E6%B1%BA%E3%82%81%E3%82%8B%E3%82%AC%E3%83%A9%E3%83%BC%E3%82%AD%E3%83%B3%E6%B3%95

https://ja.wikipedia.org/wiki/%E9%81%B8%E7%82%B9%E6%B3%95