Итак, идем далее. Теперь гонюсь за производительностью и красивостью кода. Как вы видите выше, подынтегральная функция у меня задавалась в середине кода (после того, как переменным х присваивались значения). Хочется перенести ее в самое начало. Перенес, но другого способа, кроме как задания $F, как строки в начале, с последующим преобразованием с помощью эвала в середине кода я не нашел. Но эвал влияет на производительность. Можно ли как-то это сделать по-другому?
PHP:
<?php
//ini_set('display_errors',1);
//error_reporting(E_ALL);
{
$iter = 100000; //количество итераций
$Xmax = array(3); //верхние границы
$Xmin = array(1); //нижние границы
$F = 'cos($x[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 ("\$FA = $F;");
$SumH += $FA;
}
$rez = 1;
for ($i = 0; $i <= $U-1; $i++)
{
$rez = $rez*$Xint[$i];
}
$rez = ($SumH*$rez)/ $iter;
echo ("Answer: $rez");
?>
-~{}~ 18.06.10 16:43:
Автор оригинала: dimagolov
в приведенном коде нет никакого ввода, о чем вопрос?
Ввод в сам код напрямую ($F). Программа будет использована для расчета разных интегралов. То есть и функции будут в самом коде меняться. Но каждый раз при разных функциях вводить $x[...] в качестве переменной не очень удобно.
-~{}~ 18.06.10 16:46:
Автор оригинала: dimagolov
во-первых если в границах интегрирования находится х, то логично, что ответ выдает ноль. Как обойти?
а что говорит метод по этому поводу?
на тот момент $x просто не присвоено еще значение, посему значение у $x ноль. Решается опять же с помощью эвала, но интересуют другие возможные варианты.