[math-fun] 1/2+i/4 is a quadruple point of the Hilbert curve.
(Which is obvious if you watch the sweep.) The preimages are {5/48, 7/48, 41/48, 43/48}. "Proof": In[19]:= Select[Tally[hilbert /@ Range[0, 1, 1/60/3/5/4]], #[[2]] > 2 &] Out[19]= {{{1/4 + I/4}, 3}, {{1/2 + I/4}, 4}, {{1/2 + I/2}, 3}, {{1/4 + I/2}, 3}, {{1/4 + (3 I)/4}, 3}, {{3/4 + I/2}, 3}, {{3/4 + (3 I)/4}, 3}, {{3/4 + I/4}, 3}} In[20]:= unbert[#[[1, 1]]] & /@ % Out[20]= {{1/24, 1/8, 5/24}, {5/48, 7/48, 41/48, 43/48}, {1/6, 1/2, 5/ 6}, {3/16, 13/48, 23/48}, {7/24, 3/8, 11/24}, {25/48, 35/48, 13/ 16}, {13/24, 5/8, 17/24}, {19/24, 7/8, 23/24}} unbert? hilbert, not Hilbert? Big news: Julian has delivered an astonishing little Mma function that subsumes *all* of my exact rational fractal evaluators, plus their (multivalued) inverses! E.g., 1/6+i/3 is a triple point of the Dragon[0,1] that joins 0+0i to 1+0i: In[5]:= undrag[1/6 + I/3] Out[5]= {13/60, 7/20, 23/60} In[35]:= dragun /@ %5 Out[35]= {{1/6 + I/3}, {1/6 + I/3}, {1/6 + I/3}} where dragun[t_] := piecewiserecursivefractal[t, Identity, Piecewise[{{{1}, 0 <= # <= 1/2}, {{2}, 1/2 <= # <= 1}}, {}] &, {2*# &, 2*(1 - #) &}, {(1 + I)*#/2 &, (I - 1)*#/2 + 1 &}] undrag[z_] := piecewiserecursivefractal[z, Identity, If[-(1/3) <= Re[#] <= 7/6 && -(1/3) <= Im[#] <= 2/3, {1, 2}, {}] &, {#*(1 - I) &, (1 - #)*(1 + I) &}, {#/2 &, 1 - #/2 &}] and the underlying little bombshell, ClearAll[piecewiserecursivefractal]; piecewiserecursivefractal[x_, f_, which_, iters_, fns_] := piecewiserecursivefractal[x, g_, which, iters, fns] = ((piecewiserecursivefractal[x, h_, which, iters, fns] := Block[{y}, y /. Solve[f[y] == h[y], y]]); Union @@ ((fns[[#]] /@ piecewiserecursivefractal[iters[[#]][x], Composition[f, fns[[#]]], which, iters, fns]) & /@ which[x])); (*[Julian's comment]: For example, here's a dragon (prf:=piecewiserecursivefractal):In[290]:=prf[7/22,Identity,Piecewise[{{{1},0\[LessEqual]#\[LessEqual]1/2},{{2},1/2\[LessEqual]#\[LessEqual]1}},{}]&,{2*#&,2*(1-#)&},{(1+I)*#/2&,(I-1)*#/2+1&}] Out[290]={23/82+(39 I)/82} It's written to allow multi-valued functions,and in particular can be used for the inverse dragon:In[289]:=prf[13/12+I/48,Identity,If[-(1/3)\[LessEqual]Re[#]\[LessEqual]7/6&&-(1/3)\[LessEqual]Im[#]\[LessEqual]2/3,{1,2},{}]&,{#*(1-I)&,(1-#)*(1+I)&},{#/2&,1-#/2&}] Out[289]={3793/3840,1267/1280,3803/3840} The parameters are x,the input;f,the tracking variable;which,which takes x and gives which (if any) of the iters and fns should be applied;iters,a list of functions (which specifies which ones to use) that take x and give a new x to feed back in;and fns,the functions (again specified by which) that take the whole fractal into part of itself.In order to convert a which,iters,fns triplet into the triplet corresponding to the inverse function,you replace iters and fns with each other's inverses,and think carefully about what which should look like for the inverse (in the case of a dragon or Hilbert curve*or another closed bounded fractal whose fns are contraction mappings you can just use a bounding box).Note that the implementation can be improved.In particular,if you have a particular kind of function in mind you could get a speedup by replacing the Composition and Solve with something which works on the relevant kinds of functions (in particular with dragon,Hilbert,inverse dragon,etc.you can use a pair of constants (as in the curve-specific implementations) and a difference ratio because the functions are linear).The syntax can also be improved if you have some idea what you want to do.*) Further e.g.: In[6]:= hilbert[t_] := piecewiserecursivefractal[t, Identity, {Min[4, 1 + Floor[4*#]]} &, {1 - 4*# &, 4*# - 1 &, 4*# - 2 &, 4 - 4*# &}, {I*(1 - #)/2 &, (I + #)/2 &, (I + 1 + #)/2 &, 1 + #*I/2 &}] In[16]:= unbert[z_] := piecewiserecursivefractal[z, Identity, If[0 <= Re[#] <= 1 && 0 <= Im[#] <= 1, Range[4], {}] &, {1 - 2*#/I &, 2*# - I &, 2*# - I - 1 &, (# - 1)*2/I &}, {(1 - #)/4 &, (# + 1)/4 &, (# + 2)/4 &, 1 - #/4 &}] In[17]:= unbert[1/2 + I/2] Out[17]= {1/6, 1/2, 5/6} In[18]:= hilbert /@ % Out[18]= {{1/2 + I/2}, {1/2 + I/2}, {1/2 + I/2}} This should make it easy for someone to collect Jörg's T-shirt. --rwg
participants (1)
-
Bill Gosper