在学习python后发现可以用sympy库进行符号计算,在毕业论文的撰写过程中也一直使用这个库进行符号模型的求解,但在网上很少见类似的教程,所以本文结合一个实际例子进行sympy库符号计算的介绍。
栗子
作为Stackelber博弈模型的领导者,制造商首先制定批发价格 w ~w w,随后零售商根据批发价格 ,制定自己的零售价格 p ~p p,参与新产品的研发程度 θ ~\theta θ, a a~ a 为市场的总需求, c c~ c 为价格系数。
制造商和零售商的决策分别如下:
max R m ( ω ) = ( ω − c ) ( a − b p + θ ) max R r ( p , θ ) = ( p − ω ) ( a − b p + θ ) − 1 2 θ 2 \begin{array}{l} \max {R_m}(\omega ) = (\omega - c)(a - bp + \theta )\\ \max {R_r}(p,\theta ) = (p - \omega )(a - bp + \theta ) - \frac{1}{2}{\theta ^2} \end{array} maxRm(ω)=(ω−c)(a−bp+θ)maxRr(p,θ)=(p−ω)(a−bp+θ)−21θ2
利用sympy求解的步骤如下:
- 将sympy引入工作环境,定义模型中用到的未知量 w w w、 p p p、 θ \theta θ(用 o o o代替)、 a a a、 c c c,并定义我们的Stackelber模型。
from sympy import * #将sympy的所有函数引入工作环境
from fractions import Fraction #利用fractions中Fraction美化分数输出
p, w, o, c, a, b = symbols('p, w, o, c, a, b') #定义所有使用的符号,等号左边的Rm和Rr不需要定义
Rm = (w - c)*(a - b*p + o)