使用NumPy与SciPy计算积分触发ValueError:数组真值模糊,求解决
错误修复方案
错误根源
scipy.integrate.quad()返回的是包含积分结果和误差估计的元组,你直接把整个元组inta代入后续计算,导致a、s都变成了NumPy数组。而quad()要求积分上下限必须是标量,当数组作为上限传入时,quad内部做b < a比较时就会触发"数组真值判断模糊"的错误。
修复步骤
提取第一个积分的实际结果:只取
quad返回元组的第一个元素(忽略误差估计):inta = scipy.integrate.quad(f, 0, N.sqrt(N.pi / 2))[0](可选)简化代码写法:用常规运算符替代NumPy的函数调用,提升可读性:
N.power(x, 2)→x ** 2N.divide(a, b)→a / bN.multiply(a, b)→a * b
修复后的完整代码
import scipy import numpy as N d = 160 w = 1.8 np = 265 def f(x): return N.sin(x ** 2) # 只取积分结果,忽略误差项 inta = scipy.integrate.quad(f, 0, N.sqrt(N.pi / 2))[0] a = ((2 * N.sqrt(2) * inta) / d) ** 2 s = N.sqrt(N.pi / a) def funx(u): return N.cos((a / 2) * (u ** 2)) # 此时上限为标量,可正常执行积分 x = scipy.integrate.quad(funx, 0, s / np) print(x)
补充说明
第一个积分能正常运行,是因为它的上下限都是标量,且被积函数f(x)可以处理quad传入的标量参数;第二个积分报错纯粹是因为前面的变量变成了数组,导致上下限不符合quad的要求。
内容的提问来源于stack exchange,提问作者Arleee
相关产品推荐
相关产品推荐

