またまた関数をプロットするサンプル。 今回はちょっとパラメータを変えるといろいろな図形になるリサージュ図形です。
問題
座標が
で与えられる曲線が出発点に戻って繰り返し描かれるとき、そのような曲線をリサージュ (Lissajous) 図形という。 角振動数 がどのようなときにリサージュ図形になるだろうか。 初め、
とし を に対してプロットするプログラムを書け*1。
与えられたパラメータで曲線の方程式を書き下すと
となります。
リサージュ図形となるための条件
与えられた はとも周期関数で、周期はそれぞれ です。 この曲線がリサージュ図形になるためには、ある自然数 に対して
が成り立つことです。 これを少し変形すると
となり、 の角振動数が有理数比であればいいことが分かります。
シミュレーション・スクリプト
問題では、パラメータをあれこれ変えて考察せよ、みたいなことが書いてますが、ここでは与えられたパラメータでのプロットのみを行います:@GrabResolver('https://github.com/waman/groops-core/tree/master/repo') @Grab('org.waman.groops:groops-core:0.2-beta') import org.waman.groops.builder.SimulationBuilder import org.waman.groops.simulation.system.* import static java.lang.Math.* def a = 1d, omega_x = 2d, phy_x = PI/6d def b = 1d, omega_y = 3d, phy_y = PI/4d new SimulationBuilder().simulation{ function(xy:{ double t -> [a*sin(omega_x*t + phy_x), b*cos(omega_y*t + phy_y)] }, tmin:0d, tmax:2d*PI, dt:0.01d) //function(x:{ double t -> a*sin(omega_x*t + phy_x) }, // y:{ double t -> b*cos(omega_y*t + phy_y) }, // tmin:0d, tmax:2d*PI, dt:0.01d) png(fileName:'problem2_6.png', overwrite:true){ chart(title:'Problem 2.6', domainLabel:'x', rangeLabel:'y'){ dot(label:"Simulation", x:'x', y:'y') } } }.simulate()
- problem2_6.groovy
- function ノードの xy 属性に、引数が1つ(サンプルでは t )のクロージャを渡すと、媒介変数表示のグラフをプロットできます。 返り値は Double の List (成分は2つ)にします。
- コメントアウトしてますが、function ノードの x, y 属性にそれぞれ媒介変数 (t) から値を計算するクロージャを渡しても同様のプロットができます。
シミュレーションを実行すると、以下のようなチャートが生成されます:
追記
『計算物理学入門』の本文ではプロットを時間経過と共に描けという問題だったので、そういうサンプルも載せておきます。 Groops のバージョンは 0.2-beta 以降が必要です:@GrabResolver('https://github.com/waman/groops-core/tree/master/repo') @Grab('org.waman.groops:groops-core:0.2-beta') import org.waman.groops.builder.SimulationBuilder import org.waman.groops.simulation.system.* import static java.lang.Math.* def a = 1d, omega_x = 2d, phy_x = PI/6d def b = 1d, omega_y = 3d, phy_y = PI/4d new SimulationBuilder().simulation{ function(xy:{ double t -> [a*sin(omega_x*t + phy_x), b*cos(omega_y*t + phy_y)] }, tmin:0d, dt:0.1d) continueUntilKeyPress() swing{ chart(title:'Problem 2.6'){ point(label:"Simulation", x:'x', y:'y') } } }.simulate()
- problem2_6_swing.groovy
- 標準入力でキーを入力([Enter] を押す必要在あり)すると、シミュレーションが終了します。 ただし、GUI は終了されないので別途「×」ボタンで閉じてください。
- swing ノードで Swing の GUI を起動してデータ出力を GUI に出力できます。 ただし、現在のところ、Swing GUI に出力できるのはチャートだけです。
- 作者: ハーベイゴールド,ジャントボチニク,Harvey Gould,Jan Tobochnik,鈴木増雄,石川正勝,溜渕継博,宮島佐介
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/12
- メディア: 単行本
- 購入: 1人 クリック: 28回
- この商品を含むブログ (45件) を見る
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (155件) を見る
*1:少し問題を省略しています。