Оптимизация программы.

dimagolov

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

во-первых если в границах интегрирования находится х, то логично, что ответ выдает ноль. Как обойти?
а что говорит метод по этому поводу?
 

TERAB1T

Новичок
Итак, идем далее. Теперь гонюсь за производительностью и красивостью кода. Как вы видите выше, подынтегральная функция у меня задавалась в середине кода (после того, как переменным х присваивались значения). Хочется перенести ее в самое начало. Перенес, но другого способа, кроме как задания $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 ноль. Решается опять же с помощью эвала, но интересуют другие возможные варианты.
 

mity

Новичок
И сильно eval влияет на производительность?
Если Вам так сильно мешает eval, то для создавайте временный php файл со всеми вычислениями,где функция будет впечатана в программу. И подключайте этот файл через include.
 

TERAB1T

Новичок
Автор оригинала: mity
И сильно eval влияет на производительность?
Ну то, что я субъективно заметил, что скорость с эвалом почему-то в пару раз меньше, уже что-то значит. Но судя по всему буду делать именно так.

-~{}~ 20.06.10 01:01:

А можно ли вместо эвала использовать функцию? То есть изначально в шапке задать функцию, а потом когда надо, к ней обращаться?
 
Сверху