升级Anaconda后SymPy调用integrate积分矢量表达式报DomainError错误
问题根因
这个DomainError: there is no ring associated with CC报错是SymPy版本升级后积分器的兼容性问题:代码中使用了Python原生复数的虚数单位1j,新版SymPy的risch积分器解析混合了原生复数、符号变量、矢量分量的表达式时,会错误将计算域识别为不可构造多项式环的复数域CC,导致积分流程中断。
永久修复方案
将代码中的Python原生虚数单位1j替换为SymPy内置的符号类虚数单位I即可,该方案可兼容新旧版SymPy,修改后程序可正常输出计算结果。
若仍存在矢量积分兼容问题,可手动拆分矢量各分量分别积分后再组装为矢量对象,稳定性更高。
最小修改代码
仅需调整电场分量Ey的定义行即可,其余代码无需改动:
# 把原来的1j替换为SymPy自带的I Ey = E_0 * smp.exp( I * (wavenumber*X - w*t ))
更稳妥的分量拆分积分写法
jimmy = curl(E) # 拆分三个坐标轴分量分别积分,再组装为矢量 B = - ( integrate(jimmy.components.get(R.i, 0), t)*R.i + integrate(jimmy.components.get(R.j, 0), t)*R.j + integrate(jimmy.components.get(R.k, 0), t)*R.k ) pprint(B)
临时兼容方案(无需修改代码)
如果需要快速恢复原有代码运行,可回退SymPy到升级前的兼容版本,执行以下Anaconda命令即可:
conda install sympy==1.9
内容的提问来源于stack exchange,提问作者seanlogan
相关产品推荐
相关产品推荐

