...

計算科学 I・計算科学実習 I

by user

on
Category: Documents
15

views

Report

Comments

Transcript

計算科学 I・計算科学実習 I
April - July, 2008
計算科学 I・計算科学実習 I
(2008年度 数理情報学科)
「計算科学 I」と「計算科学実習 I」は必ずペアで履修して下さい.
「計算科
学 I」と「計算科学実習 I」は「数理モデル基礎 I・II」,
「数値計算法・同実習」,
「グラフィックス基礎・同実習」の延長線上のある科目です.
「現象の数学 I・II」
を合わせて履修することが望ましいでしょう.
「計算科学 I」では,担当教員が作成・配付する要点ノートに沿って解説・
講義をします.実習とのペアで一回一回完結させる形で運営します.達成感が
得られるように,例題を学生が黒板上で解くことなどによって講義を参加型の
ものにします.
「計算科学実習 I」では,実習形式によるプログラム作成と講義形式による
解説を行います.達成感が得られるように,教員と学生,TAと学生,さらに,
学生同士のデスカッションを推奨します.早くできた学生は他の学生を指導す
るよう期待され,ボランティア・ポイントという形で成績評価に反映されます.
計算科学 I,計算科学実習 I の最新の資料は
http://www.math.ryukoku.ac.jp/~tsutomu/csc.html
から入手できます.欠席などのため,講義・実習の資料を貰えなかった場合は,
上のウェブページからダウンロードして下さい.成績評価の分布や学生による
授業評価集計結果などもこのウェブページに公開されています.
計算科学 I,計算科学実習 I に関する担当教員への問い合わせや連絡は電子
メールでお願いします(アドレスはウェブページに記載).
「計算科学 I」,
「計算科学実習 I」担当教員:池田 勉
「計算科学実習 I」担当TA:
野地 誠(数理情報学専攻修士2年)
松山秀人(数理情報学専攻修士2年)
浅井一馬(数理情報学専攻修士1年)
南 大介(数理情報学専攻修士1年)
1
成績評価の方法 計算科学 I については
小テスト 40%:講義・実習資料・ノート持込可,担当教員への質問可
定期試験 60%:筆記用具以外は持込不可
計算科学実習 I については
平常点 20%:演習・実習の達成状況(締切に遅れた場合もチェックします)
TAチェック と書かれた課題は担当教員かTAのチェック受けること
その他の課題は自分自身でチェックリストに記録すること
小テスト 20%:講義・実習資料・ノート持込可,担当教員・TAへの質問可
定期試験 60%:プログラムを作成し,実行結果を提出する形で実施
どちらについても,最高評価100点の範囲内でボランティア・ポイントを加
算します.
携帯電話を用いた出欠管理システムを利用して出席を確認することがありま
す.また,不特定少数の学生に対してのみ出席を確認することもあります.欠
席の場合は,成績評価の際に減点します.
到達目標 計算科学 I,計算科学実習 I の到達目標はつぎの通りです:
1.Linux の利用環境を整備すること.
Linux の基本的なコマンドを復習し,ファイルを分別することなどにより,
Linux の利用環境を整えます.
2.フーリエ級数展開するプログラムを作成し,さらに gnuplot によってフー
リエ級数の収束状況を体験すること.
信号処理に現れる矩形波,ノコギリ波,パルス波などだけではなく,周期を
持つ波(同じ形を繰り返す波)は,簡単なものも複雑なものも,単純な波(正弦
波と余弦波)を足し合わせることによって近似できます.この作業を「周期関
数をフーリエ級数展開によって近似する」といいます.このようにして,フー
リエ級数展開の基礎との適用方法を学修します.
3.常微分方程式系の数値解法を身に付け,解軌道などの可視化によってダイ
ナミクスを理解するスキルを取得すること.
常微分方程式系の数値計算法を学びます.振り子などの力学的な運動や抵
抗・コイル・コンデンサなどから構成される電気回路のダイナミクスは常微分
方程式系によって表現されますから,数値計算を行うことによって,現象をシ
ミュレートすることができます.
2
1
Linux 超入門
計算科学 I,計算科学実習 I では Windows ではなく,Turbolinux を用います.
したがって,コンピュータを起動したら,Turbolinux を選び,ユーザ名とパス
ワードを入力します.
以下の Linux の超基本的な操作を身に付けましょう.
1.
(コンソールを開く)画面左上のコンソールと書かれたアイコンをダブル・
クリックしましょう.するとコンソールが開きます.コンソールを消すためには
exit
と打って Enter を押します.やってみましょう.
もう一度コンソールを開き,コンソールの左上の「シェル− Konsole」と書
かれた部分をドラッグして,コンソールを画面の右下に移動しておきましょう.
さらに,もう1枚のコンソールを開き,画面の右上に移動しておきましょう.そ
して,3枚目のコンソールも開きましょう.
このように3∼4枚くらいのコンソールを開いておくと,作業を効率的に進
めることができます.
° ここまでよく理解できたら左のまるの中にチェックを入れなさい.
2.
(ファイル一覧の表示)どれかのコンソールで
ls
と打って Enter を押してみましょう.
(以下では「と打って Enter を押して」を
省略します.
)ls というコマンドを用いて,そのディレクトリにあるファイル
やディレクトリを表示することができます.もっと詳細な情報を表示するため
には
ls -l
とします.ls -l としたときに表示される一覧のうちで,左端に d があるもの
がディレクトリ,無いものがファイルです.
° ここまでよく理解できたら左のまるの中にチェックを入れなさい.
3
3.
(私はどこにいるの?,ディレクトリの移動)3枚目のコンソールで
pwd
としましょう.あなたの学籍番号が t067123 ならば /home/t067123 と表示さ
れるでしょう.すなわち,/home/ に続いてあなたの学籍番号が表示されます.
ここがあなたのホームディレクトリです.pwd は present working directory
の頭文字を並べたコマンドであり,コンソールの現在の居場所(ディレクトリ)
を示します.
ディレクトリを移動するコマンドは cd です(change directory).ホーム
ディレクトリで
ls -l
とすれば,ここに MyDocument というディレクトリがあることがわかるでしょ
う.このディレクトリには cd MyDocument で移動できます.実際,
cd MyDocument
pwd
とすれば /home/t067123/MyDocument のように表示されるでしょう.
° ここまでよく理解できたら左のまるの中にチェックを入れなさい.
最初に開いたコンソールをクリックして
pwd
とすれば /home/t067123 のように表示されるでしょう.コンソールごとに居場
所(ディレクトリ)が異なることを理解しましょう.
° ここまでよく理解できたら左のまるの中にチェック入れなさい.
3枚目のコンソールに戻りましょう.1つ上のディレクトリは .. (ドット
が2つ)で表されます.したがって,cd .. で1つ上のディレクトリに戻るこ
とができます.実際,
cd ..
pwd
とすれば /home/t067123 のように表示されるでしょう.
4
° ここまでよく理解できたら左のまるの中にチェックを入れなさい.
ホームディレクトリは ~(tilde)でも表すことができます.どのディレク
トリに居ようと cd ~ でホームディレクトリに戻れます.どこかのディレクト
リに移動した後,cd ~ でホームディレクトリに戻って見ましょう.
° やってみて,成功したら左のまるの中にチェックを入れなさい.
4.
(ダウンロード・解凍・展開)ウェブにおいてあるサンプルプログラムをダ
ウンロードして,解凍・展開しましょう.
画面の下側にある地球の形をしたアイコンをダブル・クリックしてブラウザ
を起動し,数理情報学科のウェブサイト(http://www.math.ryukoku.ac.jp/)
に行きましょう.ここは良く使うので,このページをブックマークすることを
お勧めします.連絡先&アクセスを選択し,さらに,教員一覧から池田勉の右
にある personal をクリックすれば,池田勉のウェブサイトに行きますから,
計算科学・計算科学実習・計算科学特論
という長いボタンをクリックします.こうして,計算科学 I,計算科学実習 I の
ページにたどりつきます.このページもブックマークすることをお勧めします.
「計算科学 I,計算科学実習 I のサンプルプログラム」をクリックしてダ
ウンロードしましょう.
「このファイルをディスクに保存する」を選んで OK を
クリックして下さい.さらに,ファイルの場所がホームディレクトリ(たとえ
ば,/home/t067123)になっていることを確認したら「保存」をクリックして
下さい.
最初に開いたコンソールに戻って
ls -l
としましょう.すると,csc08.tar.gz という名前のファイルが増えたことが
わかるでしょう.
° ここまでできたら左のまるの中にチェックを入れなさい.
このファイルは圧縮されてますから
gunzip csc08.tar.gz
で解凍しましょう.もう一度
5
ls -l
とすると,csc08.tar.gz が無くなって,新たに csc08.tar ができたことがわ
かるでしょう.csc08.tar.gz が解凍されて csc08.tar になりました.
° ここまでできたら左のまるの中にチェック入れなさい.
ついで,csc08.tar を展開するために
tar xvf csc08.tar
とし,これが完了したら ls -l をまたやりましょう.csc08 という新しいディ
レクトリができていることに気づきましたか?
° ここまでよく理解できたら左のまるの中にチェックを入れなさい.
5.
(実行形式ファイルの作成(超簡単編))新しくできたディレクトリ csc08 に
移動しましょう.ls -l で,sort2.c,inner_product.c,norm.c というファ
イルと sample_dir_1,sample_dir_2 というディレクトリがあることを確認し
ましょう.
° ここまで確認できたら左のまるの中にチェックを入れなさい.
sort2.c は入力された2つの double 型の数を降順に並べるプログラムで
す. 実行形式ファイル a.out は
cc sort2.c
によって作成されます.
(
) ( )
a
c
inner_product.c は入力された2つのベクトル
と
の内積を計
b
d
算するプログラムをです(成分は double 型の数). 実行形式ファイル a.out は
cc inner_product.c
によって作成されます.
norm.c は3次元のベクトルの成分を入力させ,そのベクトルの長さを計算
するプログラムです. 実行形式ファイル a.out は
cc norm.c -lm
6
によって作成されます(数学関数 sqrt() を使用するので -lm が必要).
° 3つとも実行できたら左のまるの中にチェックを入れなさい.
6.
(TAB や上向き矢印)TAB や上向き矢印を上手に使うとキーボードからの入
力を楽にできます.その方法については,担当教員かTAにたずねなさい.
° 上記の方法を理解できたら左のまるの中にチェックを入れなさい.
7.
(ファイルの編集)計算科学 I,計算科学実習 I では,ファイルを編集する
ためには emacs を用いなさい.emacs を
emacs &
によって起動し,sort2.c,inner_product.c,norm.c の内容を確認しなさい.
emacs は emacs (file_name) & の形ではなく,上記のように emacs & の形で
使いなさい.emacs の簡単な使用方法(ファイルを開く,ファイルを保存する,
emacs を終了する)については,担当教員かTAにたずねなさい.
° ここまでできたら左のまるの中にチェックを入れなさい.
8.
(ファイルのコピー)新しくプログラムを作る際には,似たような機能を持
つプログラムがあればそれをコピーして作業を進めるのが便利です.cp という
コマンドで copy できます.cp には大雑把に言うと2通りの使い方があります:
1番目 cp (ファイル名1) (ファイル名2)
2番目 cp (ファイル名) (ディレクトリ名)
1番目の例として,/home/t067123/csc08 において
cp sort2.c sort3.c
cp sort2.c sample_dir_1/sort4.c
としなさい.cp sort2.c sort3.c によって sort2.c と全く同じ内容の別の
ファイル sort3.c ができます.cp sort2.c sample_dir_1/sort4.c によって
sort2.c と全く同じ内容の別のファイル sort4.c がディレクトリ sample_dir_1
の中にできます.
° ls(ls -l),cd,pwd を用いて,上記のことを確認できたら左のまるの中
7
にチェックを入れなさい.
2番目の例として,/home/t067123/csc08 において
cp inner_product.c sample_dir_1
cp norm.c sample_dir_2
としなさい.cp inner_product.c sample_dir_1 によって inner_product.c
がディレクトリ sample_dir_1 の中にもできます.同様に,cp norm.c sample_dir_2
によって norm.c がディレクトリ sample_dir_2 の中にもできます.
ここまですると,ファイル・ディレクトリ構造はつぎのようになります:
/home/t067123/csc08 には
ディレクトリ sample_dir_1,sample_dir_2 と
sort2.c,inner_product.c,norm.c,sort3.c などのファイルがある
/home/t067123/csc08/sample_dir_1 には
ファイル sort4.c,inner_product.c がある
/home/t067123/csc08/sample_dir_2 には
ファイル norm.c がある
° cd,pwd,ls(ls -l) を用いて,上記のことを確認できたら左のまるの
中にチェックを入れなさい.
9.
(ファイルの名称変更・移動)ファイルの名前を変えたり,ファイルを移動
するコマンドは mv です(move).mv には大雑把に言うと3通りの使い方があ
ります:
1番目 mv (ファイル名1) (ファイル名2)
2番目 mv (ファイル名) (ディレクトリ名)
3番目 mv (ディレクトリ名1) (ディレクトリ名2)
1番目の例として,/home/t067123/csc08 において
mv sort3.c sort5.c
としなさい.すると,sort3.c が無くなって sort3.c と全く同じ内容のファイ
ル sort5.c ができます.すなわち,名前が sort3.c から sort5.c に変更され
ました.
° ls(ls -l) を用いて,上記のことを確認できたら左のまるの中にチェッ
クを入れなさい.
8
2番目の例として,/home/t067123/csc08 において
mv sample_dir_2/norm.c sample_dir_1
としなさい.すると,/home/t067123/csc08/sample_dir_2 にあったファイル
norm.c が /home/t067123/csc08/sample_dir_1 に移動されます.
° cd,pwd,ls(ls -l) を用いて,上記のことを確認できたら左のまるの
中にチェックを入れなさい.
3番目の例として,/home/t067123/csc08 において
mv sample_dir_1 sample_dir_2
としなさい.こうすることによって,ディレクトリ sample_dir_1 がその中の
ファイル sort4.c,inner_product.c,norm.c とともに sample_dir_2 の中に
そのまま移動されます.
ここまでの操作を行うとすると,ファイル・ディレクトリ構造はつぎのよう
になります:
/home/t067123/csc08 には
ディレクトリ sample_dir_2 と
sort2.c,inner_product.c,norm.c,sort5.c などのファイルがある
/home/t067123/csc08/sample_dir_2 には
ディレクトリ sample_dir_1 がある
/home/t067123/csc08/sample_dir_2/sample_dir_1 には
ファイル sort4.c,inner_product.c,norm.c がある
° cd,pwd,ls(ls -l) を用いて,上記のことを確認できたら左のまるの
中にチェックを入れなさい.
10.
(ファイルの消去)ファイルを削除するコマンドは rm です(remove).
/home/t067123/csc08 において
rm sort5.c
とすると,確認を求めてきますので yes と答えれば,sort5.c が消去されます.
° やってみて成功したら左のまるの中にチェックを入れなさい.
9
11.
(ディレクトリの作成・消去)ディレクトリを作成するコマンドは mkdir
です(make directory).たとえば,/home/t067123/csc08 で
mkdir sample_dir_3
とすれば,ディリクトリ sample_dir_3 が作成されます.
ディリクトリを削除するためには,まず rm によってディリクトリの中を空
にし,その後 rmdir というコマンドを使います.
やってみよう1./home/t067123/csc08 にディレクトリ sample_dir_3 と
sample_dir_4 を作りなさい.
° これができたら左のまるの中にチェックを入れなさい.
やってみよう2./home/t067123/csc08/sample_dir_2/sample_dir_1 にある
ファイル norm.c をディレクトリ /home/t067123/csc08/sample_dir_3 にコ
ピーしなさい.
° これができたら左のまるの中にチェックを入れなさい.
やってみよう3./home/t067123/csc08/sample_dir_2/sample_dir_1 にある
ファイル inner_product.c をディレクトリ
/home/t067123/csc08/sample_dir_4 に移動しなさい.
° これができたら左のまるの中にチェックを入れなさい.
やってみよう4./home/t067123/csc08/sample_dir_2/sample_dir_1 にある
ファイル sort4.c をディレクトリ /home/t067123/csc08/sample_dir_4 に
sort0.c という名前でコピーしなさい.
° これができたら左のまるの中にチェックを入れなさい.
ここまでの操作を行うとすると,ファイル・ディレクトリ構造はつぎのよう
になります:
/home/t067123/csc08 には
ディレクトリ sample_dir_2,sample_dir_3,sample_dir_4 と
sort2.c,inner_product.c,norm.c などのファイルがある
/home/t067123/csc08/sample_dir_2 には
ディレクトリ sample_dir_1 がある
10
/home/t067123/csc08/sample_dir_2/sample_dir_1 には
ファイル sort4.c,norm.c がある
/home/t067123/csc08/sample_dir_3 には
ファイル norm.c がある
/home/t067123/csc08/sample_dir_4 には
ファイル inner_product.c,sort0.c がある
° cd,pwd,ls(ls -l) を用いて,上記のことを確認できたら左のまるの
中にチェックを入れなさい.
課題1−1 ディレクトリ /home/t067123/csc08 の中のディレクトリ sample_dir_2,
sample_dir_3,sample_dir_4 を削除して,ディレクトリ /home/t067123/csc08
の中にはファイル sort2.c,inner_product.c,norm.c のみがある状態にしな
さい.
課題1−2 sort2.c を参考にして,3つのの double 型の数を入力させ,そ
れらを降順に並べるプログラムを作りなさい. なお,この作業は sort2.c を
sort3.c にコピーし,sort3.c を emacs で編集することによって行いなさい.
課題1−3 inner_product.c を参考にして,自然数 n を入力させ,さら
に2つの n 次元のベクトルの成分を入力させ,その2つのベクトルの内積を
計算するプログラムを作りなさい. なお,この作業は inner_product.c を
g_inner_product.c にコピーし,g_inner_product.c を emacs で編集する
ことによって行いなさい.
12.
(オンラインマニュアル)オンラインマニュアルが用意されています.た
とえば,
man sin
とすれば,正弦関数の値を計算する関数 sin() の使い方が表示されます.それ
だけではなく,関数 sin() の仲間に,acos(),asin(),atan(),cos(),tan()
があることも表示されます.
° 逆余弦を計算する関数を見つけたら左のまるの中にチェックを入れなさい.
11
課題1−4 自然数 n を入力させ,さらに2つの n 次元のベクトルの成分を
入力させ,その2つのベクトルがなす角度を計算するプログラムを作りなさい.
なお,この作業は g_inner_product.c を angle.c にコピーし,angle.c を
emacs で編集することによって行いなさい.
2つのベクトル a と b がなす角度を θ とすれば
cos θ = √
a·b
(a · a)(b · b)
が成立します.したがって,2つのベクトルの内積を計算する関数を作り,こ
れを3回呼び(a · b,a · a,b · b を計算),最後に逆余弦を計算する関数を使
う形で目的ののプログラムを作成できます.
13.
(PATH を通す)《課題1−2∼4》ができたので,a.out としたら
bash: a.out: command not found
とメッセージがでた人はいませんか?これは,
「a.out という名前のコマンドが
無いよ(だから,実行できません)」というメッセージです.でも,ls -l で調
べたらわかるように確かに a.out はありますよね.
このようなことが発生するのは,現在いるディレクトリ(「カレント・ディ
レクトリ」という)がコマンドを探す範囲に含まれていないからです.カレン
ト・ディレクトリをコマンドを探す範囲に含める(このことを「PATH を通す」
という)に,各自のホームディレクトリにある .bashrc を emacs でつぎのよ
うに変更しなさい(.bashrc の存在は ls -al によって確かめることができま
す)
:
alias rm=’rm -i’ の前に PATH="$PATH:." という行を挿入する.
このように変更して .bashrc を保存した後から開いたコンソールでは,カレン
ト・ディレクトリにパスが通っています.
課題1−5(TAチェック) 前述の作業を行い,カレント・ディレクトリに
PATH が通るようにしなさい.
14.
(ファイルやディレクトリの名称)ファイルやディレクトリの名称には半
角の英数字だけを用いなさい.日本語などの2バイト系の文字の使用は止めな
さい.
12
15.
(ファイルの分別)1回生や2回生の実習の際に作成したファイルがホー
ムディレクトリに溢れている学生を散見します.ディレクトリを作ってファイ
ルを区分けしましょう.ディレクトリの名称には科目名 computer_software,
algorithms,programming,numerical_analysis を使ったり,あるいは,担当
教員と年度を組み合わせ(nakano06,hiroshi06,matsukidaira07,junta07
など)たらいかがでしょうか.
ファイルをまとめて移動する場合には * が便利です.たとえば,
mv enshu*.c (ディレクトリ名)
とすれば enshuu で始まって .c で終わるすべてのファイルが移動されます.詳
しくは,http://www.roes.ryukoku.ac.jp/ から [Linux 関係マニュアル] を
経て [コマンドガイド] を選び,[1.2.5 ワイルドカード] を調べなさい.
ワイルドカードは mv だけではなく,cp,rm,ls などでも使えます.
課題1−6(TAチェック) ホームディレクトリに適切なディレクトリを作
成し,これまでに作成したファイルを整理しなさい.
13
Fly UP