Міністерство науки і освіти України
Харківський Національний Університет ім. В. Н. Каразіна
Факультет комп'ютерних наук
Кафедра моделювання систем і технологій
Моделювання логнормальному розподілу
Курсова робота з дисципліни
«Комп'ютерне моделювання стохастичних процесів»
Виконавець *************
студент ****
Керівник
Ст. преп. ************
Харків 2007
План
Введення
Логнормальний розподіл
Застосування логнормальному розподілу
Постановка завдання
Реалізація поставленої задачі
Інструкція користувачеві
Опис програмного модуля
Висновок
Список використаної літератури
Загальні дані логнормальному розподілу
Введення
Дана робота була створена з метою промоделювати логнормальної розподіл. Проект являє собою програмний продукт, який генерує випадкові величини розподілені по вищевказаного закону, відображає теоретичну щільністю розподілу і щільність отриману в результаті експерименту. Також вважається мат. очікування і дисперсія теоретично й експериментально.
Логнормальний розподіл
Випадкова величина X має логнормальної розподіл з параметрами μ, σ, якщо X = exp (Y), де Y має нормальний розподіл з параметрами μ, σ. Випадкова величина з логнормальному розподілом є безперервною, і приймає тільки позитивні значення. Графіки щільності (прив'язаний до лівої вертикальної осі ординат) і функції (прив'язаний до правої осі ординат) логнормальному розподілу з параметрами μ = 0, σ = 0.7 наведено на наступному малюнку.
Характеристики
У наступній таблиці наведені формули для обчислення характеристик логнормальному розподілу.
Щільність розподілу
Функція розподілу *
Математичне сподівання
Стандартне відхилення
Дисперсія
Асиметрія
Мода
* Функція логнормальному розподілу F через елементарні функції не виражається. Для наближеного обчислення функції цього розподілу з параметрами μ, σ можна скористатися формулою F (x) = Φμ, σ (ln x), де Φμ, σ - функція нормального розподілу з параметрами μ, σ.
Моделювання
Моделювання значень випадкової величини з логнормальному розподілом (з параметрами μ, σ) проводиться за формулою X = exp (Y), де Y має нормальний розподіл з тими ж параметрами ..
Застосування логнормальному розподілу
У статистиці так зване логнормальної розподіл застосовується в тому випадку, коли починає змінюватися ціна активу в майбутнє - а це випадковий процес, який в принципі повинен описуватися нормальним розподілом. У той же час для цілей ймовірнісної оцінки вартості активу в теорії користуються не нормальним, а логнормальному розподілом. Це обумовлено наступними причинами. По-перше, нормальний розподіл симетрично щодо її центральної осі і може мати як позитивні, так і негативні значення, але ціна активу не може бути негативною. По-друге, нормальний розподіл говорить про рівної ймовірності для значень змінної відхилитися вгору або вниз. У той же час на практиці, наприклад, має місце інфляція, яка чинить тиск на ціни у бік їх підвищення, а також сама тимчасова сутність грошей: вартість грошей сьогодні менше, ніж вартість грошей вчора, але більше, ніж вартість грошей завтра. Крива логнормальному розподілу завжди позитивна і має правобічну скошенность (асиметрично), тобто вона вказує на велику ймовірність ціни відхилитися вгору. Тому якщо, допустимо, ціна активу складає 50 дол, то крива логнормальному розподілу свідчить про те, що опціон пут з ціною виконання 45 дол повинен коштувати менше опціону колл з ціною виконання 55 дол, у той час як відповідно до нормальним розподілом вони повинні були б мати однакову ціну. Хоча не можна сподіватися, що наведені вихідні припущення в точності виконуються у всіх реальних ринкових ситуаціях, тим не менш прийнято вважати, що логнормальної розподіл досить добре як перше наближення у разі активів, якими торгують на конкурентних ринках аукціонного типу для довгих розглянутих періодів.
Постановка завдання
Було поставлено завдання промоделювати логнормальному розподілу, вивести графік щільності розподілу, отриманий за допомогою аналітичних розрахунків, і графік, промодельовані за допомогою стохастичного методу. Порахувати математичне сподівання і дисперсію аналітичним і стохастичним способами і занести отримані результати в таблицю (SrtingGrid).
Реалізація поставленої задачі
Для вирішення поставленої я використав середовище програмування Delphi 7.
Спочатку були зроблені розрахунки за формулами які описувалися вище для того, щоб відобразити графік щільності логнормальному розподілу за допомогою аналітичних розрахунків.
Для того, щоб отримати графік щільності розподілу на основі стохастичних перетворень, був обраний метод Неймана.
Також потрібно було порахувати математичне сподівання і дисперсію і ввести отримані результати на екран. Формули яких представлені нижче
Математичне сподівання |
Дисперсія |
var
Form1: TForm1;
kk: Int64;
flag: boolean;
implementation
Щільність розподілу
function TForm1.PL (x: double): double; / / - density of distribution
begin
if x <> 0 then
result: = exp (- (ln (x)-mu) * (ln (x)-mu) / (2 * sigma * sigma)) / (x * sigma * Sqrt (2 * Pi))
else
result: = 0;
end;
function TForm1.LogNorm (): double; / / - for a method of Neumann
var
y: real;
x: double;
begin
repeat
x: = a + random * (ba);
f: = PL (x);
y: = fmax * random;
until y <f;
result: = x;
end;
procedure TForm1.Clear; //------------ clear array ---------
const M = 50;
var j: integer;
begin
for j: = 0 to (M-1) do
begin
gist [j]: = 0;
end;
end;
procedure TForm1.Panel1Click (Sender: TObject);
var
x, r, sr, h1, h2, Ob, g1, g2, chi2_N, chi2_12, chi2_if, sum, Z: double;
p, y, Mat, Mat2, Disp: real;
M, j: integer;
N, i, u: longint;
begin
flag: = false;
Gauge1.Progress: = 0;
//-------** All fields must be filled !**---------
if (E1.Text ='') or (E2.Text ='') or (E3.Text ='') or (E4.Text ='') or
(E5.Text ='') then
begin
with Application do
begin
NormalizeTopMosts;
MessageBox ('All of fields must be filled!', 'Error', MB_OK);
RestoreTopMosts;
end;
exit;
end;
//----------** Initialization **--------------
T: = GetTime;
Clear;
Chart1.Series [0]. Clear;
Chart1.Series [1]. Clear;
Chart1.Series [2]. Clear;
sigma: = StrToFloat (E1.Text);
mu: = StrToFloat (E2.Text);
a: = StrToFloat (E3.Text);
b: = StrToFloat (E4.Text);
kk: = StrToint64 (E5.Text);
if kk> 2000000000 then
begin
Showmessage ('Дуже велике число, введіть менше');
exit;
end;
N: = StrToInt (E5.Text);
g1: = 100 / N;
g2: = 0;
Randomize;
M: = 50;
//---------------** Theoretical method **------------------
for i: = 1 to 100 do
begin
if (i mod 10) = 0 then application.ProcessMessages;
x: = a + i * (ba) / 100;
/ / P: = PL (x);
if x <> 0 then
p: = exp (- (ln (x)-mu) * (ln (x)-mu) / (2 * sigma * sigma)) / (x * sigma * Sqrt (2 * Pi))
else
p: = 0;
Chart1.Series [0]. AddXY (x, p);
end; //--- theoretical
//************************************************ ***********
Метод Неймана
//---------------** Method of Neumann **------------------------
fmax: = Chart1.Series [0]. MaxYValue;
{For i: = 1 to N do
begin
if (i mod 10) = 0 then application.ProcessMessages;
x: = a + i * (ba) / N;
f: = PL (x);
if (f> fmax) then
fmax: = f;
end;} / / max
//------------------------------
Clear;
chi2_N: = 0;
Mat: = 0;
Mat2: = 0;
Disp: = 0;
i: = 0;
Clear;
chi2_if: = 0;
while true do
begin
if (i mod 10) = 0 then application.ProcessMessages;
inc (i);
x: = LogNorm ();
Mat: = Mat + x; / / expectation
Mat2: = Mat2 + sqr (x);
if (x> b) or (x <a) then
continue;
u: = trunc ((xa) / ((ba) / M));
gist [u]: = gist [u] +1;
h1: = random;
h2: = random;
Ob: = sqrt (-2 * ln (h1)) * cos (2 * Pi * h2);
Ob: = mu + Ob * sigma;
x: = exp (Ob);
if (x> b) or (x <a) then
continue;
u: = trunc ((xa) / ((ba) / M));
gist1 [u]: = gist1 [u] +1;
g2: = g2 + g1;
Gauge1.Progress: = trunc (g2) +1;
if i> N then break;
if flag = true then
begin
N: = i;
break;
end;
end;
Mat: = Mat / N;
Mat2: = Mat2 / N;
Disp: = Mat2 - sqr (Mat);
for j: = 0 to (M-1) do //------ histogram
begin
sum: = (Power (N * PL (a + (ba) / M * (j +0.5)) * (ba) / M-gist [j], 2)) /
(N * PL (a + (ba) / M * (j +0.5)) * (ba) / M);
chi2_N: = chi2_N + sum;
Chart1.Series [1]. AddXY ((a + (j +0.5) * (ba) / M), gist [j] / N * M / (ba));
end;
E6.Text: = FloatToStrF (chi2_N, fffixed, 4, 4 );//-- chi-square for a Neumann
//************************************************ ****************
Метод зворотного функції
//--------------** Method of inverse function **-----------------
Clear;
chi2_if: = 0;
{For i: = 1 to N do
begin
h1: = random;
h2: = random;
Ob: = sqrt (-2 * ln (h1)) * cos (2 * Pi * h2);
Ob: = mu + Ob * sigma;
x: = exp (Ob);
if (x> b) or (x <a) then
continue;
u: = trunc ((xa) / ((ba) / M));
gist [u]: = gist [u] +1;
end;}
for j: = 0 to (M-1) do //------ histogram
begin
sum: = (Power (N * PL (a + (ba) / M * (j +0.5)) * (ba) / M-gist1 [j], 2)) /
(N * PL (a + (ba) / M * (j +0.5)) * (ba) / M);
chi2_if: = chi2_if + sum;
Chart1.Series [2]. AddXY ((a + (j +0.5) * (ba) / M), gist1 [j] / N * M / (ba));
gist1 [j]: = 0;
end;
E8.Text: = FloatToStrF (chi2_if, fffixed, 4, 4); / / chi-sq for a inverse function
E10.Text: = FloatToStr (exp (mu + sqr (sigma) / 2)); / / - expectation (teor)
E11.Text: = FloatToStr (Mat); / / - expectation (experim)
E12.Text: = FloatToStr ((exp (sqr (sigma)) -1) * exp (2 * mu + sqr (sigma)));
E13.Text: = FloatToStr (Disp);
D: = GetTime;
Z: = MilliSecondSpan (D, T);
e5.Text: = IntTostr (N);
Edit1.Text: = FloatToStrF (Z, fffixed, 6, 6);
//************************************************ *****************
end;
procedure TForm1.Panel7Click (Sender: TObject);
begin
Close;
end;
procedure TForm1.E1KeyPress (Sender: TObject; var Key: Char);
begin
if (key ='-')
then begin
if Pos ('-', (Sender as TEdit). Text) = 0 then Begin (Sender as TEdit). SelStart: = 0; key :='-'; end
else key: = # 0;
end;
if Sender is TEdit then
begin
if Not ((Key in ['0 '.. '9']) or (Key = Chr (vk_Back))
or (Key = DecimalSeparator) or (Key ='-')) then
Key: = # 0
else
begin
if Key = DecimalSeparator then
if Pos (DecimalSeparator, (Sender as TEdit). Text)> 0 then
Key: = # 0;
end;
end;
end;
procedure TForm1.Aboutme1Click (Sender: TObject);
begin
AboutBox.Show;
end;
procedure TForm1.Timer1Timer (Sender: TObject);
begin
Panel19.Caption: = TimeToStr (Time);
end;
procedure TForm1.E1KeyDown (Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (ssShift in Shift) then
key: = 0;
end;
procedure TForm1.Panel20Click (Sender: TObject);
begin
flag: = true;
end;
end.
Інструкція користувачеві
При запуску програми перед користувачем відкривається форма, на якій є поля введення параметрів, поля виводу порахованих значень, поле для виведення графіка і кнопки, при натисканні на які відбувається те або інша подія.
Праворуч у розділі "Теоретично користувач може ввести значення sigma і mu, ті значення, які він вважає потрібними; a і b це інтервал у межах якого змінюється графік. І значення N - (кількість єксперементов) - в завісемості від того скільки разів ми будемо проводити єксперемент . Залежно від вибору даних параметрів користувач може отримати різні форми графіка щільності ймовірності.
У розділі "Критерій згоди" виводяться значення оцінки Хі-квадрат для двох зазначених методів. Нижче висновок математичного сподівання і дисперсії, порахованих теоретично й експериментально.
Справа внизу форми виводиться системний час і час виконання розрахунків у мілісекундах.
При натисканні на кнопку «Вивести графіки і обчислити» зліва виводяться графік щільності логнормальному розподілу (побудований теоретично), гістограми розподілу випадкової величини по логнормальному закону, змодельовані за допомогою методу Неймана і методу зворотної функції.
При натисканні на кнопку «Стоп» програма припиняються свою роботу і починає зчитувати значення які обробити до певного моменту і запису значень в поля.
При натисканні на кнопку «2 D / 3 D» користувач може спостерігати зміну графіка з 2 D в 3 D і навпаки.
При натисканні на кнопку «Вихід» програма буде завершена.
У закладці «About» користувач може дізнатися про творців даного програмного продукту та короткий опис програмного продукту.
Опис програмного модуля.
Програма складається з одного вікна, на якому розташовані всі елементи управління. Праворуч форми знаходяться поля для введення вихідних даних.
У центрі форми розміщена кнопка «Вивести графіки і обчислити», натискання на яку запускає генератор випадкових величин. На графіку з'являються дві криві описують функцію щільності логнормальному розподілу. Червоним кольором зображено теоретична крива, а синім (метод зворотної функції) і зеленим (метод Неймана) - отримана в результаті експерименту. Праворуч у полях відображаються значення математичного очікування і дисперсії ..
Висновок
У моїй роботі я розглянув логнормальної розподіл, ми отримали графіки щільності розподілу і функції розподілу, і зв'язки з іншими розподілами.
В результаті роботи був створений програмний продукт у середовищі Delphi 7, де ми можемо подивитися як моделюється логнормальної розподіл, виводяться графіки щільності розподілу за допомогою аналітичних розрахунків та стохастичних перетворень. А також обчислюється мат. очікування і дисперсія, стохастичним і аналітичним способами.
Список використаної літератури
http://en.wikipedia.org
Шефф Г. Дисперсійний аналіз. - М.: Физматгиз, 1980. - 628 с.
«Delphi 2005:« Секрети програмування »», Михайло Флен.
Загальні дані логнормальної розподіл | |
Щільність ймовірності | |
Функція розподілу | |
Параметри | |
Носій | |
Щільність ймовірності | |
Функція розподілу | |
Математичне сподівання | |
Медіана | e μ |
Мода | |
Дисперсія | |
Коефіцієнт асиметрії | |
Коефіцієнт ексцесу | |
Інформаційна ентропія |
Логнорма льное розподілу ня в теорії ймовірностей - це двопараметрична сім'я абсолютно неперервних розподілів. Якщо випадкова величина має логнормальної розподіл, то її логарифм має нормальний розподіл.
Визначення
Нехай розподіл випадкової величини X задається щільністю ймовірності, яка має вигляд:
,
де . Тоді кажуть, що X має логнормальної розподіл з параметрами μ і σ. Пишуть: X ~ LogN (μ, σ 2).
Моменти
Формула для k-го моменту логнормальної випадкової величини X має вигляд:
звідки випливає, зокрема:
,
.
Властивості логнормальному розподілу
Якщо - Незалежні логнормальної випадкові величини, такі що , То їх твір також логнормальної:
.
Зв'язок з іншими розподілами
Якщо X ~ LogN (μ, σ 2), то
Y = ln X ~ N (μ, σ 2).