dizballanze

Untitled

Oct 6th, 2011
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.55 KB | None | 0 0
  1. <?php
  2. function generateRandom($a, $b, $count){
  3.     $randoms = array();
  4.     for ($i=0;$i<=$count-1;$i++){
  5.         $alfa = rand($b, $a)/100;
  6.         $psi = ($b-$a)*$alfa + $a;
  7.         $randoms[] = $psi;
  8.     }
  9.     return $randoms;
  10. }
  11.  
  12. function generateStandartRandom($a, $b, $count){
  13.     $randoms = array();
  14.     for ($i=0;$i<=$count-1;$i++){
  15.         $randoms[] = rand($a, $b);
  16.     }
  17.     return $randoms;
  18. }
  19.  
  20. function getIntervals($count, $intervals){
  21.     $per_interval = $count / $intervals;
  22.     $intervals_arr = array();
  23.     for ($i=0;$i<=$intervals-1;$i++){
  24.         for ($j = $i*$per_interval+1;$j<=$i*$per_interval+$per_interval;$j++){
  25.             $intervals_arr[$i][] = $j;
  26.         }
  27.     }
  28.     return $intervals_arr;
  29. }
  30.  
  31. function calcFrequence($sequence, $intervals){
  32.     $frequence = array();
  33.     foreach ($intervals as $index=>$interval){
  34.         $frequence[$index] = 0;
  35.     }
  36.    
  37.     foreach ($sequence as $sv){
  38.         foreach ($intervals as $index=>$interval){
  39.             if (($sv >=  $interval[0] - 1) && ($sv < end($interval))){
  40.                 $frequence[$index]++;
  41.                 break;
  42.             }
  43.         }
  44.     }
  45.     return $frequence;
  46. }
  47.  
  48. function getPSDomikom($mis, $count){
  49.     $p_s_domom = array();
  50.     foreach ($mis as $mi){
  51.         $p_s_domom[] = $mi / $count;
  52.     }
  53.     return $p_s_domom;
  54. }
  55.  
  56. function rashozhdenie($pis, $k, $n){
  57.     $x = 0;
  58.     $pi_teor = 1 / $k;
  59.     foreach ($pis as $pi){
  60.         $x += pow($pi - $pi_teor, 2) / $pi_teor;
  61.     }
  62.     return $x * $n;
  63. }
  64.  
  65. if (count($_POST)){
  66.     $a = $_POST['a'];
  67.     $b = $_POST['b'];
  68.     $count = $_POST['count'];
  69.     $intervals = $_POST['intervals'];
  70.     $ravnom_random = generateRandom($a, $b, $count);
  71.     $std_random = generateStandartRandom($a, $b, $count);
  72.     if ($a >= $b){
  73.         $error = '<h1>A >= B ??!! Ну ты и Энштейн!</h1>';
  74.     }elseif ($count % $intervals != 0){
  75.         $error = '<h1>Отличненько... Выбери количество интервалов кратное количеству случайных чисел!</h1>';
  76.     }else{
  77.        
  78.         $intervals_arr = getIntervals($count, $intervals);
  79.        
  80.         $frequence_ravnom = calcFrequence($ravnom_random, $intervals_arr);
  81.         $frequence_std = calcFrequence($std_random, $intervals_arr);
  82.        
  83.         $veroyatmost_ravn = getPSDomikom($frequence_ravnom, $count);
  84.         $veroyatmost_std = getPSDomikom($frequence_std, $count);
  85.        
  86.         $x2_ravn = rashozhdenie($veroyatmost_ravn, $intervals, $count);
  87.         $x2_std = rashozhdenie($veroyatmost_std, $intervals, $count);
  88.     }
  89.    
  90. }
  91. ?><!DOCTYPE html>
  92. <html>
  93.     <head>
  94.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  95.         <title>МСС, ЛЗ-1</title>
  96.         <style type="text/css">
  97.             #result {
  98.                 width: 480px;
  99.                 padding: 10px;
  100.                 height: auto;
  101.                 overflow: auto;
  102.                 overflow-x: auto;
  103.                 -ms-overflow-x: hidden;
  104.                 background-color: #eee;
  105.                 border: 1px solid #323232;
  106.                 color: #323232;
  107.             }
  108.             input[type=text]{
  109.                 width: 500px;
  110.                 height: 32px;
  111.                 font-size: 26px;
  112.                 background-color: #eee;
  113.                 color: #323232;
  114.             }
  115.            
  116.             #wrapper{
  117.                 width: 500px;
  118.                 border: 1px solid #323232;
  119.                 padding: 20px;
  120.                 margin-left: auto;
  121.                 margin-right: auto;
  122.                 background-color: #4A6D94;
  123.                 color: #ededed;
  124.                 border-radius: 10px;
  125.             }
  126.            
  127.             input[type=submit] {
  128.                 width: 100px;
  129.                 height: 32px;
  130.                 margin-left: 405px;
  131.                 margin-top: 5px;
  132.             }
  133.            
  134.             h2 {
  135.                 text-align: center;
  136.             }
  137.            
  138.             a {
  139.                 color: #ededed;
  140.             }
  141.            
  142.             #footer {
  143.                 text-align: center;
  144.                 font-size: 12px;
  145.             }
  146.            
  147.             table {border: 1px solid black;border-collapse: collapse;}
  148.             table td, table th {border: 1px solid black;border-collapse: collapse;}
  149.         </style>
  150.     </head>
  151.     <body>
  152.         <div id="wrapper">
  153.             <?php if (!isset($error)):?>
  154.             <form action="index.php" method="POST">
  155.                 <h2>Генерируем случайные числа</h2>
  156.                 <input type="text" name="a" placeholder="Нижний интервал"  required="required" pattern="[0-9]{1,3}" <?php if (isset($a)):?>value="<?php echo $a;?>"<?php endif;?>><br/><br/>
  157.                 <input type="text" name="b" placeholder="Верхний интервал" required="required" pattern="[0-9]{1,3}" <?php if (isset($b)):?>value="<?php echo $b;?>"<?php endif;?>><br/><br/>
  158.                 <input type="text" name="count" placeholder="Количество элементов" required="required" pattern="[0-9]{1,3}" <?php if (isset($count)):?>value="<?php echo $count;?>"<?php endif;?>><br/><br/>
  159.                 <input type="text" name="intervals" placeholder="Количество интервалов" required="required" pattern="[0-9]{1,3}" <?php if (isset($intervals)):?>value="<?php echo $intervals;?>"<?php endif;?>><br/><br/>
  160.                 <input type="submit" value="Посчитал!"><br/><br/>
  161.             </form>
  162.             <?php if (isset($ravnom_random)):?>
  163.             <div id="result">
  164.                 <h2>Входные параметры</h2>
  165.                 <h3>Случайная последовательность чисел распределенная по равномерному закону</h3>
  166.                 <table>
  167.                     <tr>
  168.                         <?php foreach ($ravnom_random as $digit):?>
  169.                         <td><?php echo $digit;?></td>
  170.                         <?php endforeach;?>
  171.                     </tr>
  172.                 </table>
  173.                 <h3>Случайная последовательность чисел через функцию <b>random</b></h3>
  174.                 <table>
  175.                     <tr>
  176.                         <?php foreach ($std_random as $digit):?>
  177.                         <td><?php echo $digit;?></td>
  178.                         <?php endforeach;?>
  179.                     </tr>
  180.                 </table>
  181.                 <h2>Равномерность</h2>
  182.                 <h3>Список интервалов</h3>
  183.                 <table>
  184.                 <?php foreach ($intervals_arr as $i=>$interval):?>
  185.                     <tr>
  186.                         <td>
  187.                             <b><?php echo $i;?>: </b>
  188.                             <?php foreach ($interval as $inter):echo $inter . ' '; endforeach;?>
  189.                         </td>
  190.                     </tr>
  191.                 <?php endforeach;?>
  192.                 </table>
  193.                 <h3>Частота и вероятность попадания в подинтервал</h3>
  194.                 <h4>Равномерное распределение</h4>
  195.                 <table>
  196.                     <tr><th>№ инт-ла</th><th>Mi</th><th>^pi</th></tr>
  197.                     <?php foreach ($frequence_ravnom as $index=>$frequence):?>
  198.                     <tr><td><b><?php echo $index;?></b></td><td><?php echo $frequence;?></td><td><?php echo $frequence / $count;?></td></tr>
  199.                     <?php endforeach;?>
  200.                 </table>
  201.                 <h4>Функция random</h4>
  202.                 <table>
  203.                     <tr><th>№ инт-ла</th><th>Mi</th><th>^pi</th></tr>
  204.                     <?php foreach ($frequence_std as $index=>$frequence):?>
  205.                     <tr><td><b><?php echo $index;?></b></td><td><?php echo $frequence;?></td><td><?php echo $frequence / $count;?></td></tr>
  206.                     <?php endforeach;?>
  207.                 </table>
  208.                 <h3>Вычисляем расхождение между экспериментальной и теоретической плотностями</h3>
  209.                 <h4>Равномерное распределение</h4>
  210.                 <b>x^2 = <?php echo $x2_ravn;?></b>
  211.                 <h4>Функция random</h4>
  212.                 <b>x^2 = <?php echo $x2_std;?></b>
  213.             </div>
  214.             <?php endif;?>
  215.             <?php else:?>
  216.                 <?php echo $error;?>
  217.             <?php endif;?>
  218.         </div>
  219.     </body>
  220. </html>
  221.  
  222.  
Advertisement
Add Comment
Please, Sign In to add comment