четверг, 7 февраля 2013 г.

расчет фрактальных чисел

Недавно столкнулся с необходимостью вычисления фрактальной размерности шероховатого профиля для моей диссертационной работы. Мой научный руководитель настоятельно рекомендовал мне делать это методом, предложенным Хёрстом, так же этот метод  называется R/S -анализ.При этом, метод реализуется следующим алгоритмом [1]:1. Исходный числовой ряд Y делится на равные интервалы с количеством элементов равным n каждый;2. Берется первый интервал с количеством элементов равной N=n, для него вычисляется среднее значение Yn;3. Для указанного интервала вычисляем накопившееся отклонение YnN равное сумме разностей текущего элемента в ряде и среднего значения;4. Находим максимум и минимум в функции накопившегося отклонения и разброс R = max(XnN) - min(XnN);5. Вычисляем среднеквадратичное отклонение S для выбранного интервала;6. Находим точку в логарифмических координатах ln(N/2) и ln(R/S);7. Увеличиваем N на n элементов и повторяем действия 2-6 для нового интервала. N увеличиваем до тех пор пока N будет равно общему количеству элементов в исходном ряде Y;8. К получившимся в логарифмических координатах точкам применяем метод наименьших квадратов и находим показатель херста H раный тангенсу угла наклона апроксимирующей прямой;9. Фрактальная размерность ряда Y: D=2-H.Принцип разбиения исходного интервала Y  на подинтервалы на каждой итерации показан на рис. 1 Для реализации данного алгоритма я использовал язык программирования perl, для вычислений я написал небольшой скрипт:#! c:\perl\bin\perl.exeuse strict;print "-----------------------------------------------------------\n";open(IN_F, $ARGV[0]);my $Size = my @Seq = <IN_F>; #Исходная последовательность чисел полученная из файла и ее размерclose(IN_F);chomp($_) foreach (@Seq); #Убираем символы перевода строкиmy $step = @Seq / $ARGV[1];$step =~ s/\..+//; #Убираем дробную часть если нацело не делитсяmy $global_count = 1; #Номер текущей итерацииmy %result_dots; # Хэш с точками для применения метода наименьших квадратовwhile ($global_count <= $ARGV[1]) { my $N = $global_count * $step;  #Вы

Вычисление фрактальной размерности числового ряда

clearkbdbuf - Вычисление фрактальной размерности числового ряда

Комментариев нет:

Отправить комментарий