You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Scipy的数组乘积二重数值积分实现问题求助

解决返回数组的函数的二重数值积分问题

错误原因

你写的f1 = lambda y: quad_vec(func,0,1, args = (y,))中,quad_vec返回的是**(积分结果数组, 误差估计数组)**的元组,外层quad_vec处理这个元组时,会尝试将其作为数值参与运算,触发了序列与浮点数相乘的类型错误。

解决方案1:修正分步积分逻辑

只需要让内层积分返回纯结果数组(舍弃误差项),代码如下:

import numpy as np
from scipy.integrate import quad_vec

def func(x,y):
    a = np.array([[x**2+2*y, y-2],[2*x+2*y, y**2-3*x]])
    return a.dot(a)

# 内层积分仅返回结果数组(取quad_vec返回值的第一个元素)
f1 = lambda y: quad_vec(func, 0, 1, args=(y,))[0]
# 外层积分对结果数组逐元素积分
result, error = quad_vec(f1, 0, 1)

print("积分结果数组:")
print(result)
print("\n误差估计数组:")
print(error)

运行这段代码就能得到正确的2x2积分结果数组,每个元素对应原函数对应位置元素的二重积分值。

解决方案2:使用scipy.integrate.nquad

nquad支持多变量积分,且能兼容返回数组的被积函数,写法更简洁:

import numpy as np
from scipy.integrate import nquad

def func(x,y):
    a = np.array([[x**2+2*y, y-2],[2*x+2*y, y**2-3*x]])
    return a.dot(a)

# 定义积分限:x从0到1,y从0到1
limits = [[0, 1], [0, 1]]
result, error = nquad(func, limits)

print("积分结果数组:")
print(result)
print("\n误差估计数组:")
print(error)

nquad会自动处理多变量积分,并且直接返回数组形式的结果,无需手动嵌套积分。

补充说明

两种方法本质都是对数组的每个元素分别做二重积分,因为数值积分是逐元素进行的。如果你的被积函数是更复杂的高维数组,这两种方法同样适用。

内容的提问来源于stack exchange,提问作者Sadjad Abedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:01:57