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

如何编写Python类实现给定方程及n-1个变量值时自动求解剩余缺失变量

实现方案

你可以基于SymPy封装通用的自动求解类,完全不需要重复编写公式,也不用写大量条件判断逻辑,核心思路是预定义所有涉及的变量为符号对象,将公式统一存储为等式结构,每次传入参数后自动识别未知量、调用求解器完成计算。

依赖安装

pip install sympy

单方程示例(摄氏度-华氏度转换)

from sympy import symbols, Eq, solve

class TempConversion:
    # 预定义所有变量
    C, F = symbols("C F")
    # 只需要编写一次公式
    EQUATIONS = [
        Eq(F, 9/5 * C + 32)
    ]

    def __init__(self, **kwargs):
        # 收集已知变量的取值
        known_vars = kwargs
        # 找到所有未传入的未知变量
        unknown_vars = [var for var in [self.C, self.F] if str(var) not in known_vars]

        # 自动求解
        solutions = solve(self.EQUATIONS, unknown_vars, dict=True)[0]
        # 把所有变量的结果写入实例属性
        all_vars = {**known_vars, **{str(k): v for k, v in solutions.items()}}
        for k, v in all_vars.items():
            setattr(self, k, float(v))

使用示例

# 传入摄氏度求华氏度
temp1 = TempConversion(C=25)
print(temp1.F)  # 输出 77.0

# 传入华氏度求摄氏度
temp2 = TempConversion(F=77)
print(temp2.C)  # 输出 25.0

多变量/方程组扩展示例(理想气体状态方程)

只需要修改类的变量和方程定义即可,求解逻辑完全复用:

from sympy import symbols, Eq, solve

class IdealGasLaw:
    # 压强P、体积V、物质的量n、气体常数R、温度T
    P, V, n, R, T = symbols("P V n R T")
    # 只写一次方程
    EQUATIONS = [
        Eq(P*V, n*R*T),
        # 可以继续加更多关联方程,自动支持方程组求解
        Eq(R, 8.314)  # 固定气体常数,可省略传参
    ]

    def __init__(self, **kwargs):
        known_vars = kwargs
        all_symbols = [self.P, self.V, self.n, self.R, self.T]
        unknown_vars = [var for var in all_symbols if str(var) not in known_vars]
        solutions = solve(self.EQUATIONS, unknown_vars, dict=True)[0]
        all_vars = {**known_vars, **{str(k): v for k, v in solutions.items()}}
        for k, v in all_vars.items():
            setattr(self, k, float(v))

使用示例

# 已知n=1mol,V=1m³,T=273.15K,求压强
gas = IdealGasLaw(n=1, V=1, T=273.15)
print(gas.P)  # 输出约 2269.7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:03