优秀的数学工具:Jupyter Notebook介绍、安装及使用教程 - 知乎 (zhihu.com)
利用Sympy包来求解代数和符号数学问题
定义符号和符号运算
基本的四则运算在Python中很容易实现,但是如果遇到了含有未知数的式子,是不是变得手足无措。别着急,Python中的Sympy包能够很好的帮助我们解决这个问题。
在开始之前,我们首先需要引入Sympy的symbol对象:
from sympy import Symbol
使用symbol类构造对象:
x = Symbol('x')
这句话的意思是变量x是以‘x’字符为参数。请注意,传输的变量要求是一个字符串。
然后我们就可以构造一个表达式并打印出来:
expr = x+x+1
print(expr)
输出结果为:
2*x + 1
from sympy import Symbol,latex
x = Symbol('x')
expr = (x+x+1)/(2**x+1)
print(latex(expr))
输出结果为:\frac{2 x + 1}{2^{x} + 1},\frac{2 x + 1}{2^{x} + 1}。
当然也可以用如下方式进行多个未知数的计算:
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')
expr = x+2*y+3**z
print(expr)
运行结果:
3**z + x + 2*y
使用表达式
展开和因式分解
使用factor()函数将表达式转化为因式分解分解的形式,例如:
import sympy as sy
x = sy.Symbol('x')
y = sy.Symbol('y')
expr = x**2-y**2
print(sy.factor(expr))
运行结果为:
(x - y)*(x + y)
使用expand()函数将表达式展开,例如:
import sympy as sy
x = sy.Symbol('x')
y = sy.Symbol('y')
expr = (x+y)**3
print(sy.expand(expr))
运行结果为:
x**3 + 3*x**2*y + 3*x*y**2 + y**3
如果无法分解,则会返回原表达式。
整齐输出
使用pprint()函数让整个表达式看起来更清晰,类似于我们手写的表达式,例如:
import sympy as sy
x = sy.Symbol('x')
y = sy.Symbol('y')
expr = (x+y)**3
sy.pprint(sy.expand(expr))
3 2 2 3
x + 3⋅x ⋅y + 3⋅x⋅y + y
如果需要将表达式改为从低阶道高阶的形式,我们需要使用init_printing()函数,将关键字参数order改为'rev-lex',例如:
import sympy as sy
sy.init_printing(order='rev-lex')
x = sy.Symbol('x')
expr = (x+1)**3
sy.pprint(sy.expand(expr))
2 3
1 + 3⋅x + 3⋅x + x
用值来代替符号
利用sub()函数来将参数替换为具体的值,例如:
import sympy as sy
x = sy.Symbol('x')
y = sy.Symbol('y')
expr = x*x+x*y+x*y+y*y
print(expr.subs({x:1,y:2}))
9
也可以用subs()将一个未知数替换成另一个未知数的式子,例如:
print(expr.subs({x:1-y}))
y**2 + 2*y*(1 - y) + (1 - y)**2
由示例可以看出,得到的式子并不是最简式,我们可以用simplify()函数进行化简。
print(sy.simplify(expr.subs({x:1-y})))
1
解方程
使用solve()函数来求解一般的方程,例如求解x^2+5x+4:
import sympy as sy
x = sy.Symbol('x')
expr = x**2+5*x+4
print(sy.solve(expr, dict = True)) # dict=True表示求解结果安装字典返回
[{x: -4}, {x: -1}]
solve()函数还可以用其他变量来求解一个变量,例如:
import sympy as sy
x = sy.Symbol('x')
y = sy.Symbol('y')
expr = x**2+5*x+4-y
print(sy.solve(expr,x,dict = True)) # 求解x的值
[{x: -sqrt(4*y + 9)/2 - 5/2}, {x: sqrt(4*y + 9)/2 - 5/2}]
求解线性方程组的方法如下:
import sympy as sy
x = sy.Symbol('x')
y = sy.Symbol('y')
expr1 = 2*x+3*y-6
expr2 = 3*x+2*y-12
print(sy.solve((expr1, expr2), dict = True))
[{x: 24/5, y: -6/5}]
绘图
使用sympy.plotting可以很轻松的进行绘图,例如:
import sympy as sy
x = sy.Symbol('x')
expr1 = 2*x-6
expr2 = x**2+3
sy.plotting.plot(expr1,expr2)


评论区