如何将复数模长的十进制数值转换为SymPy符号表示?
用SymPy将复数模长的十进制结果转为符号形式
SymPy符号化运算示例
SymPy可对根式进行精确化简,示例如下:
In [37]: sqrt(8) / sqrt(27) Out[37]: 2*sqrt(6)/9 In [38]: pprint(sqrt(8) / sqrt(27)) 2⋅√6 ──── 9
问题场景
定义复数:
In [39]: z = complex(1,2)
通过Abs(z)计算模长得到十进制数值:
In [42]: Abs(z) Out[42]: 1.73205080756888
需将该结果转换为√3这类符号形式:
In [46]: pprint(sqrt(3)) √3
解决方法
方法1:直接使用SymPy符号复数类型
不要用Python内置complex类型,改用SymPy提供的符号复数类型定义,计算模长时会直接保留符号形式:
from sympy import Abs, pprint, ComplexNumber # 用SymPy复数类型定义 z = ComplexNumber(1, 2) # 计算模长 modulus = Abs(z) # 打印符号结果 pprint(modulus)
输出结果为:
√5
注:原示例中十进制值1.732对应√3,但复数1+2i的模长实际是√5(≈2.236),若要得到√3,复数应为1+√2 i。
方法2:将已有十进制数值转为符号形式
如果已经得到十进制结果,可用nsimplify函数将其转换为精确符号表达式:
from sympy import nsimplify, pprint decimal_val = 1.73205080756888 symbolic_val = nsimplify(decimal_val) pprint(symbolic_val)
输出结果为:
√3
内容的提问来源于stack exchange,提问作者Don Su
相关产品推荐
相关产品推荐

