Python中的积分和插值

问题描述 投票:0回答:2

几天以来我一直在努力寻找一种方法来做到这一点。 我有一个从以下代码中获得的插值图:

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

编辑:这些是我想要集成的功能:

python jupyter-notebook typeerror numerical-integration linear-interpolation
2个回答
0
投票

我测试了这个:

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


0
投票

我认为问题在于函数 n 返回一个值数组。这是因为 c 是一个数组。您可以看到当 c 是常数时没有问题。我认为你应该使用的功能是

integrate.quad_vec()

© www.soinside.com 2019 - 2024. All rights reserved.