2:フラクタクル関係(プログラミング)
 思いついたら、そのままフローチャートもかかずに、一気にパソコンに向かってしまうタチなので、ハッキリ言って良いプログラム(洗練されたプログラム)ではありません。Select Case 文などを使えばもっとスッキリしたものになるでしょうし、IF文の中身をもっと整理しないといけませんし、そもそも構文全体において無駄の無いようにするのがプログラマーの腕の見せ所ですが、それはみなさんにお任せすることにします。
結 果
黒、灰色等、暗い色の点は解への収束が速いことを示します。ここではQBColorでおおざっぱな色つけをしてありますが、力のある人はRGB等でもっと細かく色つけをするとよいと思います。また、この図は原点周辺の一辺の長さが2の正方形の領域で調べてありますが、この中の小さい領域をさらに調べて拡大表示していくことで、マンデルブロート集合を表す図形に出会えるかも知れません。変数の精度やx1,y1の値等を変えてみると面白いと思います。command2は今回は関係ありません。将来的にジュリア集合を求めたりするのに使おうかなと考えています。



プログラム
 x^3=1の解はx=1,x=-1/2+i(sqr(3))/2、x=-1/2-i(sqr(3))/2で、sqr(3)/2=0.866にしています。解への収束は解を表す点を囲む小さな円領域に達することで判定しています。
プログラム
Dim x, x1, y, y1, xx, yy, t As Double
Dim xi, yi, s, c, i, bindex, imin As Integer      こっちは(General)の設定
-------------------------------------------------------------------------------------
Private Sub Command1_Click()

For x1 = -1 To 1 Step 0.01              調べる範囲の設定
 For y1 = -1 To 1 Step 0.01

 x = x1
 y = y1
 s = 0

 If x1 = 0 And y1 = 0 Then
  x = 0.001                       ここら辺はオーバーフロー対策のごまかし
  y = 0.001
 End If


For i = 1 To 50                     i で収束の早さを判定します。

 t = x * x + y * y                    Newton法での設定
 xx = t * (2 * x * t + 1) - 2 * y * y
 yy = 2 * y * (t * t - x)
 x = xx / (3 * t * t)
 y = yy / (3 * t * t)

If (x - 1) * (x - 1) + y * y < 0.0001 Then      解x=1(y=0)を囲む円領域
  bindex = 0
 If s = 0 Then
  imin = i
  s = 1                          最小の i が残るような対策
 End If
End If

If (x + 0.5) * (x + 0.5) + (y - 0.866) * (y - 0.866) < 0.0001 Then
  bindex = 1                       解x=-1/2+i(sqr(3))/2を囲む円領域
 If s = 0 Then
  imin = i
  s = 1
 End If
End If

If (x + 0.5) * (x + 0.5) + (y + 0.866) * (y + 0.866) < 0.0001 Then
  bindex = 2                       解x=-1/2-i(sqr(3))/2を囲む円領域
 If s = 0 Then
  imin = i
  s = 1
 End If
End If

Next i

If bindex = 0 Then
  c = 10                          収束の遅い点の色を先に設定

 If imin <= 2 Then
  c = 0
 End If

 If imin >= 3 And imin <= 4 Then
  c = 8
 End If

 If imin >= 5 And imin <= 8 Then
  c = 2
 End If

   xi = Int(100 * x1) + 130              Int(100*x1+130)では誤差が生じます。
   yi = 130 - Int(100 * y1)              Int(130-100*y1)では誤差が生じます。
   Picture1.PSet (xi, yi), QBColor(c)        色の付いた点を表示
                                130の値は設定の項を参照
End If

If bindex = 1 Then
  c = 12
 If imin <= 2 Then
  c = 0
 End If

 If imin >= 3 And imin <= 4 Then
  c = 8
 End If

 If imin >= 5 And imin <= 8 Then
  c = 4
 End If


   xi = Int(100 * x1) + 130
   yi = 130 - Int(100 * y1)
   Picture1.PSet (xi, yi), QBColor(c)

End If


If bindex = 2 Then
  c = 9
 If imin <= 2 Then
  c = 0
 End If

 If imin >= 3 And imin <= 4 Then
  c = 8
 End If

 If imin >= 5 And imin <= 8 Then
  c = 1
 End If


   xi = Int(100 * x1) + 130
   yi = 130 - Int(100 * y1)
   Picture1.PSet (xi, yi), QBColor(c)

End If


 Next y1
Next x1

End Sub

設 定
 プログラムで130という値が出てきますが、ScaleHeightとScaleWidthが263なので、真ん中ぐらいが原点になるように130を採りました
PictureBox設定

(注意)AutoRedrawがFalseの設定です。
                      戻 る