用Python学数学之Sympy代数符号运算

本文介绍了Python的Sympy库如何用于进行数学符号运算,包括解决方程组、微积分问题。通过Sympy,我们可以更方便地处理复杂的数学表达式,从而将注意力集中在数学原理和应用上,而非繁琐的计算过程。文章通过实例展示了Sympy在求解一元、二元、三元方程组以及一元二次方程、微积分问题上的应用。
摘要由CSDN通过智能技术生成

在我们初、高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题、不断运算上,计算方法、运算技巧、笔算能力以及数学公式的记忆仿佛成了我们学习数学的全部。这些记忆和技巧没几年就忘掉了,但很多人甚至还记得那份阴影;笔算与解题在AI、图形图像、数据分析等上被软件所取代。那我们学生时代的数学还剩下什么呢?

计算器与数学

说起数学计算器,我们常见的是加减乘除四则运算,有了它,我们就可以摆脱笔算和心算的痛苦。四位数以上的加减乘除在数学的原理上其实并不难,但是如果不借助于计算器,光依赖我们的运算能力(笔算和心算),不仅运算的准确度大打折扣,而且还会让我们对数学的运用停留在一个非常浅的层次。

尽管四则运算如此简单,但是多位数运算的心算却在我们生活中被归为天才般的能力。但是数学的应用应该生活化、普及化,而不是只属于天才的专利,计算器改变了这一切,这就是计算器的魅力。
计算器还可以做科学运算,比如乘方、开方、指数、对数、三角函数等,尽管这些知识在我们初中时代,通过纸笔也是能运算起来的,但是也仅限于一些极其常用和简单的运算,一旦复杂起来,通过纸笔来运算就是一项复杂的工程了。所以说,计算器可以让我们离数学的应用更近

但是我们学生时代所学的数学可远不止这些,尤其是高等数学(微积分)、线性代数、概率统计等数学知识应用非常广泛(我也是后来才知道),但是由于他们的运算非常复杂,我们即便掌握了这些知识,想要应用它又谈何容易,那有没有微积分、线性代数、概率统计等的计算器呢?

答案是有的,它们就是计算机代数系统Computer Algebra System,简称CAS,Python的Sympy库也支持带有数学符号的微积分、线性代数等进行运算。

有了计算器,我们才能真正脱离数学复杂的解题本身,把精力花在对数学原理和应用的学习上,而这才是(在工作方面)数学学习的意义。

计算机代数系统

Sympy可以实现数学符号的运算,用它来进行数学表达式的符号推导和验算,处理带有数学符号的导数、极限、微积分、方程组、矩阵等,就像科学计算器一样简单,类似于**计算机代数系统CAS**,虽然CAS通常是可视化软件,但是维基百科上也把Sympy归为CAS。

几大知名的数学软件比如MathematicaMaximaMatlab(需Symbolic Math Toolbox)Maple等都可以做符号运算,在上篇文章中我们已经拿Python和R、Matlab对比了,显然Python在指定场景下确实优势非常明显,于是我又调研了一下Sympy与Mathematica的比较,在输入公式以及生成图表方面,Sympy确实不行(这一点Python有其他库来弥补),Mathematica能够做什么,Sympy基本也能做什么。

所以说Python在专业数学(数学、数据科学等)领域,由于其拥有非常多而且强大的第三方库,构成了一个极其完善的生态链,即使是面对世界上最为强势最为硬核的软件也是丝毫不虚的。

本专栏用Python学数学的下一期也会介绍一些非常实用的数学工具和数学教材资源,让数学的学习更简单更生动。

Sympy的符号运算

如果之前是学数学相关专业了解计算机代数系统CAS,就会对数学符号的运算比较熟悉,而如果之前是程序员,可能会有点不太明白,下面我们就来了解一下。

Sympy与Math函数的区别

我们先来看一下Sympy库和Python内置的Math函数对数值计算的处理有什么不同。为了让代码可执行,下面的代码都是基于Python3的完整代码。

import sympy,math
print(math.sqrt(8))
print(sympy.sqrt(8))

执行之后,结果显示为:

2.8284271247461903
2*sqrt(2)

math模块是直接求解出一个浮点值,而Sympy则是用数学符号表示出结果,结合LaTex的语法就可以得出我们在课本里最熟悉的的: 2 2 2\sqrt{2} 22

数学符号与表达式

我们要对数学方程组、微积分等进行运算时,就会遇到变量比如x,y,z,f等的问题,也会遇到求导、积分等代数符号表达式,而Sympy就可以保留变量,计算有代数符号的表达式的。

from sympy import *
x = Symbol('x')
y = Symbol('y')
k, m, n = symbols('k m n')
print(3*x+y**3)

输出的结果为:3*x + y**3,转化为LaTex表示法之后结果为 3 x + y 3 3x+y^3 3x+y3,输出的结果就带有x和y变量。Symbol()函数定义单个数学符号;symbols()函数定义多个数学符号。

折叠与展开表达式

factor()函数可以折叠表达式,而expand()函数可以展开表达式,比如表达式: x 4 + x y + 8 x x^4+xy+8x x4+xy+8x,折叠之后应该是 x ( x 3 + y + 8 ) x(x^3+y+8) x(x3+y+8)。我们来看具体的代码:

from sympy import *
x,y = symbols('x y')
expr=x**4+x*y+8*x
f_expr=factor(expr)
e_expr=expand(f_expr)
print(f_expr)
print(e_expr)

表达式的折叠与展开,对应的数学知识就是因式分解,相关的数学知识在人教版初二的教程里。用Python学习数学专栏的目的就是要Python与初高中、大学的数学学习结合起来,让数学变得更加简单生动。

表达式化简

simplify()函数可以对表达式进行化简。有一些表达式看起来会比较复杂,就拿人教版初二上的一道多项式的乘法为例,简化 ( 2 x ) 3 ( − 5 x y 2 ) (2x)^3(-5xy^2) (2x<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值