1. 苏葳的备忘录首页
  2. 编程

用Python的sympy库解多元一次方程

python wxpython boa

有道这样的考试题:某商品的进货价比上月低了5%,但店里仍按上月售价销售,利润率提高了6%。则上月销售此商品的利润率为多少?

注意利润率的计算公式是:利润/成本=利润率。开始时误以为是利润/售价=利润率,走了弯路。可以用多元方程组来解这个问题,首先设置变量:

x:本月进价
y:上月进价
m:本月利润率
n:上月利润率
z:售价,方便计算起见,设为100(元),此值不影响利润率的计算结果

可列出如下方程组:

x=y*(1-0.05)
m=n+0.06
m=(z-x)/x
n=(z-y)/y
z=100

转换为右边为0的形式:

x-0.95*y=0
m-n-0.06=0
m*x-z+x=0
n*y-z+y=0
z-100=0

python常用的数学库有numpy,scipy,sympy等。用sympy解这个方程组更直观一些。这里使用python3安装的sympy库:

from sympy import *
x=Symbol('x') #本月进价
y=Symbol('y') #上月进价
m=Symbol('m') #本月利润率
n=Symbol('n') #上月利润率
z=Symbol('z') #售价,假定为100元。
result=solve([x-0.95*y,m-n-0.06,m*x-z+x,n*y-z+y,z-100],[x,y,m,n,z])
print(result)

运行之:

[(83.3333333333333, 87.7192982456140, 0.200000000000000, 0.140000000000000, 100.000000000000)]

可看到,列表对应的值n,也就是上月的利润率为14%。

如果修改售价呢?毕竟这个值原题中并未给出。把售价随便修改为234元,再次运行程序:

from sympy import *
x=Symbol('x') #本月进价
y=Symbol('y') #上月进价
m=Symbol('m') #本月利润率
n=Symbol('n') #上月利润率
z=Symbol('z') #售价,假定为234元。
result=solve([x-0.95*y,m-n-0.06,m*x-z+x,n*y-z+y,z-234],[x,y,m,n,z]) #注意此处把z值修改为234了。
print(result)

看输出:

[(195.000000000000, 205.263157894737, 0.200000000000000, 0.140000000000000, 234.000000000000)]

可看到,假定的售价调整后,进价、售价之类相应变化,但上月和本月的利润率,仍然是14%和20%。其实题目原题是选择题,14%就是正确答案。

可见,虽然此类方程并不复杂,但用程序代码来解题,还是能够节约不少时间。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/2202.html

发表评论

邮箱地址不会被公开。 必填项已用*标注