In [2]: doubleintegral
Out[2]: (0.9892936902920587, 1.3643899787751934e-08)
In [3]: phib(0)
Out[3]: 6.377997354641736e-10
In [4]: phib(np.arange(0,5))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-89b7b858c2f5> in <module>
----> 1 phib(np.arange(0,5))
<ipython-input-1-4c64e69e4f62> in phib(t)
10 d = 3.086e22
11 c = 2.998e10
---> 12 return quad(thomtest,0.00001*(c*t)/d,np.pi, args=(t))[0]
13
14 doubleintegral = quad(phib,0,((3.086e22)/(2.998e10)))
/usr/local/lib/python3.6/dist-packages/scipy/integrate/quadpack.py in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points, weight, wvar, wopts, maxp1, limlst)
336
337 # check the limits of integration: \int_a^b, expect a < b
--> 338 flip, a, b = b < a, min(a, b), max(a, b)
339
340 if weight is None:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [5]:
Ошибка возникает при тестировании границ интегрирования, когда первое число меньше второго.
Но с массивом t
этот тест является многозначным и не может использоваться :
In [6]: d = 3.086e22
...: c = 2.998e10
In [7]: 0.00001*(c*np.arange(5))/d
Out[7]:
array([0.00000000e+00, 9.71484122e-18, 1.94296824e-17, 2.91445237e-17,
3.88593649e-17])
С quad
вы должны запустить свой код, phib
и doubleintegral
один раз для каждого элемента t
. В numpy
мы стараемся избегать итераций, но quad
работает только со скалярными границами. Так что старая добрая итерация обязательна.