授業資料/Q の変更点


* 各種例題 [#d0fd284b]

いくつか、やってみると良い課題を書いておこう.
レポート課題として使ってみるのも良い.

** 非線形方程式の求解 [#i70bdb85]

- f(x) = x^2 - 2  の近似根を求めるプログラムを書いて動かしてみよう.
なお、解は明らかに ±√2 であるが、求めるのはこのどちらかだけで良い.
方法は多数あるので、以下、列挙しておこう.全部やる必要はないが、複数やっておいたほうがいいだろう.
-- 二分法で…
-- はさみうち法で…
-- 割線法で…
-- 縮小写像法で(ただし、問題を少し書き換えないといけないだろう)
-- Newton 法で…
//
- f(x) = e^{-x} - x の近似根を、同様に求めてみよう.
//
- f(x) = 3x^2 + 1 + (log (Pi - x))^2/(Pi^4) について近似根を求められるだろうか、チャレンジしてみよう.
たぶん、ちょっと難しい.
//
- 連立非線形方程式である、
&br;  
2x^2 + y^2 - 1 = 0,
&br;  
x - (√3)y = 0,
&br;
の近似解を求めてみよう.
たぶん Newton 法がいいだろう.
//
- f(x) = e^{-x} - x の近似根を、(簡易版)ホモトピー法で求めてみよう.
//
- f(x) = x^3 - 3x + 3 の近似根を、ホモトピー法で求めてみよう.

** 連立一次方程式の求解 [#a1ccd21d]

- LU 分解を使って連立一次方程式の求解を行うプログラムを書いてみよう.
&br;
いきなり全体のプログラムを書くよりは、各種の線形計算、たとえば、ベクトルとベクトルの内積を計算するルーチンを書いてから全体を書いたほうが楽だろう.
//
- 同様に CG 法を使うプログラムを書いてみよう.

** 常微分方程式の求解 [#dfeab71e]

-~ du/dt = u(1-u) という単純な方程式の近似解を求めるプログラムを書いて動かしてみよう.
- du/dt = u(1-u) という単純な方程式の近似解を求めるプログラムを書いて動かしてみよう.
方法としては以下の様なものがあるが、Runge-Kutta 法でプログラムが組めれば、これからも多くの問題に対処可能だろう.
-- Euler 法,
-- Runge-Kutta 法,
-- 線形多段階法,
//
- 連立常微分方程式
&br;  
du/dt = (2-v)u,
&br;  
dv/dt = (2u - 3)v,
&br;
の近似根を求めるプログラムを書いて、動かしてみよう.
この問題の解は時間発展すると (u,v) 平面を一周して同じ点へ戻る性質があるが、その性質が「どれくらい再現されるか」グラフを描いて確かめてみよう.

** 偏微分方程式の求解 [#lc8584cf]

- まずは、形式としては常微分方程式になってしまうが、考え方や計算に慣れる為に、函数 
u = u(x) に対する 1次元境界値問題
&br;  
u_{xx} = -C, (C > 0, const.) in [0,L], 
&br;  
u(0) = 0, u(L) = 1,
&br;
の近似解を、以下の方法などで計算してみよう.
-- 差分法
&br;
可能ならば、厳密解(手で計算可能)と比較してみてもいいだろう.
-- 差分法,
-- 有限要素法
//
- 次に、非常にシンプルな問題として、熱拡散方程式の近似解を求めてみよう.
具体的には函数 u = u(x) に対する発展問題で、
&br;  
u_t = u_{xx} in [0,L], 
&br;  
u(0) = 0, u(L) = 1,
&br;
の近似解を、以下の方法などで計算してみよう.
-- 差分法
&br;
なお、線の方法の考え方に基づいて、空間方向のみを下記の方法で離散化して、時間方向を Runge-Kutta 法などで処理してもいいだろう.
&br;
可能ならば、厳密解(手で計算可能)と比較してみてもいいだろう.
-- 差分法,
-- 有限要素法
//

** 構造保存数値解法 [#n6d9aae5]

「解のもつ性質 ○○ を数値解でも再現する」ことを明示的に目的とする数値解法を一般に構造保存数値解法と呼ぶが、この考え方についても下記のように試してみよう.

- Greenspan の提唱した、Newton 運動方程式に対するエネルギー保存解法に基いて、
単振り子の挙動を表す方程式(例えば下記に記載)の近似解を求め、エネルギーが確かに保存されているか確認してみよう.
&br;  
d^2 w/dt^2 = - a sin(w), 
&br;  
ただし、w = w(t) は振り子の鉛直方向からの角度、
a := g/l, g:重力加速度、l: 振り子の糸の長さ.
&br;
//
- 熱拡散方程式に対して、時間空間共に対称な差分解法(Crank-Nicolson スキームと呼ばれる)

∫ u^2 dx 

∫ (u_x)^2 dx 
が時間とともに減少する「散逸性」を再現することが知られている.
これを実際に、プログラムを書いて動かして確認してみよう.
&br;
なお、その Crank-Nicolson スキームは以下のとおり.
&br;  
{ u_k^(n+1) - u_k^(n) }/Δt = 
{ u_{k-1}^(n+1) - 2u_k^(n+1) + u_{k+1}^(n+1) + u_{k-1}^(n) - 2u_k^(n) + u_{k+1}^(n)} /(2Δx^2),
for n = 0,1,2,..., k = 1,2,...,N-1,
&br;  
u_0^(n) = 0, u_N^(n) = 1,
&br;  
ただし、u_k^(n) は u(kΔx, nΔt) の近似値, N = L/Δx.