Python技巧|如何利用Sympy进行公式推导

末尾有原文PDF下载链接

介绍

目的

数学推导是需要细心的,不过遇到比较的难解的式子的时候,就很考验我们的“耐心”了!比如下面的这个式子
θ x + ( 1 − θ ) y θ a + ( 1 − θ ) b = γ x a + ( 1 − γ ) y b \dfrac{\theta x + (1-\theta)y}{\theta a + (1-\theta)b} = \gamma \dfrac{x}a + (1-\gamma)\dfrac{y}b θa+(1θ)bθx+(1θ)y=γax+(1γ)by
利用其他变量表示出 γ \gamma γ.

想偷懒,不想手算!!于是,利用Python帮我算。

怎么做?

操作流程

  1. 准备工作:导包:sympy(没有就pip安装一下即可)
  2. 定义变量:简单来说就是告诉计算机哪些字符是变量(可以理解为带有“参数”的方程,和数值计算有些许的区别)
  3. 编写求解的方程:左边+右边
  4. 求解

举个小例子

求解 γ \gamma γ:
a = b γ a = b\gamma a=
显然,结果是: γ = a b \gamma = \dfrac{a}{b} γ=ba. 下面我们利用python来实现这个求解过程.

import sympy as sp # 导包
sp.init_printing()  # 启用 LaTeX 打印


a, b, gamma = sp.symbols('a b gamma') 

equation = sp.Eq(a, b / gamma) # 使用 Eq 函数定义方程

# 求解方程与求解变量
var = gamma
solution = sp.solve(equation, var)

# 输出方程
print('求解的方程为:\n')
display(equation)

# 输出解
print('结果:')
# 使用 Eq 函数表示变量和解的等式
solution_eq = sp.Eq(var, solution[0]) 
display(solution_eq)

求解的方程为:

a = b γ \displaystyle a = \frac{b}{\gamma} a=γb

结果:

γ = b a \displaystyle \gamma = \frac{b}{a} γ=ab

再来一个

求解 γ \gamma γ:
θ x + ( 1 − θ ) y = γ a x + ( 1 − γ ) b y \theta x + (1-\theta)y = \gamma ax + (1-\gamma)by θx+(1θ)y=γax+(1γ)by
Proof: Since θ x + ( 1 − θ ) y = γ a x + b y − γ b y = γ ( a x − b y ) + b y \theta x + (1-\theta)y = \gamma ax + by - \gamma by = \gamma (ax-by) + by θx+(1θ)y=γax+byγby=γ(axby)+by, So
γ = θ x + ( 1 − θ ) y − b y a x − b y \gamma = \dfrac{\theta x + (1-\theta)y - by}{ax-by} γ=axbyθx+(1θ)yby

import sympy as sp # 导包
sp.init_printing()  # 启用 LaTeX 打印


a, b, gamma, theta, x, y= sp.symbols('a b gamma theta x y') 

le = theta * x + (1-theta) * y
re = gamma * a * x + (1-gamma) * b * y
equation = sp.Eq(le, re) # 使用 Eq 函数定义方程

# 求解方程与求解变量
var = gamma
solution = sp.solve(equation, var)

# 输出方程
print('求解的方程为:\n')
display(equation)

# 输出解
print('结果:')
# 使用 Eq 函数表示变量和解的等式
solution_eq = sp.Eq(var, solution[0]) 
display(solution_eq)
求解的方程为:

θ x + y ( 1 − θ ) = a γ x + b y ( 1 − γ ) \displaystyle \theta x + y \left(1 - \theta\right) = a \gamma x + b y \left(1 - \gamma\right) θx+y(1θ)=x+by(1γ)

结果:

γ = − b y + θ x − θ y + y a x − b y \displaystyle \gamma = \frac{- b y + \theta x - \theta y + y}{a x - b y} γ=axbyby+θxθy+y

NOTE:这里可以看出利用Python求解出的答案与手推式一样的

