SymPy求解符号方程后自动代入x数值计算y值的优化方案
优化实现方法
你可以用SymPy自带的lambdify方法将符号求解得到的表达式直接转换为支持NumPy数组输入的可调用函数,完全不需要手动抄写表达式,具体实现如下:
import matplotlib.pyplot as plt import numpy as np from sympy import symbols, solve, lambdify m = 40 pa = 1 pb = 2 # 定义符号变量、构建方程 x_sym, y_sym = symbols('x y') eq = pa * x_sym + pb * y_sym - m # 求解y的符号表达式 y_sol_list = solve(eq, y_sym) y_expr = y_sol_list[0] # 取出唯一解的符号表达式 # 将符号表达式转换为支持NumPy输入的函数 calc_y = lambdify(x_sym, y_expr, modules='numpy') # 生成x数组直接计算y x = np.linspace(1, 4, 41) y = calc_y(x) plt.plot(x, y) plt.show()
核心逻辑说明
- 求解得到的
y_expr是SymPy的符号表达式对象,不需要手动读取内容,直接交给lambdify处理即可 lambdify的第三个参数指定modules='numpy',转换后的函数可以直接传入NumPy数组,批量计算结果效率很高- 避免了手动抄写表达式容易出错的问题,你原代码里手动写的
y=2-x/2就是笔误,正确解应该是y=20-x/2,用自动转换的方法完全不会出现这类错误
如果仅需要代入单个或少量数值计算,也可以直接用符号表达式的subs方法,示例:y_val = y_expr.subs(x_sym, 10)即可得到x=10时对应的y值35。
内容的提问来源于stack exchange,提问作者Markus Kaukonen
相关产品推荐
相关产品推荐

