几天以来我一直在努力寻找一种方法来做到这一点。 我有一个从以下代码中获得的插值图:
for i in range(1,6):
u=np.linspace(0.0,2.6,num=i)
c=np.linspace(0.3, 1.0, num=i)
c_list = np.zeros(len(u))
for i in range(len(u)-1):
c = ((u[i+1]-u)*c[i]+(u-u[i])*c[i+1])/(u[i+1]-u[i])
print (c)
print (u)
plt.plot(u,c)
plt.show()
现在,我有两个函数想要使用获得的值进行积分。为此,我最初写道:
n= lambda u:0.176*(np.exp(1/(u*c)))
integrate.quad(n, 0.0, 0.65)
但是无论我如何尝试集成此功能,我都会遇到类型错误。我是 python 新手,非常感谢任何帮助。
编辑:这是错误
TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_85220/2767225254.py in <module>
15 print (e[1])
16 n= lambda u:(0.176*(np.exp(1/(u*c))))
---> 17 integrate.quad(n, 0.0, 2.6)
18
19 q= lambda n: n
~\anaconda3\lib\site-packages\scipy\integrate\quadpack.py in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points, weight, wvar, wopts, maxp1, limlst)
349
350 if weight is None:
--> 351 retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit,
352 points)
353 else:
~\anaconda3\lib\site-packages\scipy\integrate\quadpack.py in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points)
461 if points is None:
462 if infbounds == 0:
--> 463 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
464 else:
465 return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)
TypeError: only size-1 arrays can be converted to Python scalars
我测试了这个:
from scipy.integrate import quad_vec
import numpy as np
n= lambda u:0.176*(np.exp(1/(u*c)))
y, err = quad_vec(n, 0.0, 0.65)
# integrate.quad(n, 0.0, 0.65)
和
y = array([nan, nan, nan, nan, inf])
和err = nan
我认为问题在于函数 n 返回一个值数组。这是因为 c 是一个数组。您可以看到当 c 是常数时没有问题。我认为你应该使用的功能是
integrate.quad_vec()
。