1., 2. については、前準備の節に書いてあります。
作業報告は,Word等で作成したファイル(画面のスナップショットを含める)をPDF形式に出力し,e-Learningのページ(下記URL)ヘアップロードしなさい.
独自に作成したテキスト(PDF版)(学内からのアクセスのみ) (印刷して授業で配布しますが、オンラインで見たい場合はここから取得してください。)
3章のプログラムでは、11行目から22行目にかけて定義してある関数(行列やベクトル変数の領域確保など)は、多くのプログラムに共通して用いられる関数であり、テキストには書いてない.(筆者のページからダウンロードしたプログラムには付属している。)
したがって, 独自にはじめからプログラムを書く場合には、これらの関数の中身を書き加える必要がある。(プログラムは2.1〜2.3にある。)
この部分(プログラム2.1〜2.)について,プログラムをよく読み,行なっていることについて理解しておくこと.(C言語を使いこなす上での最重要ポイントの一つであるポインタについての復習にもなる.)
(もし,2.1, 2.2のプログラムにあるdvector(), dmatrix()の定義について説明が必要であれば,質問してほしい.メモリの確保のされ方を図示できるようになっておくことが望ましい.)
プログラムを読むだけではなく,実行してみることをすすめる.
ファイルに出力するfprintfの代わりに,コンソールに出力するprintfに書き換えて,結果を確認しても良い.
プリントテキストの通り
プリントテキスト(資料1)の課題1-1を行いなさい。(締め切り:10月13日)
E-Learningのページへ提出してください.
授業では、もっとも基本的な数値解法のみを実習したが、行列の特徴、たとえば対称行列とかほとんどの要素がゼロの「疎な行列」とかの場合ごとに効率的な方法が考案されてる。それを見極め、適切な数値計算ライブラリ関数を選択することが実際には大事な作業になる。
広く用いられているオープンソースの数値計算ライブラリとしてGSLがある。下記のWebページを参照してみてほしい。
Scilab (matlabでも同様)では次のようにlinsolve(A,b)という関数を用いるだけで解を得ることができます.
// 線型方程式の解を求める A = [1, 2, 1, 1;... 4, 5, -2, 4;... 4, 3, -3, 1;... 2, 1, 1, 3] b = [1; 7; 12; -2]; [x0, kerA] = linsolve(A,b) // Ax +b = 0 の解を求める。(符号に注意) disp(x0)
matlabでは、コメントは%で始まります。また、linsolveはAx=bを解く仕様になっているので、Scilabとは符号が逆になります。 継続行指定、コマンドの最後のセミコロンの要不要なども若干異なります。
% 線型方程式の解を求める A = [1, 2, 1, 1;... 4, 5, -2, 4;... 4, 3, -3, 1;... 2, 1, 1, 3]; b = [-1; -7; -12; 2]; % Ax=bを解く [x0, kerA] = linsolve(A,b); disp(x0)