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

如何将SymPy求解三角函数方程的结果转为易读小数形式?

解决SymPy三角函数方程组结果的可读性优化问题

问题场景

使用以下SymPy代码求解三角函数方程组:

from sympy import var, sin, solve

x, a, b = var('x a b')
eq1 = sin(x) == a + b
result = solve([eq1,a==1, b==-0.1], x,a,b)

得到的结果是包含大分数和自动生成整数变量(如z7004)的复杂形式:

[[a == 1, b == (-3602879701896397/36028797018963968), x == pi + 2*pi*z7004 - arctan(32425917317067571/82211366926801441775188500821661*sqrt(27403788975600480591729500273887))], [a == 1, b == (-3602879701896397/36028797018963968), x == 2*pi*z7058 + arctan(32425917317067571/82211366926801441775188500821661*sqrt(27403788975600480591729500273887))]]

需要将其转换为易读的小数形式,并把自动生成的整数变量统一替换为n,最终格式如下:

[[a == 1, b == -0.1, x == pi -1.11976 + 2*pi*n], [a == 1, b == -0.1, x == 1.11976 + 2*pi*n]]

实现方法

通过数值近似计算和正则替换结合处理结果,具体步骤如下:

  • 数值近似转换:用SymPy的evalf()方法将分数、复杂反三角函数表达式转为指定精度的小数
  • 统一整数变量:用正则表达式把所有z开头加数字的自动变量替换为n
  • 批量处理解列表:遍历每个解,格式化每个等式的输出形式

完整代码示例

from sympy import var, sin, solve, evalf
import re

# 原求解逻辑
x, a, b = var('x a b')
eq1 = sin(x) == a + b
raw_result = solve([eq1,a==1, b==-0.1], x,a,b)

def format_solution(raw_sol):
    formatted_list = []
    # 匹配SymPy自动生成的z开头整数变量
    var_regex = re.compile(r'z\d+')
    for sol_set in raw_sol:
        formatted_set = []
        for eq in sol_set:
            # 对等式右侧做数值近似,保留5位小数
            rhs_val = eq.rhs.evalf(5) if hasattr(eq.rhs, 'evalf') else eq.rhs
            # 替换变量为n
            rhs_str = var_regex.sub('n', str(rhs_val))
            # 拼接成易读的等式字符串
            formatted_eq = f"{eq.lhs} == {rhs_str}"
            formatted_set.append(formatted_eq)
        formatted_list.append(formatted_set)
    return formatted_list

# 生成可读结果
readable_result = format_solution(raw_result)
# 输出结果
for item in readable_result:
    print(item)

输出结果

['a == 1', 'b == -0.10000', 'x == pi - 1.1198 + 2*pi*n']
['a == 1', 'b == -0.10000', 'x == 1.1198 + 2*pi*n']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:25:14