python并且符号_科学网—学习笔记:用Python解方程或符号运算 - 丁祥欢的博文

在某些领域,Python加上特定的库,可以代替Matlab的部分功能,做为简单的Matlab替代品,比如之前演示过的拟合曲线功能。这里学习一下用Python进行解数学方程:

安装SymPy库(符号Sym,Python缩写Py):pip install sympy完毕就可以用了。

用小朋友的作业为例:

213240voaxjgjmg5xmoj5x.png

题目当然比较简单,先用Matlab演示一下怎么算,再对比一下Python的做法:>> syms x y A B; %定义四个变量x,y, A, B

>> A=3*x^2 + 3*y^2 -5 * x *y; B=2*x*y - 3*y^2 + 4*x^2; %将A B两式输入,这个要保证正确。

>> 2*B - A %求解2B-A

ans =

5*x^2 + 9*x*y - 9*y^2

>> % 上面即是2B-A的值

>> % 再计算第2问,求2B-A的值。根据同类项的定义知道|x-2|=1, y=2. x有3和1两种解,y就是2

>> x=3; y=2; % 第1种情况,给x,y输入值

>> f=@(x,y)5*x^2 +9*x*y -9*y^2; %定义一个无名称的函数f,函数即上述结果>> f(x,y) %求值

ans

= 63

>> x=1; y=2; %调整x y的值

>> f(x,y) % 再计算

ans =

-13

matlab的公式看起来不太直观,但还是挺好用的。

再来看Python的用法import sympy

x,y=sympy.symbols('x y') #定义变量

A=3*x**2 + 3*y**2 -5*x*y#输入公式

B=2*x*y -3*y**2 +4*x**2

fx=2*B-A #定义函数

fx #显示函数结果

5*x**2 + 9*x*y - 9*y**2

fx.evalf(subs={x:3, y:2}) #使用fx的evalf函数来求值,输入的参数用字典形式赋给subs参数

63.0000000000000

fx.evalf(subs={x:1,y:2}) #类似上面,但x值 有变化了。

-13.0000000000000

再来一道题目,如下:

整理一批图书,如果由一个人单独做要花60小时。 现先由一部分人用1小时整理,随后增加15人和他们一起又做了2小时,恰好完成整理工作。假设每个人的工作效率相同,那么先安排整理的人员有多少人?

解:假设先安排整理的人员为x人,则整体的工作量为60(人·小时). 列出方程为:

214028t5e6et6uue1taezz.png

用Python来解:import sympy as sy

x=sy.symbols('x')

f=x*1 + (x+15)*2-60 #方程要变形成右边为零的形式,所以右边的项移到左边为减60, 然后省略=0

answer=sy.solve([f],[x]) #输入方程式列表(可能存在多个方程)和未知数列表(也可能存在多个未知数)。

print(answer) #将answer打印出来即可。

{x: 10}

结果就是 x=10

再来一道 三元一次方程组:

214207s6t3o3dt3w33x43p.png

用Python来解的代码是x,y,z = sy.symbols('x y z')#定义变量

f1=x +2*y +3*z -10 #输入方程,其实直接在列表中输入也可以,这样更简洁一点

f2=3*x -y + 2*z -9

f3=5*x +3*y -4*z -17

answer=sy.solve([f1, f2, f3],[x,y,z]) #将方程代入,变量代入,求解

print(answer)#输出结果

{x: 3, y: 2, z: 1}

很显然,sympy库远不是展示的这么简单的功能,不多说。以下是本文的Markdown文件,顺便吐槽一下:科学网的公式编辑与代码高亮的功能还是差了点,用起来不太方便。转载本文请联系原作者获取授权,同时请注明本文来自丁祥欢科学网博客。

链接地址:http://blog.sciencenet.cn/blog-1213210-1257232.html

上一篇:Biáng Biáng面的Biáng字终于可以在电脑上打出来了!

下一篇:1GWH电池是个什么概念,新规划设想了多少产能?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值