Лабораторная работа № 3 по курсу «Сети распределения информации»
ИССЛЕДОВАНИЕ СВОЙСТВ САМОПОДОБИЯ ТРАФИКА В СИСТЕМАХ С КОММУТАЦИЕЙ ПАКЕТОВ
3.1 Цель работы
Ознакомление с основными фрактальными структурами. Изучение моделей самоподобного трафика. Исследование свойств самоподобия трафика, возникающего в системах с коммутацией пакетов. Изучение методов оценивания параметра Херста.
3.2 Порядок выполнения работы
1. Ознакомится с основными положениями теории фракталов и самоподобных процессов, используя материал приложения 3 и литературу [].
2. Используя листинг 3.1, провести моделирование в системе Mathematica самоподобного процесса в виде модели броуновского движения.
Листинг 3.1 – Математическая модель процесса броуновского движения
BM[n_, seed_]:=(
SeedRandom[seed];
a=0;
b=0;
rt={{a,b}};
For[i=1,i<=n,
=RandomReal[{
}];
d=RandomReal[{0.75, 1.25}];
a=a + d*Cos[];
b=b + d*Sin[]];
rt=Append[rt, {a, b}];
i++];
ListPlot[rt, Joined->True]
)
Запуск составленной модели броуновского движения
выполняется командой BM[n,seed]. В
качестве параметра n следует использовать 500, а значение параметра seed
принять равным номеру бригады по лабораторному журналу преподавателя.
Результаты моделирования системы занести в отчет. При этом необходимо обратить
внимание, что в системах Mathematica до 6-й версии вместо команды RandomReal[{}] следует использовать Random[Real,{
}], а также вместо параметра Joined->True
команды ListPlot необходимо записать PlotJoined->True.
Алгоритм реализован по следующему принципу. Начальной является точка в центре координатной системы. Далее частица, движение которой моделируется, последовательно совершает случайные переходы. Направление движения и длина «прыжка» являются случайными величинами. В результате выполнения процедуры формируется список точек, через которые проходит частица. На основе этого списка строится траектория броуновского движения.
Выполним анализ программного кода. Вначале выполняется
инициализация генератора случайных чисел (команда SeedRandom[seed_]).
Координаты частицы в начальный момент имеют нулевое значение о чем
свидетельствуют команды a=0, b=0. В переменную rt заносятся
координаты точек, которые проходит частица. Вначале этот список состоит всего
из одного элемента (команда rt={{a,b}}). Основную часть тела процедуры составляет оператор
цикла For[]. Переменная цикла пробегает натуральный ряд с
верхней границей определяемой аргументом процедуры. Угол, определяющий направление
перехода частицы, задается командой =RandomReal[{
}]
как действительная случайная величина лежащая в интервале
. Длина перехода определяется
командой d= RandomReal[{0.75, 1.25}] как случайная величина в диапазоне
значений [0.75, 1.25]. следующая точка, в которую перемещается частица,
задается командами a=a + d*Cos[
] и b=b + d*Sin[
]. Новая точка добавляется в список
командой rt=Append[rt, {a, b}]. Если изменить команду инициализации генератора
случайных чисел кривая измениться, причем достаточно существенно.
3. Используя листинг 3.2 выполнить моделирование в системе Mathematica фрактальной системы в виде триадной кривой Коха
Листинг 3.2 – Триадная кривая Коха
FS[L_, n_] := Module[{L1, x1, x2, y1, y2, dist, , P1, P2, P3, i, j},
L1 = L;
For[j = 1, j <= n,
m = Length[L1];
For[i = 1, i < 4*(m - 1),
x1 = N[L1[[i, 1]]];
x2 = N[L1[[i + 1, 1]]];
y1 = N[L1[[i, 2]]];
y2 = N[L1[[i + 1, 2]]];
dist = Sqrt[(x1 - x2)^2 + (y1 - y2)^2];
= ArcCos[(x2 - x1)/dist];
If[y2 < y1, = 2*
-
];
=
+
/6;
P1 = {(2*x1 + x2)/3, (2*y1 + y2)/3};
P2 = {x1 + dist*Cos[]/Sqrt[3],
y1 + dist*Sin[]/Sqrt[3]};
P3 = {(x1 + 2*x2)/3, (y1 + 2*y2)/3};
L1 = Insert[L1, P3, i + 1];
L1 = Insert[L1, P2, i + 1];
L1 = Insert[L1, P1, i + 1];
i = i + 4];
j++];
Return[L1]
];
Код процедуры главным образом ориентирован на то, чтобы явно очертить математическую основу алгоритма построения списка вершин фрактальной кривой. Использован следующий подход. Начальный отрезок (или кривая) передается аргументом процедуре в виде списка. Элементами списка являются пары значений координат точек-вершин начальной кривой. За один цикл перебираются все элементы списка. Между каждой парой точек добавляется по три новых точки – результат деления соответствующего отрезка на три части, удаления центральной и добавления двух дополнительных отрезков. Во вновь полученном списке снова проделывается эта процедура, и так далее – в соответствие с тем, какое значение указано вторым аргументом процедуры.
Первой командой L1 = L
процедуры создается копия исходной кривой, переданной аргументом функции.
Именно с этой копией будут выполняться все последующие манипуляции. Далее
следует оператор цикла, в котором командой m=Length[L1]
определяется длина списка L1. В еще одном внутреннем цикле индексная переменная,
с помощью которой перебираются элементы-точки списка L1, пробегает
значения от 1 до . Здесь принято во
внимание, что число элементов списка L1 в процессе выполнения
оператора цикла будет меняться: при переборе точек каждый раз добавляются три
новые, при этом значение переменной
меняется только в
пределах внешнего оператора цикла. Кроме того, следует учесть, что после
последней точки новые точки не добавляются, поэтому верхний предел для
индексной переменной
равен именно 4(m-1),
а не 4m, как можно было бы предположить.
Далее командами
x1 = N[L1[[i, 1]]];
x1 = N[L1[[i+1, 1]]];
y1 = N[L1[[i, 2]]];
y2 = N[L1[[i+1, 2]]];
вводятся
локальные переменные для координат точки с индексом, соответственно и
в
списке. Для ускорения процесса вычисления для случая, когда координаты базовых
точек заданы в символьном виде, используем функцию N[] вычисления
результата в формате числа с плавающей точкой. Расстояние между точками
заносится в переменную dist=Sqrt[(x1-x2)^2+(y1+y2)^2]. Для вычисления координат новых точек
понадобится также вычислить угол между горизонтальной координатной осью и
прямой проходящей через первую и вторую новые точки из трех добавляемых
(направление на центральную, вновь добавляемую точку). Поясним назначение
команд процедуры. Так, командой
=ArcCos[(x2-x1)/dist]
дается начальная оценка угла между базовым отрезком и направлением на новую центральную
точку отрезка (искомый угол больше этого угла на величину
). Проблема, однако, в том, что это
оценочное выражение не всегда является верным: оно справедливо только если
синус угла неотрицателен. В противном случае следует угол
переопределить. Для этого
использован условный оператор If[y2<y1,
=2*
]. После выполнения команды
угол
дает направление на центральную
точку трансформируемого отрезка.
Координаты новых точек определяются командами
P1={(2*x1+x2)/3, (2*y1+y2)/3};
P2={x1+dist*Cos[]/Sqrt[3],
y1+dist*Sin[
]/Sqrt[3]};
P3={(x1+2*x2)/3, (y1+2*y2)/3};
Эти точки следует добавить в список L1,
что и делается следующими тремя командами. Для добавления элемента в список
(точнее, не в сам список, а в его копию) использована функция Insert[],
первым аргументом которой указывается список, в который вставляется элемент,
второй аргумент – элемент, который вставляется, а третьим аргументом
указывается позиция, на которую новый элемент помещается в список. При этом
прочие элементы списка сдвигаются вправо. Поэтому при вставке очередного
элемента в список индексация его элементов справа от вставленного элемента
меняется (индексы элементов увеличиваются на единицу). Данное обстоятельство
учтено при добавлении новых элементов в список L1. Наконец,
после добавления трех новых элементов следующая «старая» точка отстоит от
текущей (той у которой индекс ) на четыре
позиции, поэтому в блоке инкремента оператора цикла указана команда i=i+4.
в качестве результата возвращается список L1 (команда Return[L1]).
Для запуска данной процедуры для построения триадной кривой Коха на основе горизонтального отрезка единичной длины можно воспользоваться следующим программным кодом
L={{0,0},{1,0}};
FP=FS[L,n];
ListPlot[FP,Joined®True,AspectRatio®Automatic,Axes®False]
моделирование выполнить для случаев, когда n=1, 2, N, где N – номер бригады по лабораторному журналу преподавателя.
4. Повторить п.3 для случая, когда базовой фигурой является правильный шестиугольник для этого использовать программный код
L={{-1,0},{-1/2,Sqrt[3]/2},{1/2,Sqrt[3]/2},{1,0},{1/2,-Sqrt[3]/2},{-1/2,-Sqrt[3]/2},
{-1,0}};
FP=FS[L,n];
ListPlot[FP,Joined®True,AspectRatio®Automatic,Axes®False]
моделирование выполнить для случая, когда n=N, где N – номер бригады по лабораторному журналу преподавателя.
5. Повторить п.3 для случая, когда базовой фигурой является равносторонний треугольник для этого использовать такой программный код
L={{0,0},{1/2,Sqrt[3]/2},{1,0},{0,0}};
FP=FS[L,n];
ListPlot[FP,Joined®True,AspectRatio®Automatic,Axes®False]
моделирование выполнить для случая, когда n=N, где N – номер бригады по лабораторному журналу преподавателя.
6. Используя программный код из файлов Hurst_beta_v1_br.nb и Hurst_R_S.nb оценить параметр Херста для фрагмента сетевого трафика, содержащегося в файле brN.tr включающего 2000 отсчетов. Здесь N – номер бригады по лабораторному журналу преподавателя.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.