- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
<?php
{
$iter = 10000; //количество итераций
$Xmax = array(1,1); //верхние границы
$Xmin = array(-1,-1); //нижние границы
$F = 'cos($x[0])*cos($x[1])'; //подынтегральное выражение
$F2 = '$x[0]+5-sin($x[1])>=2'; //выражение, определяющее границы функции (если такового нет, впишите 0)
}
$U = count($Xmin); //кратность интеграла
$Xint = array();
$x = array();
$SumH = 0;
for ($i = 0; $i <= $U; $i++)
{
$Xint[$i] = $Xmax[$i] - $Xmin[$i];
}
for ($j = 1; $j <= $iter; $j++)
{
for ($i = 0; $i <= $U; $i++)
{
$x[$i] = $Xmin[$i] + lcg_value() * $Xint[$i];
}
eval ("\$F1 = $F2;"); //левая часть выражения, определяющего границы функции
if ($F1 !== 0)
{
$InInt = false;
if ($F1) $InInt = true;
if (!$InInt) continue;
}
eval ("\$F3 = $F;");
$SumH += abs($F3);
}
$rez = 1;
for ($i = 0; $i <= $U-1; $i++)
{
$rez = $rez*$Xint[$i];
}
$rez = ($SumH*$rez)/ $iter;
echo ("Answer: $rez");
?>
не волнуйся, нубы составляют основной контингент говнокод.ру
$F1 = eval ($F2)
не?
function F2($x) { return $x[0]+5-sin($x[1])>=2 }
... $F1 = F2($x) ... $F3 = F($x)
или если уж так нужно задавать интегрируемое выражение и границы строкой, то
$F = create_function('$x', "return $F");
$F2 = create_function('$x', "return $F2");
... $F1 = $F2($x) ... $F3 = $F($x)
А вообще считать интегралы на PHP это пиздец