После прочтения этого и этого мне приходит в голову, что и "квад", и "квадратура" должны быть взаимозаменяемыми *, по крайней мере, с точки зрения синтаксиса.Странно кажется, что это не так:
from scipy.integrate import quad as q
#from scipy.integrate import quadrature as q
def myfunc(x):
return x
def integr():
return q(myfunc, 0, 1)[0]
print integr()
def myfunc2(x, y):
return x + y
def integr2(y):
return q(myfunc2, 0, 1, args=(y))[0]
#return q(myfunc2, 0, 1, args=[y])[0]
print integr2(10)
... пример отлично работает для "quad", но не для "quadrature" - я получаю:
Traceback (most recent call last):
File "./test.py", line 38, in <module>
print integr2(10)
File "./test.py", line 36, in integr2
return q(myfunc2, 0, 1, args=(y))[0]
File "/usr/lib/python2.6/dist-packages/scipy/integrate/quadrature.py", line 136, in quadrature
newval = fixed_quad(vfunc, a, b, (), n)[0]
File "/usr/lib/python2.6/dist-packages/scipy/integrate/quadrature.py", line 48, in fixed_quad
return (b-a)/2.0*sum(w*func(y,*args),0), None
File "/usr/lib/python2.6/dist-packages/scipy/integrate/quadrature.py", line 77, in vfunc
return func(x, *args)
TypeError: myfunc2() argument after * must be a sequence, not int
Я должен переключить кортеж args в список (см. Закомментированную строку в inter2), хотя в документации сказано, что это должен быть кортеж.Казалось, это то, на что жалуется переводчик ... (верно?)
Это предназначено?Или я что-то не так делаю?В конце я хотел бы иметь возможность выбирать методы интеграции впоследствии, не меняя слишком много остальной части кода.
* На самом деле я не совсем понимаю, как выбирать между этими двумя.Я понимаю разницу между гауссовой квадратурой и адаптивной квадратурой, но я не знаю, что означает «адаптивная квадратура Гаусса» - это количество адаптированных узлов, если да, то как!?