今回は『プログラミング演習 2.1 関数値の計算 a』です。 演習問題はこちら:
関数
の値を画面に表示するプログラムを書け。 はパラメータである。
Groovy による実装
まずは Groovy による実装。 Groovy のプログラミング演習です。def params = initial() double a = params.a double b = params.b def f = { double x -> a * Math.exp(-b * x) } // 関数に対応するクロージャ(オブジェクト)の生成 calculate(f, params.xmin, params.xmax, params.dx) /** パラメータを初期化する */ def Map initial(){ def params = [:] // 空の Map を生成 def scan = new Scanner(System.in) println 'a :' ; params.a = scan.nextDouble() // セミコロン (;) で行を区切ることも可 println 'b :' ; params.b = scan.nextDouble() println 'xmin :' ; params.xmin = scan.nextDouble() println 'xmax :' ; params.xmax = scan.nextDouble() println 'dx :' ; params.dx = scan.nextDouble() return params } /** 指定された区間、幅で関数を評価して表示する */ def calculate(Closure f, double xmin, double xmax, double dx){ for(double x = xmin; x <= xmax; x += dx){ double y = f(x) // クロージャは () もしくは call() メソッドで評価を実行できる // double y = f.call(x) と同じ println "$x, $y" } }
- パラメータ a, b、xmin, xmax, dx は、それぞれ x の最小値、最大値、サンプリング幅です。
- initial() メソッドは、a, b, xmin, xmax, dx の入力を求めて初期化します。
- calculate() メソッドは、問題の関数に対応するクロージャとサンプリング情報 (xmin, xmax, dx) をとり、関数を評価して結果を出力します。
クロージャを使うと、関数をオブジェクトとして扱えるので分かりやすいと思います。
Groops による実装
次は Groops による実装。 値の入力は Groovy の場合と同様にできるので、ここでは実装していません。 Groops では、物理系として数学関数を扱いたい場合は function ノードで比較的簡単に対応する PhysicalSystem オブジェクトを取得できるようにしています。 また、xmin, xmax, dx などのパラメータを指定しておけば、初期条件や反復条件を書く必要はありません(書いても構いませんが)。@GrabResolver('https://github.com/waman/groops-core/tree/master/repo') @Grab('org.waman.groops:groops-core:0.1-beta') import org.waman.groops.builder.SimulationBuilder double a = 1d, b = 1d double xmin = -5d, xmax = 5d, dx = 0.1d new SimulationBuilder().simulation{ function(y:{ double x -> a*Math.exp(-b*x) }, xmin:xmin, xmax:xmax, dx:dx) console() png(fileName:'exercise2_1a.png', overwrite:true){ chart(title:'exercise 2.1 a'){ line(label:'a*exp(-bx)', x:'x', y:'y') } } }.simulate()
出力されるグラフは以下のようになります:
- 作者: ハーベイゴールド,ジャントボチニク,Harvey Gould,Jan Tobochnik,鈴木増雄,石川正勝,溜渕継博,宮島佐介
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/12
- メディア: 単行本
- 購入: 1人 クリック: 28回
- この商品を含むブログ (45件) を見る
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (155件) を見る