使用quadpy对二维多边形积分时遇QuadpyError错误求助
问题分析与解决
错误原因
你调用的quadpy.t2.get_good_scheme是专门用于二维三角形的积分方案,而传入的poly是4个顶点组成的四边形,quadpy无法识别该域的形状,因此抛出QuadpyError: Wrong domain shape。
解决方法
方法1:手动拆分四边形为三角形
将四边形拆分成两个不重叠的三角形,分别计算积分后求和:
import numpy as np import quadpy def f(x): return x[0] # 拆分四边形为两个三角形(顶点按顺序排列) triangle_1 = np.array([[0.0, 0.0], [1.0, 0.0], [0, 1]]) triangle_2 = np.array([[1.0, 0.0], [0, 1], [1, 1]]) # 初始化三角形积分方案 scheme = quadpy.t2.get_good_scheme(10) # 分别计算两个三角形的积分 integral_1 = scheme.integrate(f, triangle_1) integral_2 = scheme.integrate(f, triangle_2) # 总积分 total_integral = integral_1 + integral_2 print(total_integral) # 输出: [0.5]
方法2:使用quadpy多边形积分工具
利用quadpy.polygon.integrate自动处理多边形拆分,无需手动拆分:
import numpy as np import quadpy def f(x): return x[0] # 确保多边形顶点按顺时针/逆时针连续排列(避免交叉) poly = np.array([[0.0, 0.0], [1.0, 0.0], [1, 1], [0, 1]]) # 传入多边形与指定的三角形积分方案 total_integral = quadpy.polygon.integrate(f, poly, quadpy.t2.get_good_scheme(10)) print(total_integral) # 输出: [0.5]
注意:多边形顶点必须按顺时针或逆时针的连续顺序排列,不能出现交叉,否则会导致积分结果错误。
内容的提问来源于stack exchange,提问作者Davide Modesto
相关产品推荐
相关产品推荐