又来一个

求解 γ \gamma γ:
θ x + ( 1 − θ ) y = γ a x + ( 1 − γ ) b y γ a + ( 1 − γ ) b \theta x + (1-\theta)y = \dfrac{\gamma ax + (1-\gamma)by}{\gamma a +(1-\gamma)b} θx+(1θ)y=γa+(1γ)bγax+(1γ)by
γ = b 1 θ a − a + b \gamma = \dfrac{b}{\frac{1}{\theta}a - a + b} γ=θ1aa+bb

import sympy as sp # 导包
sp.init_printing()  # 启用 LaTeX 打印


a, b, gamma, theta, x, y= sp.symbols('a b gamma theta x y') 

le = theta * x + (1 - theta) * y
re = (gamma * a * x + (1 - gamma) * b * y) / (gamma * a + (1 - gamma) * b)
equation = sp.Eq(le, re) # 使用 Eq 函数定义方程

# 求解方程与求解变量
var = gamma
solution = sp.solve(equation, var)

# 输出方程
print('求解的方程为:\n')
display(equation)

# 输出解
print('结果:')
# 使用 Eq 函数表示变量和解的等式
solution_eq = sp.Eq(var, solution[0]) 
display(solution_eq)
求解的方程为:

θ x + y ( 1 − θ ) = a γ x + b y ( 1 − γ ) a γ + b ( 1 − γ ) \displaystyle \theta x + y \left(1 - \theta\right) = \frac{a \gamma x + b y \left(1 - \gamma\right)}{a \gamma + b \left(1 - \gamma\right)} θx+y(1θ)=+b(1γ)x+by(1γ)

结果:

γ = b θ − a θ + a + b θ \displaystyle \gamma = \frac{b \theta}{- a \theta + a + b \theta} γ=aθ+a+bθbθ

NOTE:得到的结果上下同除以 θ \theta θ,即可.

最后一个:开头说到的那个式子

求解 γ \gamma γ
θ x + ( 1 − θ ) y θ a + ( 1 − θ ) b = γ x a + ( 1 − γ ) y b \dfrac{\theta x + (1-\theta)y}{\theta a + (1-\theta)b} = \gamma \dfrac{x}a + (1-\gamma)\dfrac{y}b θa+(1θ)bθx+(1θ)y=γax+(1γ)by
结果: γ = a θ a θ + ( 1 − θ ) b \gamma = \dfrac{a\theta}{a\theta + (1-\theta)b} γ=aθ+(1θ)baθ. 感性兴趣可以自己算(我算过了哈哈哈)

import sympy as sp # 导包
sp.init_printing()  # 启用 LaTeX 打印


a, b, gamma, theta, x, y= sp.symbols('a b gamma theta x y') 

le = (theta * x + (1 - theta) * y)/(theta * a + (1-theta)*b)
re = gamma * (x/a) + (1-gamma)*(y/b)
equation = sp.Eq(le, re) # 使用 Eq 函数定义方程

# 求解方程与求解变量
var = gamma
solution = sp.solve(equation, var)

# 输出方程
print('求解的方程为:\n')
display(equation)

# 输出解
print('结果:')
# 使用 Eq 函数表示变量和解的等式
solution_eq = sp.Eq(var, solution[0]) 
display(solution_eq)
求解的方程为:

θ x + y ( 1 − θ ) a θ + b ( 1 − θ ) = y ( 1 − γ ) b + γ x a \displaystyle \frac{\theta x + y \left(1 - \theta\right)}{a \theta + b \left(1 - \theta\right)} = \frac{y \left(1 - \gamma\right)}{b} + \frac{\gamma x}{a} aθ+b(1θ)θx+y(1θ)=by(1γ)+aγx

结果:

γ = a θ a θ − b θ + b \displaystyle \gamma = \frac{a \theta}{a \theta - b \theta + b} γ=aθbθ+baθ


原文PDF下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YoonJun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值