数値シミュレーション 第 3 回 教材 担 当 神保 雅人 2014 年 10 月 10 日(金)実施 計算結果の可視化 -グラフの作成- 計算結果の可視化の必要性 数値計算で得られた結果は,簡単には数式で表せない場合もあるが,複数の数値の組として得 られるので,それらに基づいてグラフを作成することにより,定量的な振る舞いが捉え易くなる。 また,グラフから計算結果の数値の組以外の数値の組を予測することも可能となる。 なお,数値計算そのものに誤りがある場合には,グラフ上の不自然な挙動から誤りを発見でき る場合もある。 数値シミュレーションでは,計算結果をファイルに書き出し,グラフ作成ソフトウェアに読み 込ませてグラフを作成する方法がよく用いられる。グラフ作成のフリーソフトウェアとしては, 代表的なものに GNUPLOT があり,この授業では Java 言語でテキストファイルに書き出させた データを GNUPLOT に読み込ませて,グラフを作成する。 * Java 言語プログラミングでは,applet を作成することにより,計算結果を直接描画すること もしばしば行われる。 ** GNUPLOT は http://www.gnuplot.info/より『Version 4.6 patchlevel 6』 (現時点での最新 版)をダウンロードして,H:¥gnuplot にインストールする。利用方法は授業で解説する。 【文献】神保雅人, 『自然科学研究の第一歩 -グラフ作成ソフトウェアの利用-』 , パソコンリテラシ第 25 巻第 5 号,pp.3-8,2000 年 (原稿は http://www5d.biglobe.ne.jp/~jimbo_m/TMC/pdf/GNUPLOT.pdf で参照可能) 例題 1 次のプログラムは y = x − 3 のグラフを作成するために,(x, y)の組を 101 点分,テキストフ ァイルに書き出させるものである。これを入力,ビルドして,実行せよ。ここで,クラス名は Sample3_1,ソースファイル名は Sample3_1.java とする。 なお,Eclipse では,保管の後にそのまま実行して『利用法:java Sample3_1 出力ファイル名』 がコンソールに出るのを確認したら,[実行]→[実行構成]を選択し,[引数]タブを開き,out1.txt を入力して実行ボタンをクリックする。 また,out1.txt を GNUPLOT で読み込み,グラフを作成せよ。 import import import import import java.io.BufferedWriter; java.io.FileNotFoundException; java.io.FileWriter; java.io.IOException; java.io.PrintWriter; public class Sample3_1 { - 1 - 数値シミュレーション 第 3 回 教材 担 当 神保 雅人 public static void main(String[] args) { final double a=0.0, b=3.0; double x=a, y, d; final int n=100; d=(b-a)/n; if (args.length != 1) { System.out.println("利用法:java Sample3_1 出力ファイル名"); System.exit(1); } String fname = args[0]; try { PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(fname))); for (int i=0; i<=n; i++) { y=x*x-3.0; pw.println(x+" "+y); x+=d; } pw.close(); } catch (FileNotFoundException fe) { System.out.println(fname +"というファイルが開けません"); } catch (IOException err) { System.out.println("IOException をキャッチ"+err); } } } 例題 2 次のプログラムは正規分布 y = e (exp[−x ] とも書く) のグラフを作成するために,(x, y) の組を 101 点分,テキストファイルに書き出させるものである。これを入力,ビルドして,実行 せよ。ここで,クラス名は Sample3_2,ソースファイル名は Sample3_2.java とし,出力ファイル 名は out2.txt とする。 また,out2.txt を GNUPLOT で読み込み,グラフを作成せよ。 import import import import import java.io.BufferedWriter; java.io.FileNotFoundException; java.io.FileWriter; java.io.IOException; java.io.PrintWriter; public class Sample3_2 { public static void main(String[] args) { final double a=0.0, b=3.0; double x=a, y, d; final int n=100; - 2 - 数値シミュレーション 第 3 回 教材 担 当 神保 雅人 d=(b-a)/n; if (args.length != 1) { System.out.println("利用法:java Sample3_2 出力ファイル名"); System.exit(1); } String fname = args[0]; try { PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(fname))); for (int i=0; i<=n; i++) { y=Math.exp(-x*x); pw.println(x+" "+y); x+=d; } pw.close(); } catch (FileNotFoundException fe) { System.out.println(fname +"というファイルが開けません"); } catch (IOException err) { System.out.println("IOException をキャッチ"+err); } } } 演習 1 y = √x − 0.5 のグラフを作成するために,(x, y)の組を x の値が 0.0 から 4.0 までの 101 点分, テキストファイルに書き出させるプログラムを作成し,ビルドして,実行せよ。ここで,クラス 名は Ex3_1,ソースファイル名は Ex3_1.java とし,出力ファイル名は out3.txt とする。 また,out3.txt を GNUPLOT で読み込み,グラフを作成せよ。 今回の提出物 1) Ex3_1.java 2) out1.txt,out2.txt, out3.txt から GNUPLOT で作成したグラフのウィンドウで 『Toggle grid』 ボタンを押してグリッドを表示させたものを『Copy the plot to clipboard』ボタンを押してクリ ップボードにコピーし,Word 文書に貼り付けて,第 3 回課題.docx の名前で保存したもの - 3 -
© Copyright 2024 ExpyDoc