Tglad
Fractal Molossus
Posts: 703
|
|
« Reply #15 on: August 25, 2010, 05:15:24 AM » |
|
I tried box counting the scale -2 mandelbox today, and if my code is right then its box counting dimension is about 2.8. The code is below so let me know if you see a mistake. I measured the dimension by estimating what the dimension tends to as count increases. I use a kind of distance estimate by keeping track of the radius of each box as it is transformed in the iterations. The whole box is only outside if the centre of the box is more than 6 + radius away from 0,0,0. (I'm using 6 as the escape distance, even though 4 may be sufficient.) int count = 10; uint64 numBoxes[100]; float dimension[100]; for (int b = 0; b<100; b++) { count = count * 2; numBoxes[b] = 0; float boxDiameter = 2.f / (float)count; for (uint64 x = 0; x<count; x++) { float X = (0.5f+(float)x) * boxDiameter; for (uint64 y = 0; y<count; y++) { float Y = (0.5f+(float)y) * boxDiameter; for (uint64 z = x + y%2; z<count; z++) // starting at x means we only do half the work by exploiting symmetry { float Z = (0.5f+(float)z) * boxDiameter; Vector3 start(X,Y,Z); Vector3 point = start; float radius = 0.5f*boxDiameter; numBoxes[b]++; // in anticipation of it being inside for (int i = 0; radius<4.f; i++) { if (point.x > 1.f) point.x = 2.f - point.x; else if (point.x < -1.f) point.x = -2.f - point.x; if (point.y > 1.f) point.y = 2.f - point.y; else if (point.y < -1.f) point.y = -2.f - point.y; if (point.z > 1.f) point.z = 2.f - point.z; else if (point.z < -1.f) point.z = -2.f - point.z; float size = point.magnitudeSquared(); if (size < 0.25f) { point *= 4.f; radius *= 4.f; } else if (size < 1) { point /= size; radius /= size; } point *= -2.f; // scale 2 radius *= 2.f; point += start; float mag = max(abs(point.x), max(abs(point.y), abs(point.z))); if (mag > 6.f + radius) { numBoxes[b]--; // wasn't inside break; } } } } } dimension[b] = logf(2.f*(float)numBoxes[b]) / logf((float)count); printf("dimension %f", dimension[b]); } so it is more solid than a Menger sponge. (sequence that limit estimated from: 2.9861, 2.9518, 2.92, 2.8916, 2.871, 2.857)
|
|
« Last Edit: August 27, 2010, 04:36:38 AM by Tglad »
|
Logged
|
|
|
|
Prokofiev
|
|
« Reply #16 on: August 26, 2010, 09:59:30 AM » |
|
Nice result, Tom ! . Although I'm not quite sure I understand your algorithm, here Are your boxes cubic or spheric ? Why should "the radius of each box be transformed in each iteration" ? Could you give more explanation ? More details on the parameters and intermediary results ? How many transformations were applied ? what is the range in sizes of boxes ? Does the log-log plot look linear ? It would be interesting to test your code on the Sierpinski teraedron, or the Menger sponge, to be sure. Now what about the scale 2 Mandelbox (standard one?) ?
|
|
|
Logged
|
Sincerely, Alexis
|
|
|
Prokofiev
|
|
« Reply #17 on: August 26, 2010, 10:10:58 AM » |
|
I see your point here: but a double koch curve (from a to be then back) is twice as much, at every stage of box counting for instance there will be twice as many boxes filled with the curve.
It makes sense. So we could say: - The size of a 2-meters Sierpinki trangle is 3 m^d - The size of a 3-meters Sierpinski triangle equals 5.7 m^d, that is 5.7 times the unit Sierpinski triangle. - we can also compare fractals with similar dimensions and say "this one is "larger" than that one". - Or choose a unit fractal and say "this coast equals 1535 unit Koch curves". With this measure I don't see why one could not estimate the "area" of the boundary of the mandelbrot set in square meters.
|
|
|
Logged
|
Sincerely, Alexis
|
|
|
Tglad
Fractal Molossus
Posts: 703
|
|
« Reply #18 on: August 27, 2010, 01:56:41 AM » |
|
Yes I think that's right. You can also compare the size of fractals with different dimensions by determining the crossover resolution where they are the same size. Here's a recent discussion- http://www.fractalforums.com/mathematics/how-long-is-the-coastline-of-great-britain/"I don't see why one could not estimate the "area" of the boundary of the mandelbrot set in square meters" According to wikipedia no-one knows yet whether it has a lebesque measure (an area in the traditional sense) I also found this: Shishikura proved that, excluding certain points on the boundary, the boundary's two-dimensional area itself is zero. "This means the boundary is as thick as it could possibly be without occupying an area," Milnor says. "He's pinned it down quite precisely."
Whether that is just the lebesque measure of area, or the hausdorff measure or something else I don't know. I have updated the code and results above to be a bit more accurate, and fixed the radius which was twice what it should have been. I am not sure how valid the algorithm is, but looks ok to me. The boxes are cubic, if I just count individual points in the set then the number of points (and indeed the dimension) becomes dependent on the number of iterations since like a menger sponge it is nowhere dense. We want to know if any point in each little box could be inside the set, so I approximate the transformation of the whole box by storing it as a centre + radius, and scaling the radius whenever the point gets scaled. This allows you to determine when a box is partially inside, since its centre can grow at max *2 + 2 when its radius is around 6, this means any radius of >4 can not escape from a distance of 6 away. The numbers tend towards a value but the convergence is slow so I use this site to find an exponential fit (from http://zunzun.com/) so giving an estimated limit. The equivalent for the menger sponge gives this sequence 2.86406, 2.82157, 2.811604, 2.80002, 2.792933, 2.786642, 2.782381 so looks roughly on course to give the right result around 2.72. But as with the previous, convergence is incredibly slow with this method. Its version of the code is: int count = 10; uint64 numBoxes[100]; float dimension[100]; for (int b = 0; b<100; b++) { count = count * 2; numBoxes[b] = 0; float boxDiameter = 1.5f / (float)count; for (uint64 x = 0; x<count; x++) { float X = 1.5f + (0.5f+(float)x) * boxDiameter; for (uint64 y = 0; y<count; y++) { float Y = 1.5f + (0.5f+(float)y) * boxDiameter; for (uint64 z = x + y%2; z<count; z++) // starting at x means we only do half the work by exploiting symmetry { float Z = 1.5f + (0.5f+(float)z) * boxDiameter; Vector3 start(X,Y,Z); Vector3 point = start; float radius = 0.5f*boxDiameter; numBoxes[b]++; // in anticipation of it being inside for (int i = 0; ; i++) { if (point.x > 1+radius && point.x < 2-radius && point.y>1+radius && point.y < 2-radius) { numBoxes[b]--; break; } if (point.x > 1+radius && point.x < 2-radius && point.z>1+radius && point.z < 2-radius) { numBoxes[b]--; break; } if (point.z > 1+radius && point.z < 2-radius && point.y>1+radius && point.y < 2-radius) { numBoxes[b]--; break; } if (radius > 0.5f) // obviously the above can never be true in this case { break; } point *= 3.f; radius *= 3.f; point.x = fmodf(point.x, 3.f); point.y = fmodf(point.y, 3.f); point.z = fmodf(point.z, 3.f); } } } } dimension[b] = logf(2.f*(float)numBoxes[b]) / logf((float)count); printf("dimension %f", dimension[b]); }
|
|
« Last Edit: August 27, 2010, 03:20:38 AM by Tglad »
|
Logged
|
|
|
|
Prokofiev
|
|
« Reply #19 on: August 27, 2010, 11:29:30 AM » |
|
Applying transformations to boxes seem a bit risky to me . And just rescaling the boxes might too approximative, there are foldings and inversions in your transformation. I don’t know exactly if it over-estimates or under-estimates the reallity. It is not the definition of the box-counting. Why not just iterate all the transforms first and then divide into smaller and smaller boxes afterwards, in the usual way ? It is the most simple way, to me, especially if you choose to divide the size of the boxes by 2. We would then be sure. The quote about Shishikura is interesting, Where did you find it ? by the way, I created the Mandelbox article for the french Wikipedia, here http://fr.wikipedia.org/wiki/Mandelbox. With a link to your site, of course.
|
|
|
Logged
|
Sincerely, Alexis
|
|
|
Tglad
Fractal Molossus
Posts: 703
|
|
« Reply #20 on: August 27, 2010, 01:44:57 PM » |
|
"Why not just iterate all the transforms first and then divide into smaller and smaller boxes afterwards, in the usual way" I tried this but the number of iterations I used was affecting the resulting dimension... hmmm tricky, maybe someone else here on fractalforums could give it a try. The mandelbulb sounds trickier still, since to count the border you need do decide which are the border boxes. Nice article in french, its better than the english version
|
|
|
Logged
|
|
|
|
Prokofiev
|
|
« Reply #21 on: August 27, 2010, 03:31:26 PM » |
|
I tried this but the number of iterations I used was affecting the resulting dimension... hmmm tricky, maybe someone else here on fractalforums could give it a try.
I am not suprized by that. The dimension must be calculated with the highest possible number of iterations. That's the only way to get as close as possible to the dimension on the "real thing". Pity i am such an awful programmer (I used to program a very long time ago).
|
|
|
Logged
|
Sincerely, Alexis
|
|
|
Prokofiev
|
|
« Reply #22 on: August 27, 2010, 04:05:17 PM » |
|
The mandelbulb sounds trickier still, since to count the border you need do decide which are the border boxes.
A voxel of the boundary has less than 6 neighbours. The best way to get rid of the inside.
|
|
|
Logged
|
Sincerely, Alexis
|
|
|
Prokofiev
|
|
« Reply #23 on: September 01, 2010, 06:42:26 PM » |
|
I have been doing some research in the papers about our problem and asked several questions around. I give you some news: 1) The Hausdorf dimension of any subset of the boundary of the Mandelbrot set is 2. Tglad, you were right and I was wrong. Strangely, even the tip of the antenna has dimension 2 . It comes from Shishikura's paper : "for any open set U which intersects ∂M, we have H-dim(∂M ∩ U) = 2". Whatever the subset, you always find a dense subset of points around which the dimension is 2. (because of embedded copies of the Mandelbrot set all over the place?). 2) The boundary of the power-8 mandelbrot set has also dimension 2. It was confirmed to me by Jacques Carette, (he worked under Douaddy and Hubbard). Shishikura's result goes for any "rational map f0 of degree d (>1) which has a parabolic fixed point ζ with multiplier exp(2πip/q) (p,q∈Z,gcd(p,q)=1) and that the immediate parabolic basin of ζ contains only one critical point of f0". This also applies to the map z^8+c. And any subset of its boundary has dimension 2, for the same reason explained in 1). so: The entire boundary of the cross-section of the power-8 mandelbulb in the xy-plane has dimension 2. We're getting somewhere Now if you give some "thickness" to this boundary in the z direction, for example a cartesian product with a segment (dim=1), whatever small, (a cylinder is the cartesian product of a circle and a segment), then you definitively have a set with Hausdorff dimension 2+1 = 3. And if the mandelbulb has dimension 3 in any neighbourhood of the xy-plane, whatever small, then the entire set has dimension 3.
|
|
« Last Edit: September 02, 2010, 11:56:13 AM by Prokofiev »
|
Logged
|
Sincerely, Alexis
|
|
|
fractower
Iterator
Posts: 173
|
|
« Reply #24 on: September 01, 2010, 09:29:32 PM » |
|
The final step seems a valid way to argue that HD = 3 for the power 8 bulb. For example an extrusion of any object with HD = N by an orthogonal axis results in an object with HD=N+1. So the extrusion of a 2D Mandelbrot will have HD=3 without really increasing the entropy (physicist not mathematician.)
Another way to say this is stretched taffy is qualitatively different from bulby goodness. Integer HDs seem to miss this distinction.
|
|
|
Logged
|
|
|
|
Tglad
Fractal Molossus
Posts: 703
|
|
« Reply #25 on: September 02, 2010, 12:33:15 AM » |
|
Maybe that is why you can't have a real 3d mandelbrot... since a simple extruded mandelbrot (mandelbrot based prism) already has a full 3 dimensional boundary, the surface simply can't be any rougher than that. Or maybe you need to go to the next level down... So a mandelbrot has area 2d and edge 2d Any extruded mandelbrot has volume 3d and surface 3d But I think the pursuit that lead to the mandelbulb was looking for: volume 3d, surface 3d and all lines over its surface being 2d. i.e. not just a fractal surface but fractal paths over every surface.
I wonder if there is a shape with volume 3d, surface 3d and all circumference lines being 3d? That would be nuts.
|
|
« Last Edit: September 02, 2010, 05:55:13 AM by Tglad »
|
Logged
|
|
|
|
fractower
Iterator
Posts: 173
|
|
« Reply #26 on: September 02, 2010, 06:50:26 AM » |
|
I don't want to give up on the holy bulb just yet. Prokofiev was able to demonstrate that the HD=3. I was just pointing out that that is not quite the complete answer. I suspect Tglad's path defination is a good metric to consider. For example the distance between any two points on the boundery of the Mandelbrot is infinite. Carette's result would seem to indicate the same for the xy plane (assuming a connectivity) of the power 8 bulb. If the same could be said for all paths in some small volume we would be closer.
I have not done a lot of bulb diving. Are there taffy regions in the power 8 bulb? It probably only takes one to propigate to all scales.
|
|
|
Logged
|
|
|
|
Prokofiev
|
|
« Reply #27 on: September 02, 2010, 11:31:02 AM » |
|
An interesting result is that we didn't make any hypothesis on the formula (except that it equals Mandelbrot's one in the xy-plane), so this result is valid for any variant of a 3D Mandelbrot set such as the ones mentionned in Daniel White's page or in Nylander's page (and post). Now, of course it would be interesting to see if any cross-section by any plane has dimension 2, and if any subset of these cross-sections have dimension 2. I'd like to think so but I have doubts, particularly when I see smooth surfaces such as these ones : 1) The bottom of the "caves" (cross-section along the xy-plane) 2) The "toruses" surrounding the set (cross section along the xz-plane). But, again, we must not trust our eyes on that matter.
|
|
« Last Edit: September 02, 2010, 11:58:41 AM by Prokofiev »
|
Logged
|
Sincerely, Alexis
|
|
|
Prokofiev
|
|
« Reply #28 on: September 02, 2010, 03:41:14 PM » |
|
Actually, why not make a small test ? When you zoom on the tip of the antenna of the Mandelbrot set, everything looks smooth and straight. But, as you keep on zooming, at some stage, small copies of the Mandelbrot set appear. Could it be the same on the Mandelbulb ? So I tried this on a smooth part of the Mandelbulb, just to see if a minute and hidden rough pattern of some sort appears on the screen. I zoomed on the point of coordinates x=0.45, y=-0.5427 and z=0 which is on the “wall” of a “cave” (see left image). The result is disapointing . You see the classic spiral patterns unravel on the xy-plane, but the surface along the z axis always looks desperately smooth, even with a high degree of iterations. I zoomed up to 10^-14 (see right image), which is the best I could get.. Of course that is just a quick test and we must not draw conclusions from that.
|
|
|
Logged
|
Sincerely, Alexis
|
|
|
M Benesi
|
|
« Reply #29 on: September 03, 2010, 09:39:22 PM » |
|
Silly idea, brain stopped after creation of it, so need another to glance at it: Idea: Circumference of a circle has a Hausdorff of 1. Area of the surface of a sphere has a Hausdorff of 2. Area of sphere is a product of the rotation of a circle around a perpendicular circle with the same center. Similarly: Mandelbrot outer edge has a Hausdorff of 2. Bulb outer edge would have a Hausdorff of Area of surface of bulb is the product of the rotation of a 2d Mandelbrot around a 2d Mandelbrot (both with Hausdorff of 2). Wouldn't this make the Hausdorff 4? Consider a 2d Mandelbrot spun in a circle (I know I've seen a few ): Mandelbrot Hausdorff of 2. Circle is Hausdorff of 1. Is the Hausdorff of the spun Mandelbrot 3?
|
|
|
Logged
|
|
|
|
|