Statistic.cs вспомогательный класс

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Text;
  5.  
  6. namespace StatisticMath
  7. {
  8.   /// <summary>
  9.   /// Вспомогательный класс Statistic для Модели Блэка - Шоулза
  10.   /// Автор Есаков Денис denis[:собачко:]yesakov.com
  11.   /// http://www.yesakov.com/BlackScholes/
  12.   /// </summary>
  13.   public class Statistic
  14.   {
  15.  
  16.     static Statistic()
  17.     {
  18.     }
  19.  
  20.       
  21.  
  22.     /// <summary>
  23.     /// Вычисление математического ожидания (среднее значение числового ряда)
  24.     /// </summary>
  25.     /// <param name="dataRow">Числовая последовательность</param>
  26.     /// <returns>Математическое ожмдание</returns>
  27.     public static double Mean(ArrayList dataRow)
  28.     {
  29.       double sum = 0;
  30.       for (int i = 0; i < dataRow.Count; i++)
  31.         sum += (double)dataRow[i];
  32.  
  33.  
  34.       return sum / dataRow.Count;
  35.     }
  36.  
  37.     /// <summary>
  38.     /// Вычисление дисперсии (отклонение от среднего значения числового ряда)(Deviation)
  39.     /// </summary>
  40.     /// <param name="dataRow">Числовая последовательность</param>
  41.     /// <returns>Корень из дисперсии</returns>
  42.     public static double Dev(ArrayList dataRow)
  43.     {
  44.       double meanDataRow = 0;
  45.       double sum = 0;
  46.       meanDataRow = Mean(dataRow);
  47.  
  48.       for (int i = 0; i < dataRow.Count; i++)
  49.         sum += ((double)dataRow[i] - meanDataRow) * ((double)dataRow[i] - meanDataRow);
  50.  
  51.       return Math.Sqrt(sum / dataRow.Count);
  52.     }
  53.  
  54.     /// <summary>
  55.     /// Вычисление коварияцию между числовыми рядами (Covariance)
  56.     /// </summary>
  57.     /// <param name="dataRowX">Первая числовая последовательность</param>
  58.     /// <param name="dataRowY">Вторая числовая последовательность</param>
  59.     /// <returns>Ковариацию между рядами</returns>
  60.     public static double Cov(ArrayList dataRowX, ArrayList dataRowY)
  61.     {
  62.       double meanDataRowX = 0;
  63.       double meanDataRowY = 0;
  64.       double sum = 0;
  65.       meanDataRowX = Mean(dataRowX);
  66.       meanDataRowY = Mean(dataRowY);
  67.  
  68.       //Если разной длины, то посчитаем наименьшой длины, но не совсем корректно
  69.       for (int i = 0; i < ((dataRowX.Count - dataRowY.Count <= 0) ? dataRowX.Count : dataRowY.Count); i++)
  70.         sum += ((double)dataRowX[i] - meanDataRowX) * ((double)dataRowY[i] - meanDataRowY);
  71.  
  72.       return sum / ((dataRowX.Count - dataRowY.Count <= 0) ? dataRowX.Count : dataRowY.Count);
  73.     }
  74.  
  75.     /// <summary>
  76.     /// Вычисление корреляцию между числовыми рядами (Correlation)
  77.     /// </summary>
  78.     /// <param name="dataRowX">Первая числовая последовательность</param>
  79.     /// <param name="dataRowY">Вторая числовая последовательность</param>
  80.     /// <returns>Корреляцию между рядами. Число из диапазона [-1;1]</returns>
  81.     public static double Corr(ArrayList dataRowX, ArrayList dataRowY)
  82.     {
  83.       return Cov(dataRowX, dataRowY) / Math.Sqrt(Dev(dataRowX) * Dev(dataRowY));
  84.     }
  85.  
  86.     /// <summary>
  87.     /// Автокорреляция(Autocorrelation)
  88.     /// </summary>
  89.     /// <param name="dataRowX"></param>
  90.     /// <param name="lag">Отставание или задержка с которой осуществляем поиск корреляции по числовому ряду</param>
  91.     /// <returns></returns>
  92.     public static double ACorr(ArrayList dataRowX, int lag)
  93.     {
  94.       double sumUp = 0;//Сумма числителя
  95.       double sumDown = 0;//Сумма знаменателя
  96.       double meanX = Mean(dataRowX);//Математическое ожидание ряда
  97.  
  98.       for (int i = lag; i < dataRowX.Count; i++)
  99.         sumUp += ((double)dataRowX[i] - meanX) * ((double)dataRowX[i - lag] - meanX);
  100.  
  101.       for (int i = 0; i < dataRowX.Count; i++)
  102.         sumDown += ((double)dataRowX[i] - meanX) * ((double)dataRowX[i] - meanX);
  103.       
  104.       return (sumUp/sumDown);
  105.     }
  106.  
  107.     /// <summary>
  108.     /// Нормальное распределение или распределение Гаусса
  109.     /// </summary>
  110.     /// <param name="x">непрерывная случайная величина</param>
  111.     /// <param name="mean">Математическое ожидание</param>
  112.     /// <param name="deviation">среднеквадратичное отклонение</param>
  113.     /// <returns></returns>
  114.     public static double NormalDistribution(double x, double mean, double deviation)
  115.     {
  116.       return Math.Exp(-(Math.Pow((x - mean) / deviation, 2) / 2)) / (deviation * Math.Sqrt(2 * Math.PI));
  117.     }
  118.  
  119.     /// <summary>
  120.     /// Функция нормального распределения
  121.     /// </summary>
  122.     /// <param name="X">величина от которой расчитывают распределение (d1 и d2)</param>
  123.     /// <returns>вероятность того, что будет выигрых или будет исполнен</returns>
  124.     public static double N(double X)
  125.     {
  126.       double L = 0;
  127.       double K = 0;
  128.       double W = 0;
  129.       const double a1 = 0.31938153;
  130.       const double a2 = -0.356563782;
  131.       const double a3 = 1.781477937;
  132.       const double a4 = -1.821255978;
  133.       const double a5 = 1.330274429;
  134.       L = Math.Abs(X);
  135.       K = 1.0 / (1.0 + 0.2316419 * L);
  136.       W = 1.0 - 1.0 / Math.Sqrt(2 * Math.PI) *
  137.       Math.Exp(-L * L / 2.0) * (a1 * K + a2 * K * K + a3 * Math.Pow(K, 3.0) + a4 * Math.Pow(K, 4.0) + a5 * Math.Pow(K, 5.0));
  138.       if (X < 0) W = 1.0 - W;
  139.       return W;
  140.     }
  141.  
  142.   }
  143. }

* This source code was highlighted with Source Code Highlighter.

Интересная статья? Поделитесь ею пожалуйста с другими:

Опубликовать в Twitter Написать в Facebook Поделиться ВКонтакте В Google Buzz Записать себе в LiveJournal Показать В Моем Мире В дневник на LI.RU Поделиться ссылкой в Моем Круге

Приглашаю присоединиться ко мне:

Follow Me Я в FaceBook Я ВКонтакте или подпишитесь на обновления блога по RSS

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

*


Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>