Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как вычислить на php нормальное распределение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Есть ли какие-нибудь готовые функции?
kapam
Отправлено: 16 Января, 2014 - 15:18:39
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




Помогите пожалуйста!
Поиски ни к чему толковому не привели.
На этом форуме про нормальное распределение нашел только в разделе юмор:
"Гаусс не изобретал нормальное распределение. Природа сама подстроилась под него."

Есть ли какие-нибудь готовые функции для расчета функции стандартного нормального распределения, обратной функции нормального распределения и ковариации.

В excel все считается через функции НОРМ.СТ.РАСП, НОРМ.СТ.ОБР, КОВАРИАЦИЯ.В

Хотелось бы найти решение для php
 
 Top
Panoptik
Отправлено: 16 Января, 2014 - 19:51:47
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




а при чем здесь php. вы про эти функции кроме как в название в excel что-то еще знаете?

нужно нормально знать теорию
http://ru[dot]wikipedia[dot]org/wiki/%D0[dot][dot][dot]0%BD%D0%B8%D0%B5

иметь входящие данные
и представление о результате. и никаких проблем в php с этим не будет

вот некий пример на С
http://algolist[dot]manual[dot]ru/maths/[dot][dot][dot]normal/index.php

пример на паскале
http://www[dot]delphisources[dot]ru/foru[dot][dot][dot]read.php?t=14090

чего вы хотите добиться?
(Добавление)
вот хороший материал
http://www[dot]math-pr[dot]com/stst_3v_1.php


-----
Just do it
 
 Top
kapam
Отправлено: 17 Января, 2014 - 10:08:22
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




Спасибо за помощь! Я искал вот это:
PHP:
скопировать код в буфер обмена
  1.  
  2. // функция плотности стандартного нормального распределения
  3. function pnd ($x) {
  4.   $Pi = 3.141592653589793238;
  5.   $pnd=exp(-0.5 * pow($x,2)) / (sqrt(2*$Pi));
  6.   return $pnd;
  7. }
  8. // функция стандартного нормального распределения
  9. function cnd ($x) {
  10.   $Pi = 3.141592653589793238;
  11.   $a1 = 0.319381530;
  12.   $a2 = -0.356563782;
  13.   $a3 = 1.781477937;
  14.   $a4 = -1.821255978;
  15.   $a5 = 1.330274429;
  16.   $L = abs($x);
  17.   $k = 1 / ( 1 + 0.2316419 * $L);
  18.   $p = 1 - 1 / pow(2 * $Pi, 0.5) * exp( -pow($L, 2) / 2 ) * ($a1 * $k + $a2 * pow($k, 2) + $a3 * pow($k, 3) + $a4 * pow($k, 4) + $a5 * pow($k, 5) );
  19.   if ($x >= 0) {
  20.     return $p;
  21.   } else {
  22.     return 1-$p;
  23.   }
  24. }
  25. // функция обратного стандартного нормального распределения
  26. function cndi ($p) {  
  27.   if ($p>0.5) $p=1-$p;
  28.   $t= sqrt(-2*log($p));  
  29.   $a0=2.30753;
  30.   $a1=0.27061;
  31.   $b1=0.99229;
  32.   $b2=0.04481;
  33.   $z=$t - (($a0+$a1*$t)/(1+$b1*$t+$b2*pow($t, 2)));
  34.   return $z;
  35. }
  36. // функция обратного стандартного нормального распределения (более точная)
  37. function cndi2 ($p) {  
  38.   if ($p>0.5) $p=1-$p;
  39.   $t= sqrt(-2*log($p));  
  40.   $c0=2.515517;
  41.   $c1=0.802853;
  42.   $c2=0.010328;
  43.   $d1=1.432788;
  44.   $d2=0.189269;
  45.   $d3=0.001308;
  46.   $z2=$t - (($c0+$c1*$t+$c2*pow($t,2))/(1+$d1*$t+$d2*pow($t, 2)+$d3*pow($t,3)));
  47.   return $z2;
  48. }
  49.  


Поиском нашел функцию cnd - точнее я нашел php-формулу Блэка-Шоулза и выдрал оттуда расчет функции нормального распределения.
Функции расчета плотности написал сам воспользовавшись ссылкой из Вики.
Ну и по аналогии с функцией cnd сделал расчет обратной функции нормального распределения - на основе аппроксимации (поэтому там две функции - обе с разной точностью одна до трех знаков после запятой, другая до четырх знаков).

Ковариация, как я понял, делается аналогично -- как дойдут руки выложу.

В итоге на все про все я потратил полдня - хотел сэкономить, но не получилось.
Пусть хотя бы другие не мучатся Ниндзя
 
 Top
kapam
Отправлено: 17 Января, 2014 - 15:12:22
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Янв. 2014  


Помог: 0 раз(а)




в функции cndi2 обнаружились ошибки.
исправленная версия:
PHP:
скопировать код в буфер обмена
  1. function cndi2 ($p) {
  2.   $k=1;
  3.   if ($p>0.5) {
  4.     $p=1-$p;
  5.     $k=-1;
  6.   };
  7.   $t= sqrt(-2*log($p));  
  8.   $c0=2.515517;
  9.   $c1=0.802853;
  10.   $c2=0.010328;
  11.   $d1=1.432788;
  12.   $d2=0.189269;
  13.   $d3=0.001308;
  14.   $z2=(($c0+$c1*$t+$c2*pow($t,2))/(1+$d1*$t+$d2*pow($t, 2)+$d3*pow($t,3)))-$t;
  15.   $z2=$k*$z2;
  16.   return $z2;
  17. }
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB