UPD - функция вместо переменной. Здравствуйте. Есть программа по вычислению кратных интегралов методом Монте-Карло. Надо ее оптимизировать, сократив в разы. читать дальше

@темы: Вопрос, Алгоритм, PHP

Комментарии
17.06.2010 в 17:06

Торговец знаниями
Хоть бы алгоритм привели. Да и комментарии в коде были бы не лишними. Ибо разобраться в каше, которая имеет место быть — из области фантастики.
17.06.2010 в 17:14

WAAAAAAAAAGH!!!!!!1111ONEONE
eval ("\$X1min = $X1mi;");
eval ("\$X1max = $X1ma;");
eval ("\$X2min = $X2mi;");
eval ("\$X2max = $X2ma;");
eval ("\$X3min = $X3mi;");
eval ("\$X3max = $X3ma;"); - а на кой тут eval? $X2max = $x2ma

А в целом: действительно переменные держать в массивах и записывать цикликом.
for($j = 1; $j < $U; $j++) { дальше все XNma записываются как Xmin[$j], Xmax[$j], Xma[$j] и т.п. }
18.06.2010 в 02:00

<?php
//ini_set('display_errors',1);
//error_reporting(E_ALL);
$iter = 10000; //количество итераций
$Xmax = array(3,3,2); //верхние границы
$Xmin = array(1,1,1); //нижние границы
$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];
}
$F = $x[0]+$x[1]+$x[2]; //подынтегральное выражение
$SumH += abs($F);
}

$rez = 1;
for ($i = 0; $i <= $U-1; $i++)
{
$rez = $rez*$Xint[$i];
}
$rez = ($SumH*$rez)/ $iter;
echo ("Answer: $rez");
?>

Собственно вот. Все работает, все отлично. Теперь осталось решить пару проблем - во-первых если в границах интегрирования находится х, то логично, что ответ выдает ноль. Как обойти? Далее - интересует вопрос ввода - можно ли как-то сделать, чтоб не вводить при каждой переменной $x[0]? а вводить как-то проще, например, х1 или хотя бы $x1?