Двойное суммирование

Discussion in 'PHP' started by ceg, 22 Jul 2022.

  1. ceg

    ceg New Member

    Joined:
    2 Aug 2011
    Messages:
    28
    Likes Received:
    4
    Reputations:
    0
    Здравствуйте, форумчане. Пишу калькулятор, но никак не могу правильно организовать двойное суммирование. Есть указание к формуле: вычисление до того значения индекса суммирования GAMMA, при котором выражение в квадратных скобках впервые удовлетворяет неравенству [] <= 10*10^(-7). Не пойму, как связать правильно две суммы. Вероятно выражение $gamma <= $l; здесь не соответствует, но как я только не крутил туда сюда - не получается.
    [​IMG]
    Code:
    <?php
    function factorial($number) {
        if($number <= 1) {
            return 1;
        } else return ($number * factorial($number - 1));
    }
     
    //Входные в функцию данные
    $initialdata['post_betai0'] = 65;
    $initialdata['post_ti0'] = 8000;
    $ai['a_i'] = 14.4;
    $D0 = 0.051293294387551;
     
    $summ = 0;
    $expression = 1; //для входа в цикл
    $R_i = 1000000; //для входа в цикл
    for ($n=0; $R_i >= $D0; $n++) { //п.10.1.2.4
                
                //$l = 1;
                for ($l = 1; $expression >= 0.0000001; $l++){
                    for($gamma = $l * ($n + 1); $gamma <= $l; $gamma++){
                        $summ += pow($ai['a_i'], $gamma) / factorial($gamma);
                        $expression = exp(-$ai['a_i']) * $summ;
                        //print_r("Выражение из внутренней суммы".$expression."\r\n");
                        //print_r("Внутренняя сумма".$summ."\r\n");
                    }
                    
                    $expression = exp(-$ai['a_i']) * $summ;
                    //print_r("Выражение из внешней суммы".$expression."\r\n");
                    //print_r("Внешняя сумма".$summ."\r\n");
                    
                    if($l >= 100) break; //защита от зацикливания
                }
                $R_i  = -log( 1 - ( ($initialdata['post_betai0']/$initialdata['post_ti0']) * $expression ) );
    }
    print_r("\r\n\r\n".$R_i);
    for ($n=0; $R_i >= $D0; $n++) - это тоже условие выражения, но интересует именно двойное суммирование.