【Python】小技巧——手动提取方程系数-基于Sympy库

提取方程系数

        基本思路:对方程中每个未知数分别求导,即可获得此项的系数,再使用列表保存所有系数。

import sympy as sp

# 预先定义3个符号变量
a0, a1, a2 = sp.symbols('a0 a1 a2')
# 设置一个方程
equation = 1*a0 + 2*a1 + 3*a2 - 4
# 创建一个空列表用来保存提取的系数
factor_list = []
# 对各个符号变量求导,即可获取系数,并保存到列表中
factor_list.append(sp.diff(equation, 'a0'))
factor_list.append(sp.diff(equation, 'a1'))
factor_list.append(sp.diff(equation, 'a2'))
print(factor_list)

结果:

从结果看,确实很好的提取出了方程系数 。

但没有复用性,特定性很强,为了开发适用于一般性的系数提取方法,存在以下几个问题:

  1. 如何在不确定符号变量的情况下进行提取
  2. 提取的系数应该与符号变量有一一对应的关系,单纯列表保存则无法区分哪个数字是哪个变量的系数
  3. 若变量是高次项,则需要多次微分,才能提取出系数

对问题1:

        因为符号变量是人为预定义的,比如采用同一字母加下标的形式定义符号变量x_{0},x_{1},x_{2},\cdots ,x_{n}

        故不确定信息是符号变量只是下标。

        解决思路:使用全局变量保存符号变量个数,利用总数量循环生成全部符号变量并保存为列表,通过遍历该列表, 来依次提取方程系数。


对问题2: 

        解决思路:在处理问题1遍历全部符号遍历列表时,依次微分,将非零结果与其对应的符号变量存入字典


对问题3:

        解决思路:在处理问题2提取系数时,将非零微分结果转换为字符串,判断其是否包含符号变量,若包含,则再次微分,否则才存入字典。

你可能感兴趣的:(数学物理编程,python,开发语言,pycharm)