Лабораторная работа № 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).
Ссылка на скачивание - внизу страницы.