
Kranover R M - Fraktaly i khaos v din sist
.pdf9.5 Срединноесмещение и ФБД • 281
Алгоритм 9.5.3. (СРЕДИННАЯ КРИВАЯ)
Назначение: программа-драйвер для аппроксимации кривой ФБД с помощью срединного смещения. Вызывает рекурсивную программу DIVIDE1 (алгоритм 9.5.4).
Замечание: аппроксимация ФБД точна только при Н = 1/2.
Вход:
Н (параметр ФБД: размерность графика d — 2 — H) maxlevel (максимальное число рекурсий)
scale (параметр вертикального масштаба)
Выход:
X (N+1 значений ФБД, где N = 2maxlevel) Инициализация:
level =1
ГО =1
*2 = N +1
X(i) = 0, i = 0,1,..., N +1
Комментарий: каждое обращение к gauss в последующих шагах означает вычисление независимой нормальной случайной величины.
Шаги:
ratio = 1/2я
std = scale * ratio X(l) = scale * gauss
X(N + 1) = scale *gauss
X = DIVIDE1 (X,ratio, std,io, %i, level, maxlevel)
Алгоритм 9.5.4. (DIVIDE1)
Назначение: рекурсивная процедура, которую вызывает алгоритм СРЕДИННАЯ КРИВАЯ.
Вход: (параметры, передаваемые с предыдущего уровня):
X ratio std
«о» h
level, maxlevel
9.5 Срединное смещение и ФБД • 2 8 3
Существует модифицированная версия двумерного алгоритма срединного смещения, описанного в п. 9.3 для классического броуновского движения. Как и следовало ожидать, этот алгоритм не дает настоящую поверхность ФБД, но широко применяется в компьютерных экспериментах. Выходные массивы имеют вид, как на рис. 9.13или 9.14.Алгоритм 9.5.5соответствует описанию в [38, с. 90].
Алгоритм 9.5.5. (Срединная поверхность)
Назначение: аппроксимирует поверхность ФБДс помощью срединного смещения.
Вход:
Н (параметр ФБД: размерность поверхности d = 3 — Н) maxlevel (максимальное число рекурсий)
scale (параметр вертикального масштаба)
Выход:
X (матрица (iV+l)x(i\r +l) аппроксимированных значений ФБД,
лт __ <ymaxlevel \
Инициализация:
ЛГ = ornax^v^
г = scale
Х(0,0) = 0 X{0,N) =0 X(N,0)=0 X(N,N) = 0 D =N
Комментарий: каждое обращение к g означает разыгрывание независимой нормальной случайной величины.
Шаги:
for L = 1 to L — maxlevel
г = r/2<fc/2)
for i — d to i = N - d by D for j — d to j = N — d by D
X(i,j) = (X(i + d,j + d) + X(i + d,j - d) +X(i - dj + d) + X(i - d,j - d))/4 + r • g
end end
284 • Глава 9 / Случайные фракталы
г = г/2(я/2)
for г = d to г = iV —d by D
X(i, 0) = (X{i +d,0) + Х(Г - d, 0) +Х(Г, d))/3 + r • g
X(i, N) = (X(i + d,N) + X(i -d,N)+ X(i, N - d))/3 + r-g , t) = (X(0, i +d) + X(0,i-d) + X(d,»))/3 + r • g
) + (X{N, i +d) +X(N, i-d) |
+ X(N - d,»))/3 + r • g |
end |
|
for i = d to i = N — d by D |
|
for j = d to j = N —d by D |
|
end |
|
end |
|
for i = D to i = N - d by D |
|
for j = d to j = iV - d byD |
|
Х(Г,J) = (Х(Г,J + d) + X(i,j -d) |
+ X(i + dj) |
+X(i-d,j)))/4 + r-g |
|
end |
|
end |
|
D = D/2 |
|
d =d/2 |
|
end |
|
Упргинснения 9.5.
1.Докажите, что результат работы алгоритма 9.5.3 удовлетворяет закону дисперсии (9.8) в случае приращений вида Х((к+ 1)/2п)— Х(к/2п). Обратитесь к доказательству теоремы 9.3.3.
9.6. Фурье-анализ ФБД
Преобразование Фурье. В 1807 году Жозеф Фурье сформулировал круг идей, вошедших в современную математику под названием ряды Фурье. Фурье-анализ стимулировал исследования в области основ математического анализа. Например, создание строгих теорий интегрирования было результатом стремления понять Фурьеанализ. Еще более важным для современной математики было создание теории множеств. Ранние работы Кантора поэтой теме были
9.6 Фурье-анализФБД
инициированы его исследованием множества точек, для которых ряды Фурье имеют нулевую сумму. Иногда говорят, что Кантор является создателем современной математики.
Строгое изложение методов Фурье-анализа является предметом отдельного курса. Здесь мы можем лишь сконцентрировать внимание на основных идеях и ключевых теоремах, которые имеют отношение к созданию алгоритма моделирования фрактального броуновского движения. Хорошим учебным пособием по Фурье-анализу может служить книга [40].
Пусть функция X(t), —оо < t < оо, удовлетворяет условию:
+
\X(t)\dt < оо. |
(9.12) |
Строго говоря, мы предполагаем, что функция X(t) измерима в смысле Лебега и что интеграл существует в смысле Лебега. Мы не будем излагать здесь теорию Лебега, но отметим, что класс рассматриваемых функций включает кусочно непрерывные функции, удовлетворяющие условию роста:
\X{t)\ = О ( ^ ) , р > 1 , при*-+±оо.
К этому классу, в частности, относятся ФБД, заданные на конечном интервале и равны нулю вне его.
Хотя независимая переменная t может означать что угодно, мы все-таки часто интерпретируем ее как время и называем X(t) представлением функции во временной области. Существует также частотная область, в которой функция представляется в виде суммы составляющих, имеющих определенную частоту /. Иными словами, функция X(t) может быть разложена на компоненты вида:
e2mff = COS(2TT/*) + ism(2nft).
Частота этих функций — / периодов в единицу времени, соответственно, их период — 1//. Комплексная форма записи е2жг?*упрощает анализ, но поскольку эквивалентная запись выражается через функции cos(2irft) И sin(27r/<), то вычисления можно производить и с помощью вещественной арифметики.
Составляющая X(t) с частотой / имеет вид:

9.7 Фильтрация Фурье • 291
ДПФ можно трактовать как преобразование из R^ в R^. A именно, ДПФ отображает вектор
Хо |
Хо |
|
X! |
х = |
х = |
Это линейное отображение, которое в матрично-векторной форме
записывается как |
|
(9.19) |
|
X —— |
|
где |
|
|
" 1 |
1 |
1 |
1 |
с |
с2 |
А (или Ар/) = 1 |
с2 |
с4 |
Легко доказывается, что (упр. 1 в конце параграфа):
АА = N1,
где J — единичная матрица N х N. Отсюда следует:
A =jjA.
Это приводит нас к формуле обратного ДПФ:
(9.20)
fc=0
Вычислять ДПФ (или ОДПФ) умножением на матрицу А (или А"1 ) не эффективно, так как умножение матрицы на вектор в (9.19) требует порядка N2 скалярных умножений. Обычно используется алгоритм быстрого преобразования Фурье(БПФ), который приведен в прил. А.б. В случае, если N равно степени 2, число умножений можно сократить до примерно |iVlog2 N.