复函数1/z在z=0处留数计算:围道积分与留数定理结果不符
围道积分计算的错误定位与修正
核心错误点
- 被积函数与围道路径完全脱节
你需要计算的是沿正方形围道的复函数1/z积分,围道上的复值点满足z = x + I*y(x、y为平面实坐标),但你代码里传入line_integrate的被积函数写为1/(a1 + b1*I),既没有将围道上的坐标映射到被积函数中,还错误将和围道参数无关的预先定义符号a1、b1作为坐标变量传入,程序计算的根本不是目标路径上的1/z积分。 - 未正确使用SymPy的线积分接口
SymPy内置的line_integrate是用于计算实平面上的第二类曲线积分,标准调用格式为line_integrate((P, Q), curve, [x, y]),对应积分形式∫_curve P(x,y)dx + Q(x,y)dy。你直接把单个复函数作为被积函数传入,没有按照复积分的拆分规则把1/z对应的实部、虚部分离成P、Q分量,也没有匹配复微分dz = dx + I*dy的映射关系,本身就不符合接口的参数要求。
你定义的四条围道的参数范围本身是符合逆时针闭合路径要求的,不存在方向反向的问题。你代码最终得到的π(-1+i)是程序在参数不匹配时输出的无意义结果,既没有对应路径积分的物理含义,也和留数定理的正确结果没有可比性。
正确的计算实现
计算复围道积分不需要硬套通用线积分接口,直接对参数化的路径逐段做定积分即可,以你定义的逆时针方向、边长范围[-2,2]的正方形围道为例,对应计算代码逻辑为:
# 逐段参数化计算复积分 I1 = integrate(1/(t - 2*I), (t, -2, 2)) # 下边:y=-2,x从-2到2 I2 = integrate(1/(2 + I*t)*I, (t, -2, 2)) # 右边:x=2,y从-2到2 I3 = integrate(1/(t + 2*I), (t, 2, -2)) # 上边:y=2,x从2到-2 I4 = integrate(1/(-2 + I*t)*I, (t, 2, -2))# 左边:x=-2,y从2到-2 simplify(I1 + I2 + I3 + I4)
运行上述代码最终会输出2*I*pi,和留数定理的计算结果完全一致。
内容的提问来源于stack exchange,提问作者PabloU
相关产品推荐
相关产品推荐

