||
在某些领域,Python加上特定的库,可以代替Matlab的部分功能,做为简单的Matlab替代品,比如之前演示过的拟合曲线功能。这里学习一下用Python进行解数学方程:
安装SymPy库(符号Sym,Python缩写Py): pip install sympy 完毕就可以用了。
用小朋友的作业为例:
题目当然比较简单,先用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(人·小时). 列出方程为:
用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
再来一道 三元一次方程组:
用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文件,顺便吐槽一下:科学网的公式编辑与代码高亮的功能还是差了点,用起来不太方便。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 06:42
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社