ZeroDivisionError:浮点数除以零; python scipy quad

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

我正在编写一个使用积分的程序。我尝试了 Sympy,但它太慢了,所以我切换到 SciPy 集成,它极大地改进了我的脚本,但我遇到了一个问题:

一般情况下是这样的:

from scipy.integrate import quad
import sympy as S

x = S.Symbol('x')
y = S.Symbol('y')
xi = 0.75
a = 10 b = 10 f1 = 0.5 f2 = 0.5 f0 = f1+f2 al = -f1/f0 be = -f2/f0 `
F0 = f0*(al*(x**2/a**2)*xi+be*(y*2/b**2)**xi+1)
j2 = F0.diff(y,2)
jj2 = S.lambdify([y],j2,'scipy')
J2_ = quad(jj2,-a,a)
J2 = (J2_[0]*a**2)/f0

它刚刚被压碎,这是错误:


File "C:\Users\Mikhail\Desktop\robpy\cyc.py", line 60, in raschet
J2_ = quad(jj2,-a,a)
File "C:\Users\Mikhail\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\integrate\_quadpack_py.py", line 463, in quad
retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit,
File "C:\Users\Mikhail\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\integrate\_quadpack_py.py", line 575, in _quad
return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
File "<lambdifygenerated-2>", line 2, in _lambdifygenerated
ZeroDivisionError: float division by zero

F0.diff(y,2) 等于: -0.0118585412256314*(y**2)0.75/y**2

我建议分母中的这个“y2”是错误的原因,但是当我尝试使用 SymPy 进行相同的集成时

jj2 = S.integrate(j2,(y,-a,a))

正常,求解为-0.15

我不能只使用浮点数而不是变量来重建 F0,因为任务假设来自用户的初始数据不同。

我怎样才能避免这个错误?谢谢。

python scipy sympy integration quad
© www.soinside.com 2019 - 2024. All rights reserved.