如何在sympy的lambdify方法中使用字典类型传入参数
解决方案
提供两种适配字典传参的实现方式,可根据使用场景选择:
方案1:参数预替换(适合单次固定参数计算)
直接用参数字典替换符号表达式中的参数,再生成仅针对自变量t的数值函数,无需关心参数顺序:
import sympy as sp import numpy as np import matplotlib.pyplot as plt # 原有符号定义 ampl, freq, phase, cte, t = sp.symbols('ampl freq phase cte t') func = ampl * sp.cos(freq * t + phase) + cte # 自定义参数字典 myParamDict = {ampl: 5, freq: 4, phase: 1.5, cte: 12} # 替换所有参数,得到仅含自变量t的表达式 func_with_param = func.subs(myParamDict) # 生成数值函数 func_lamb = sp.lambdify(t, func_with_param, 'numpy') # 绘图调用 xline = np.linspace(0, 10, 11) y_values = func_lamb(xline) plt.plot(xline, y_values) plt.show()
方案2:封装调用层(适合频繁切换参数的场景)
如果需要多次更换参数计算,不需要重复生成lambdify函数,只需封装一层参数自动匹配逻辑:
import sympy as sp import numpy as np import matplotlib.pyplot as plt # 原有符号定义 ampl, freq, phase, cte, t = sp.symbols('ampl freq phase cte t') func = ampl * sp.cos(freq * t + phase) + cte # 仅需定义一次参数顺序列表,后续无需手动匹配 param_order = [ampl, freq, phase, cte] # 生成通用lambdify函数 func_lamb = sp.lambdify(param_order + [t], func, 'numpy') # 封装支持字典传参的调用方法 def calc_func(param_dict, x): # 自动按预定义顺序从字典提取参数 params = [param_dict[p] for p in param_order] return func_lamb(*params, x) # 调用时直接传参数字典,无需关心顺序 myParamDict = {ampl: 5, freq: 4, phase: 1.5, cte: 12} xline = np.linspace(0, 10, 11) y_values = calc_func(myParamDict, xline) plt.plot(xline, y_values) plt.show()
内容的提问来源于stack exchange,提问作者Stef1611
相关产品推荐
相关产品推荐

