侧边栏壁纸
博主头像
LittleAO的学习小站 博主等级

在知识的沙漠寻找绿洲

  • 累计撰写 125 篇文章
  • 累计创建 27 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Python数学之符号数学

LittleAO
2023-07-16 / 0 评论 / 0 点赞 / 5 阅读 / 0 字
温馨提示:
本文最后更新于2023-11-13,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

优秀的数学工具:Jupyter Notebook介绍、安装及使用教程 - 知乎 (zhihu.com)

notion image

利用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)

notion image

0

评论区