Интегрирующие функции для возврата массива - PullRequest
0 голосов
/ 09 апреля 2020
import numpy as np
from scipy import integrate
import math as m
#import quadpy

#The function
I = lambda l: 0.06977 + (7.0625*(1-m.exp(-((l-0.26053)/0.15994)))**2.28411)*(m.exp(-((l-0.26053)/0.15994)))
np.vectorize(I)

def Iint(z):
    return integrate.quad(I, 0, z)

Iint=np.vectorize(Iint)
z=np.arange(0,100)

Ia=Iint(z)
print (Ia)

Оставляет ошибку «Не удается преобразовать комплекс в число с плавающей точкой»

Заранее спасибо Пожалуйста, помогите мне с этим

Я думаю, что ошибка возникает из-за того, что функция не векторизация

`Traceback (most recent call last):`

  `File "C:\Users\Admin\.spyder-py3\untitled2.py", line 22, in <module>
    an=Iint(z)`

  `File "D:\Jupyter\lib\site-packages\numpy\lib\function_base.py", line 2091, in __call__
    return self._vectorize_call(func=func, args=vargs)`

  `File "D:\Jupyter\lib\site-packages\numpy\lib\function_base.py", line 2161, in _vectorize_call
    ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)`

  `File "D:\Jupyter\lib\site-packages\numpy\lib\function_base.py", line 2121, in _get_ufunc_and_otypes
    outputs = func(*inputs)`

  `File "C:\Users\Admin\.spyder-py3\untitled2.py", line 17, in Iint
    return integrate.quad(I, 0, z)`

  `File "D:\Jupyter\lib\site-packages\scipy\integrate\quadpack.py", line 342, in quad
    points)`

  `File "D:\Jupyter\lib\site-packages\scipy\integrate\quadpack.py", line 453, in _quad
    return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)`

1 Ответ

0 голосов
/ 09 апреля 2020

Не используйте np.vectorize - это медленно и трудно использовать правильно.

 # Iint=np.vectorize(Iint)
 z=np.arange(0,100)
 alist = []
 for i in z:
      alist.append(Iint(i))
 print(alist)
 print(np.array(alist))

голое:

 np.vectorize(I)

ничего не делает. Он не работает на месте.

Ошибка «Не удается преобразовать сложное в плавающее» может быть результатом попытки otypes, которую np.vectorize делает. Если первый вызов quad возвращает реальное значение, он ожидает, что все вызовы сделают это. Я подозреваю, что для некоторых z больше 0 результат сложный. Таким образом, вы можете обойти эту ошибку, установив otypes, но я все еще думаю, что np.vectorize уступает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...