vba seminar banner 
    Home   >>   Quiz   >>  Ammonite
"アンモナイト" 
"出力例"
反復関数系を使ってアトラクターを生成するカオスゲームプログラムを作成しろ(アンモナイトVer.)

10000 個のxとyのデータを生成して、散布図を描く。


ammonite01
"サンプルマクロ01"
"ヒント・解説01"
Public Sub Ammonite01()

Dim i As Long
Dim w1 As Worksheet
Dim x As Double, y As Double, xn As Double, yn As Double, k As Double

Set w1 = Worksheets(1)

Const n As Long = 10000 'データ数

x = 0: y = 0 '初期値

w1.Cells(1, 1) = x: w1.Cells(1, 2) = y

For i = 1 To n 'データ生成
  
    Randomize: k = Rnd()
 
    If k < 0.06 Then
        xn = -0.29 * x + 0.59
        yn = -0.2 * y - 0.32
    ElseIf k >= 0.06 And k < 0.06 + 0.02 Then
        xn = -0.07 * x - 0.02 * y + 0.79
        yn = -0.01 * x + 0.29 * y - 0.06
    Else
        xn = 0.94 * x - 0.22 * y - 0.05
        yn = 0.21 * x + 0.96 * y + 0.01
    End If
 
    w1.Cells(i + 1, 1) = xn: w1.Cells(i + 1, 2) = yn
   
    x = xn: y = yn

Next i

With Charts.Add 'グラフ作成

    .ChartType = xlXYScatter
    .SetSourceData Source:=w1.Range(w1.Cells(1, 1), w1.Cells(n, 2))
    
    .HasLegend = False
    .PlotArea.Interior.ColorIndex = xlNone
    
    With .SeriesCollection(1) 'マーカー変更
    
        .Smooth = False
        .MarkerSize = 2
        .MarkerStyle = xlMarkerStyleCircle
        .MarkerBackgroundColorIndex = 9
        .MarkerForegroundColorIndex = 9
    
    End With
            
End With

Set w1 = Nothing 'オブジェクトの解放

End Sub
	
  反復関数系を用いてアンモナイト状の画像を計算する

  初期値 :
  x0=0, y0=0

  座標変換1 (6%の確率で実行する) :
  xn+1=-0.29xn+0.59 , yn+1=0.2yn -0.32

  座標変換2 (2%の確率で実行する) :
  xn+1=-0.07xn-0.02yn+0.79 , yn+1=-0.01xn+0.29yn -0.06

  座標変換3 (92%の確率で実行する) :
  xn+1=0.94xn-0.22yn-0.05 , yn+1=0.21xn+0.96yn +0.01