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

如何从列表创建SymPy符号以实现高斯误差传播?

符号创建与高斯误差传播实现

问题需求

需将符号列表['C_k', 'c_f', 'm_1', 'T_1', 'T_m']中的每个元素转为SymPy符号,最终用于高斯误差传播——计算表达式在给定点的偏导数。现有代码已完成LaTeX公式到SymPy表达式的转换,并提取出表达式中的符号列表,需补充符号创建与导数计算环节。

现有代码

import matplotlib.pyplot as plt
from latex2sympy2 import latex2sympy
import numpy as np
from sympy import *
import re

# 任务:针对给定公式和带不确定度的数据集执行误差传播
Formula = r'(m_1\cdot c_f+C_k)\cdot (T_1-T_m)'  # 输入LaTeX格式的公式
Formula = latex2sympy(Formula)  # 转换为SymPy表达式

# 通过正则提取表达式中的符号列表
symbol_list = re.findall(r'[A-Za-z_]+\d*', str(Formula))
print(symbol_list)  # 输出:['C_k', 'c_f', 'm_1', 'T_1', 'T_m']

实现步骤

1. 创建SymPy符号

利用symbols()函数,将符号列表拼接为空格分隔的字符串传入,或直接通过字典映射符号名与对象(方便后续按名称调用):

# 方式1:生成符号元组
symbols_tuple = symbols(' '.join(symbol_list))

# 方式2:生成符号字典(推荐,便于按名称调用)
symbols_dict = {name: symbols(name) for name in symbol_list}

2. 计算偏导数(高斯误差传播核心)

遍历符号列表,对每个符号求表达式的偏导,再代入具体数值计算:

# 计算每个符号的偏导数
derivatives = {}
for name, symbol in symbols_dict.items():
    derivatives[name] = diff(Formula, symbol)

# 模拟测量点的数值
point_values = {
    'C_k': 10,
    'c_f': 0.5,
    'm_1': 2,
    'T_1': 30,
    'T_m': 20
}

# 在给定点计算各偏导的浮点结果
derivative_values = {}
for name, deriv in derivatives.items():
    derivative_values[name] = deriv.subs(point_values).evalf()

print("各符号的偏导数值:")
for name, val in derivative_values.items():
    print(f"{name}: {val}")

完整代码示例

import matplotlib.pyplot as plt
from latex2sympy2 import latex2sympy
import numpy as np
from sympy import *
import re

# 任务:针对给定公式和带不确定度的数据集执行误差传播
Formula = r'(m_1\cdot c_f+C_k)\cdot (T_1-T_m)'  # 输入LaTeX格式的公式
Formula = latex2sympy(Formula)  # 转换为SymPy表达式

# 通过正则提取表达式中的符号列表
symbol_list = re.findall(r'[A-Za-z_]+\d*', str(Formula))
print("提取的符号列表:", symbol_list)

# 创建符号字典,映射符号名与SymPy符号对象
symbols_dict = {name: symbols(name) for name in symbol_list}

# 计算每个符号的偏导数
derivatives = {name: diff(Formula, symbol) for name, symbol in symbols_dict.items()}

# 模拟测量点数值
point_values = {
    'C_k': 10,
    'c_f': 0.5,
    'm_1': 2,
    'T_1': 30,
    'T_m': 20
}

# 计算给定点的偏导数值
derivative_values = {name: deriv.subs(point_values).evalf() for name, deriv in derivatives.items()}

print("\n各符号的偏导数值:")
for name, val in derivative_values.items():
    print(f"{name}: {val}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:05:22