Task

Calculate the Feigenbaum constant.



See

   Details in the Wikipedia article:   Feigenbaum constant.


 
{feigenbaum 11}  // on my computer stackoverflow for values greater than 11
-> [3.2185114220380866,4.3856775985683365,4.600949276538056,4.6551304953919646,4.666111947822846,
4.668548581451485,4.66906066077106,4.669171554514976,4.669195154039278,4.669200256503637]
 
with:
 
{def feigenbaum
 {lambda {:maxi}
  {f3 :maxi 10 1 0 3.2 0 {A.new} 2}}}
 
{def f3
 {lambda {:maxi :maxj :a1 :a2 :d1 :a3 :s :i}
  {if {< :i {+ :maxi 1}}
   then {let { {:maxi :maxi} {:maxj :maxj} {:a1 :a1} {:a2 :a2}
               {:a3 {f2 {+ :a1 {/ {- :a1 :a2} :d1}} :i :maxj 1} }
               {:s :s} {:i :i}
             } {f3 :maxi :maxj :a3 :a1 {/ {- :a1 :a2} {- :a3 :a1}} :a3
                   {A.addlast! {/ {- :a1 :a2} {- :a3 :a1}} :s} {+ :i 1}} }
   else :s}}}
 
{def f2
 {lambda {:a :i :maxj :j}
  {if {< :j {+ :maxj 1}}
   then {f2 {f1 :a :i 0 0 1} :i :maxj {+ :j 1}}
   else :a}}}
 
{def f1
 {lambda {:a :i :y :x :k}
  {if {< :k {+ {pow 2 :i} 1}}
   then {f1 :a :i {- 1 {* 2 :y :x}} {- :a {* :x :x}} {+ :k 1}}
   else {- :a {/ :x :y}} }}}
 
 