2013-11-07 5 views
0

Я использую scipy quad, и я явно не понимаю документацию, связанную с параметрами ограничения. Я хочу ограничить количество подинтервалов, на которые моя функция оценивается, чтобы уменьшить время выполнения. Я привел короткий пример, чтобы проиллюстрировать мои недоумения.Проблемы с опцией ограничения квадратов python

def func(x): 
    print x 
    return x 

quad(func,0,10,limit=4) 

Я ожидаю, что 4 значения будут напечатаны, но вместо этого я получу 21. Любая помощь может быть принята с благодарностью.

Приветствия, Уильям

ответ

0

Отпечатков опоздавших от вас func функции не в quad. quad просто возвращается.

Попробуйте, как это вместо того, чтобы, если вы хотите, чтобы распечатать результат:

def func(x): 
    return x 

print quad(func, 0, 10, limit=4) 
0

Вы делаете ошибку, результатом квадратора:

In [30]: a = quad(func,0,10,limit=4) 
5.0 
0.130467357414 
9.86953264259 
0.674683166555 
9.32531683344 
1.6029521585 
8.3970478415 
2.83302302935 
7.16697697065 
4.25562830509 
5.74437169491 
0.021714184871 
9.97828581513 
0.349212543221 
9.65078745678 
1.09591136707 
8.90408863293 
2.18621432666 
7.81378567334 
3.52803568649 
6.47196431351 

In [31]: a 
Out[31]: (50.0, 5.551115123125783e-13) 

Просто удалите print заявление в вашей функции и печати quad.

1

Ключевое слово limit контролирует количество адаптивных подынтервалов, но не напрямую количество оценок. А именно, QUADPACK, вероятно, использует квадратуру более высокого порядка, которая оценивает функцию несколько раз за каждый интервал. Число оценок также не обязательно делится на 4, так как процедура может делать некоторые дополнительные оценки.

Для получения дополнительной информации см source code

+0

Я вижу, спасибо! – user2966694

Смежные вопросы