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

使用SymPy vector_integrate计算二维通量遇问题求助

二维通量计算问题调试及文档翻译

代码问题分析与修正

你的代码存在两个关键问题:

  1. 参数化曲线定义错误:命名为semicircle但参数theta范围设为0到2π,这是完整圆周而非半圆。若对应半圆,需将范围改为0到π(上半圆)或π到2π(下半圆)。
  2. 通量积分方法误用:SymPy的vector_integrate默认计算切向线积分(功积分),而通量是法向线积分,需要手动构造法向矢量后计算点积积分。

修正后的代码

from sympy import sin, cos, pi, symbols
from sympy.vector import CoordSys3D, ParametricRegion, vector_integrate
from sympy.abc import theta

C = CoordSys3D('C')
# 定义矢量场F
F = C.x**2 * C.i + C.y * C.j
display('矢量场F=', F)

# 修正为上半圆(theta范围0到π)
semicircle = ParametricRegion((3*cos(theta), 3*sin(theta)), (theta, 0, pi))

# 构造向外法向矢量(逆时针圆周的向外法向由切向矢量旋转90度得到)
x_t, y_t = 3*cos(theta), 3*sin(theta)
dx_dt = x_t.diff(theta)
dy_dt = y_t.diff(theta)
normal_vec = dy_dt * C.i - dx_dt * C.j

# 计算矢量场与法向的点积,代入参数化坐标后积分
integrand = (F.dot(normal_vec)).subs({C.x: x_t, C.y: y_t})
flux = integrand.integrate((theta, 0, pi))

display('半圆通量=', flux)

SymPy矢量积分核心文档(中文翻译)

模块概述

SymPy的vector模块支持线积分、面积分、体积分等多变量矢量积分操作,满足微积分场景下的矢量运算需求。

线积分类型

  • 切向线积分(功积分):直接调用vector_integrate(vector, curve)计算,其中curve为ParametricRegion对象,默认计算矢量场沿曲线切向的分量积分。
  • 法向线积分(通量积分):需手动构造法向矢量,将矢量场与法向矢量点积后,执行单变量积分。二维场景中,法向可通过切向矢量旋转90度得到(向外法向为(dy/dt, -dx/dt),向内为(-dy/dt, dx/dt))。

参数化区域定义

  • 二维曲线:ParametricRegion((x(t), y(t)), (t, 起始值, 终止值))
  • 三维曲面:ParametricRegion((x(u,v), y(u,v), z(u,v)), (u, u起始, u终止), (v, v起始, v终止))

积分注意事项

  • 确保参数化变量与积分变量一致;
  • 通量积分需明确法向方向(向内/向外),避免结果符号错误;
  • 复杂积分可先展开被积表达式,再调用integrate方法分步计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:45:49