応用解析IV 数値積分課題のためのメモ (0) ni.tar.gz を入手する。 http://www.math.meiji.ac.jp/~mk/lecture/ouyoukaiseki4/ に置いてある。 (1) ni.tar.gz から元のファイルを復元する。 gtar xzf ni.tar.gz ni というディレクトリィ (フォルダ) ができて、そこに C のプログラム などができる。 確認するには cd ni ni に移動 ls ファイル名を表示 (2) サンプル・プログラムの手動でのコンパイル (make で全自動にできるが、 手動でやるにはどうするか?) まず C プログラム nint.c をコンパイルして、機械語ファイル nint.o を 作る。それには gcc -c nint.c とする。 C プログラム nint1.c をコンパイル&リンクして、nint1 という実行可能 なプログラムを作る。 gcc -o nint1 nint1.c nint.o -lm ほとんどのプログラムがこうやってできる。詳細は Makefile に記述されて いる (ちょっと難しいかもしれない。分からなければ質問して下さい。)。 (3) サンプル・プログラムの実行 nint1 を実行するには ./nint1 と打つ。他も同様にできる。 グラフを描いたり、レポートのためには、結果をファイルに記録する必要が ある。それには入出力のリダイレクション機能を使うと良い。 ./プログラムの名前 > 自分の決めたデータ・ファイルの名前 とする。たとえば ./nint1 > nint1.out とすると、nint1 の出力が nint1.out という名前のファイルに記録される。 中身を確認する (画面に表示する) には cat nint1.out 印刷するには lp nint1.out または a2ps -p nint1.out | lp (4) 今回のようなグラフを描くには gnuplot コマンドを使うと良い。 参考 http://www.math.meiji.ac.jp/%7Emk/labo/howto/gnuplot/ (a) gnuplot で関数のグラフを描く gnuplot> plot sin(x) gnuplot> plot [-5:5] sin(x),cos(x) gnuplot> plot tanh(pi*sinh(x)) gnuplot は円周率πも pi という名前で知っている。 関数の定義もできる。 gnuplot> f(x)=sqrt(1-x*x) gnuplot> plot [-1:1] f(x) (b) 計算したデータを元にグラフを描く gnuplot> plot "ファイルの名前" データファイルに3列以上の数値が並んでいるときは、 using ($1):(abs($2)) のようにして、どれを描くか指定する。 注意: データの中に数値データでないものが混じっていると、エラーになった りするので、それは削除しておくこと。今回の Makefile では、sed というコ マンドを使って、自動的に削除してあるが、mule などで編集しても良い。 サンプルでは、 set logscale xy plot "error1.table" using ($1):(abs($2)) with lines, \ "error1.table" using ($1):(abs($3)) with lines, \ "error1.table" using ($1):(abs($4)) with lines のようにしている。ここで \ は次の行に続くことを表す。 (c) メモ ・対数目盛りにするには gnuplot> set logscale xy のようにする (今回は極端に大きな数、小さな数が出てくるので、こうし ておく必要がある)。 ・点を線でつないで折れ線グラフにするには、 with lines とする。 ・コマンドが複雑な場合は、コマンドをファイルに書いておいて (要するに プログラム)、実行させることができる。 gnuplot コマンドを入れたファイルの名前 たとえばサンプルでは gnuplot show_error1.gp のようにしている。show_error1.gp の中身は ----------------------------------------------------------------- # show_error1.gp --- gnuplot 用プログラム # ./nint1 > error1.table として作ったデータを読んでグラフを描く # 結果を error1.eps に出力 set logscale xy plot "error1.table" using ($1):(abs($2)) with lines, \ "error1.table" using ($1):(abs($3)) with lines, \ "error1.table" using ($1):(abs($4)) with lines pause -1 "終了するにはリターンを押してください" set term postscript eps set output "error1.eps" replot ----------------------------------------------------------------- ・印刷するには term を "postscript eps", output を適当なファイル名 (例えば "graph.eps" とか) に設定してから、replot (再表示する) と良い。 出力先を画面に戻すには term を "x11" にする。 gnuplot> plot f(x) gnuplot> set term postscript eps gnuplot> set output "graph.eps" gnuplot> replot gnuplot> set term x11