演習1:連立一次方程式に対するLU分解(2018年11月13日)
演習の結果をレポートにして11月27日の授業中に提出すること。課題2までを必須とし、余力のある者は課題3にも取り組むこと。
Gauss消去法のプログラム gauss_elim.c
ただし、セキュリティの理由からファイルをZIP圧縮してあるので、ダウンロードしたファイルは解凍して用いること。
(LinuxでのZIP解凍コマンドはunzipである)
講評
おおよそ出来でいた。LU分解で求めた連立一次方程式の解が厳密解と一致しているか、確かめていないレポートが散見された。雛形プログラムにあるように、解x=[1,2,…,n]となるように連立一次方程式Ax=bの解をあらかじめb=A[1,2,…,n]^Tとおく、残差Ax-bを求める(残差は誤差と違うが)といった方法がある。悪条件行列(Vandermonde行列、Hilbert行列など)の場合数値計算結果はどうなるか、試してみることを勧める。
演習2:数値積分(2019年1月8日)
演習の結果をレポートにして1月22日の授業中に提出すること。課題3までを必須とし、余力のある者は課題4にも取り組むこと。
台形公式のプログラム intgral1.c integral2.c
ただし、セキュリティの理由からファイルをZIP圧縮してあるので、ダウンロードしたファイルは解凍して用いること。
(LinuxでのZIP解凍コマンドはunzipである)
講評New
主な点を3つ。
1.DE公式の積分計算ができてない人。
∫_(-1,1)f(x)dx ≒ hΣf(φ(kh))φ'(kh)
の計算で、k=0の項にφ'(0)を掛けるのを忘れています。
2.DE公式のプログラムで、φ'(t) = c cosh(t) / cosh^2(c sinh(t)) の計算のところを
dphi = c * cosh(t) / cosh(c*sinh(t)) / cosh(c*sinh(t));
というふうに書いている人が多いですが、これですとcosh(…)の計算を2度することになり、無駄です。
csh = cosh(c*sinh(t));
dphi = c * cosh(t) / csh / csh;
というふうに書くべきです。
3.DE公式の計算を有限区間積分に対する台形公式で計算している人がいました。
DE公式は、変数変換(DE変換)で全無限区間積分に直してから台形則を適用するものであるという、根本的なことが理解できていません。
演習3:常微分方程式の数値解法(2019年1月29日)
演習の結果をレポートにして2月12日(火)までに提出すること。提出場所:西4号館4階事務室前のメールボックス。
Euler法のプログラム euler.c
Heun法のプログラム heun.c
ただし、セキュリティの理由からファイルをZIP圧縮してあるので、ダウンロードしたファイルは解凍して用いること。
(Linuxでの解凍コマンドはunzipである)