You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用SymPy将字符串形式的线性方程组转为可求解形式?

使用SymPy处理字符串形式的线性方程组

我来帮你搞定这个问题!你想要从带#分隔的字符串里提取线性方程组,然后用SymPy求解对吧?其实核心就是把字符串形式的方程转换成SymPy能识别的Eq对象,下面是具体的实现方法:

步骤说明

  • 清理并提取方程字符串:先把输入字符串里的#去掉,分割出单个方程的内容,同时清理多余空格。
  • 字符串转SymPy方程:把每个方程字符串按=拆分成左右两边,用SymPy的parse_expr解析成表达式,再创建Eq对象。
  • 求解并输出结果:和你原来的逻辑一致,用solve求解方程组后输出结果。

完整代码示例

from sympy import symbols, Eq, solve, parse_expr

# 你的输入字符串
input_str = "# x+y=5 # x-y=-3"

# 1. 处理输入字符串,提取每个方程的有效内容
eq_strings = [s.strip() for s in input_str.split("#") if s.strip()]

# 2. 定义方程组中的变量
x, y = symbols('x y')

# 3. 将字符串方程转换为SymPy的Eq对象
equations = []
for eq_str in eq_strings:
    # 按等号分割方程的左右两边
    left_part, right_part = eq_str.split('=')
    # 解析成SymPy表达式
    left_expr = parse_expr(left_part.strip())
    right_expr = parse_expr(right_part.strip())
    # 创建方程对象并加入列表
    equations.append(Eq(left_expr, right_expr))

# 4. 求解方程组
solution = solve(equations, (x, y))

# 输出结果
print(f'x = {solution[x]}')
print(f'y = {solution[y]}')

简洁写法优化

如果你喜欢更紧凑的代码,可以用列表推导式把方程转换的步骤压缩成一行:

equations = [Eq(*map(parse_expr, eq_str.split('='))) for eq_str in eq_strings]

注意点

  • parse_expr比直接用eval更安全,它是SymPy专门用来解析数学表达式的工具,不会执行恶意代码。
  • 如果你的方程组变量不固定(比如有时候包含z),还可以通过解析方程字符串动态提取变量,但针对你当前的需求,直接定义x, y就足够了。

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

火山引擎 最新活动