Не спалось, построил — чтобы уснуть. Не помогло, зато красиво. Тыцайте до полного размера 600×1000 (40 КБ). Хорошо известная формула, 600 тысяч итераций.

Исходный код, Mathematica 6.0, сырой и неоптимальный. Скорость примерно 10000 итер/сек на P4 2.8 MHz. Уменьшите размер пиксела до 0.001 и увеличьте изображение до 600,1000, чтобы повторить картинку в точности.
Хозяйке на заметку. Без Rasterize[...] результат будет очень громоздким, и Front End будет его долго форматировать, а так он превращается в растровое изображение еще в ядре, и отрисовывается моментально.
Исходный код, Mathematica 6.0, сырой и неоптимальный. Скорость примерно 10000 итер/сек на P4 2.8 MHz. Уменьшите размер пиксела до 0.001 и увеличьте изображение до 600,1000, чтобы повторить картинку в точности.
TFun[a_?MatrixQ, b_?VectorQ] := Compile[{{x, _Real, 1}}, {a.x + b}];
(* Prepare a set of function for quick retrieval.
The resulting list has an accrued weight as the first element of each
nested list, so that the first one that's >= random_num can be chosen *)
TFunSet[t_, w_] := Block[{a, p, s, q},
{p, a} = Transpose[w]; (* {weight, {fun arg..}}.. *)
p = Accumulate[p]/Plus @@ p; (* Normalize weights to 1 *)
MapThread[{#1,t @@ #2}&,{p, a}]]; (* To {weight bound, fun}.. *)
(* Select а random function from the given TFunSet *)
TSetSelect[set_] := Block[{r = RandomReal[]},
Select[set, First[#] >= r &, 1][[1, 2]]];
(* Use the above and apply the resulting function to the vector x *)
TSetApply[set_, x_] := First[TSetSelect[set][x]]
Block[{
ITER = 10000,
tset = TFunSet[TFun, {
{0.01, {{{0, 0}, {0, 0.16}}, {0, 0}}},
{0.85, {{{0.85, 0.04}, {-0.04, 0.85}}, {0, 1.6}}},
{0.07, {{{0.22, -0.26}, {0.23, 0.22}}, {0, 1.6}}},
{0.07, {{{-0.15, 0.28}, {0.26, 0.24}}, {0, 0.44}}}
}]},
Rasterize @ ListPlot[NestList[TSetApply[tset, #] &, {0, 0}, ITER],
PlotStyle -> {PointSize[0.005], RGBColor[0, 7/8, 0]},
ImageSize -> {300, 500},
AspectRatio -> Full
]]
Хозяйке на заметку. Без Rasterize[...] результат будет очень громоздким, и Front End будет его долго форматировать, а так он превращается в растровое изображение еще в ядре, и отрисовывается моментально.
(no subject)
2008-10-04 00:10 (UTC)(no subject)
2008-10-04 06:39 (UTC)(no subject)
2008-10-04 07:24 (UTC)(no subject)
2008-10-04 07:41 (UTC)(no subject)
2008-10-04 08:12 (UTC)Смотрите, что я нашел: http://en.wikipedia.org/wiki/Iterated_function_system#Example:_a_fractal_.22fern.22
У Вас Mathematica есть? Могу кодом поделиться, если интересно.
(no subject)
2008-10-04 08:38 (UTC)(no subject)
2008-10-04 10:11 (UTC)«Лопух» этот в целом форму сохраняет, детали только по-разному проявляются при разных весах функций; support — это ведь носитель, правильно? — здесь явно лопухообразный. :-)
Кривые Гильберта подойдут?
(no subject)
2008-10-04 11:05 (UTC)Меня наш разговор подвигнул на поиски. На первый взгляд, вроде бы вот тут http://flam3.com/flame.pdf
что-то похожее на то, что я хочу, делается. Пожалуй, дам студенту для разбирательства - как раз тему у меня попросил.
Мне вообще представляется, что более правильный объект для фрактальной теории - это именно меры с фрактальными свойствами (промежуточной размерностью - знаете определение хаусдорфовой размерности меры?), а не множества. Если есть фрактальное множество, то любая мера на нем тоже будет фрактальной (как в нашем примере), но с другой стороны сушествует масса мер, у которых носитель не фрактален, а сама мера фрактальна. Вот их-то мне и хочется визуализировать.
Насчет кривых Гильберта - возникающее предельное множество тут конечно квадрат, но по-видимому можно использовать что-то вроде различных весов на ребрах для того, чтобы получить меру, носитель у которой весь квадрат, но распределена она будет очень неравномерно (с размерностью меньше 2). По-моему хороший test case. Спасибо!
(no subject)
2008-10-04 11:36 (UTC)(no subject)
2008-10-04 23:37 (UTC)Так Mathematica же! Посмотрите вот здесь, какие роскошные демонстрации народ делает!
Я статью эту загружаю, посмотрю. Я, кажется, понял, что Вы ищете, и, если мне что-нибудь в голову придет, обязательно Вам скажу.
(no subject)
2008-10-05 07:33 (UTC)(no subject)
2008-10-04 09:09 (UTC)(no subject)
2008-10-04 10:17 (UTC)Я «Математику» довольно хорошо знаю, так что если будут вопросы (не по этому коду, а вообще) — спрашивайте.
PS. Я неправильную версию выложил, вернее, не ту «лишнюю» строчку из нее удалил. прошу прощения. Здесь код теперь правильный. Не хватало функции TSetApply[...].
ЗЗЫ. Правильный код в самой записи. Здесь была версия с неправильными весами.
(no subject)
2008-10-04 23:38 (UTC)(no subject)
2008-10-09 09:34 (UTC)(no subject)
2008-10-09 10:14 (UTC)Cuneintel
2008-10-09 10:20 (UTC)