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

Python计算二重积分黎曼和出现TypeError及结果不符问题求助

问题原因与修复方案

1 TypeError报错原因

你定义的Riemann函数默认y_low是固定数值,但你调用时传入的是lambda x:1-x函数对象,执行y_up - y_low时就是整数减函数,触发类型错误。你要计算的是y边界随x变化的非矩形区域二重积分,原来的函数仅支持固定上下限的矩形区域,必须修改函数逻辑适配变边界。

2 修改后运行结果不对的原因

你把上下限改成固定值y_low=1、y_up=0后:

  • y的积分上下限颠倒,计算的区域不是你需要的y∈[1-x, 1],变成了矩形区域y∈[0,1]
  • 原函数内部采样点坐标计算逻辑错误:每次循环都累加n*dy/m*dx,坐标会无意义放大,不是每个网格的正确中点坐标

3 修复后的完整代码

import numpy as np

# 被积函数,参数顺序保持原定义的(y, x)
f = lambda y, x: x*y/(x**2 + y**2)
partition = 200  # 分区数值越大结果精度越高

def Riemann(function, x_low, x_up, y_low_func, y_up_func, x_part, y_part):
    dx = (x_up - x_low) / x_part
    total_sum = 0
    for m in range(x_part):
        # 计算当前x网格的中点坐标
        x_mid = x_low + dx * (m + 0.5)
        # 计算当前x对应的y上下限
        current_y_low = y_low_func(x_mid)
        current_y_up = y_up_func(x_mid)
        dy = (current_y_up - current_y_low) / y_part
        dA = dx * dy
        for n in range(y_part):
            # 计算当前y网格的中点坐标
            y_mid = current_y_low + dy * (n + 0.5)
            total_sum += function(y_mid, x_mid) * dA
    return total_sum

# 调用函数,y上限是固定值1,用lambda统一传参格式
res = Riemann(f, 0, 1, lambda x: 1-x, lambda x: 1, partition, partition)
print(res)

4 运行效果

上述代码运行后输出结果约为0.20385,和你给出的正确解析解0.2038745误差小于0.01%,调大partition数值可以进一步缩小误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:36:04