在我们初、高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题、不断运算上,计算方法、运算技巧、笔算能力以及数学公式的记忆仿佛成了我们学习数学的全部。这些记忆和技巧没几年就忘掉了,但很多人甚至还记得那份阴影;笔算与解题在AI、图形图像、数据分析等上被软件所取代。那我们学生时代的数学还剩下什么呢?
计算器与数学
说起数学计算器,我们常见的是加减乘除四则运算,有了它,我们就可以摆脱笔算和心算的痛苦。四位数以上的加减乘除在数学的原理上其实并不难,但是如果不借助于计算器,光依赖我们的运算能力(笔算和心算),不仅运算的准确度大打折扣,而且还会让我们对数学的运用停留在一个非常浅的层次。

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

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

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

有了计算器,我们才能真正脱离数学复杂的解题本身,把精力花在对数学原理和应用的学习上,而这才是(在工作方面)数学学习的意义。
计算机代数系统
Sympy可以实现数学符号的运算,用它来进行数学表达式的符号推导和验算,处理带有数学符号的导数、极限、微积分、方程组、矩阵等,就像科学计算器一样简单,类似于计算机代数系统CAS,虽然CAS通常是可视化软件,但是维基百科上也把Sympy归为CAS。

几大知名的数学软件比如Mathematica、Maxima、Matlab(需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的语法就可以得出我们在课本里最熟悉的的:

[公式]

数学符号与表达式

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

from sympy import *
x = Symbol(‘x’)
y = Symbol(‘y’)
k, m, n = symbols(‘k m n’)
print(3x+y**3)
输出的结果为:3
x + y**3,转化为LaTex表示法之后结果为 [公式] ,输出的结果就带有x和y变量。Symbol()函数定义单个数学符号;symbols()函数定义多个数学符号。

折叠与展开表达式

factor()函数可以折叠表达式,而expand()函数可以展开表达式,比如表达式: [公式] ,折叠之后应该是 [公式] 。我们来看具体的代码:

from sympy import *
x,y = symbols(‘x y’)
expr=x**4+xy+8x
f_expr=factor(expr)
e_expr=expand(f_expr)
print(f_expr)
print(e_expr)
表达式的折叠与展开,对应的数学知识就是因式分解,相关的数学知识在人教版初二的教程里。用Python学习数学专栏的目的就是要Python与初高中、大学的数学学习结合起来,让数学变得更加简单生动。

表达式化简

simplify()函数可以对表达式进行化简。有一些表达式看起来会比较复杂,就拿人教版初二上的一道多项式的乘法为例,简化 [公式] 。

from sympy import *
x,y = symbols(‘x y’)
expr=(2x)*3(-5x*y**2)
s_expr=simplify(expr)
print(s_expr)
求解方程组
在人教版的数学教材里,我们初一上会接触一元一次方程组,初一下就会接触二元一次方程、三元一次方程组,在初三上会接触到一元二次方程,使用Sympy的solve()函数就能轻松解题。

解一元一次方程

我们来求解这个一元一次方程组。(题目来源于人教版七年级数学上) [公式]

from sympy import *
x = Symbol(‘x’)
print(solve(6x + 6(x-2000)-150000,x))
我们需要掌握Python的代码符号和数学符号之间的对应关系,解一元一次方程就非常简单。

解二元一次方程组

我们来看如何求解二元一次方程组。(题目来自人教版七年级数学下)

[公式]

from sympy import *
x,y = symbols(‘x y’)
print(solve([x + y-10,2*x+y-16],[x,y]))
很快就可以得出{x: 6, y: 4},也就是

[公式] 。

解三元一次方程组

我们来看如何解三元一次方程组。(题目来自人教版七年级数学下)

[公式]

执行之后,很快可以得出结果{x: 8, y: 2, z: 2},也就是

[公式]

解一元二次方程组

比如我们来求解人教版九年级一元二次方程组比较经典的一个题目,ax2+bx+c=0ax^2+bx+c=0ax2+bx+c=0.

from sympy import *
x,y = symbols(‘x y’)
a,b,c=symbols(‘a b c’)
expr=ax**2 + bx + c
s_expr=solve( expr, x)
print(s_expr)
执行之后得出的结果为[(-b + sqrt(-4ac + b2))/(2a), -(b + sqrt(-4a*c + b2))/(2*a)],我们知道根与系数的关系二次方程会有两个解,这里的格式就是一个列表。转为我们常见的数学公式即为:

[公式]

微积分Calculus
微积分是大学高等数学里非常重要的学习内容,比如求极限、导数、微分、不定积分、定积分等都是可以使用Sympy来运算的。 求极限 Sympy是使用limit(表达式,变量,极限值)函数来求极限的,比如我们要求 [公式] 的值。

from sympy import *
x, y, z = symbols(‘x y z’)
expr = sin(x)/x
l_expr=limit(expr, x, 0)
print(l_expr)
执行后即可得到结果为1。

求导

可以使用diff(表达式,变量,求导的次数)函数对表达式求导,比如我们要对 [公式] 进行 [公式] 求导,以及求导两次,代码如下:

from sympy import *
x,y = symbols(‘x y’)
expr=sin(x)*exp(x)
diff_expr=diff(expr, x)
diff_expr2=diff(expr,x,2)
print(diff_expr)
print(diff_expr2)
求导一次的结果就是exp(x)*sin(x) + exp(x)cos(x),也就是 [公式] ;求导两次的结果是2exp(x)*cos(x),也就是

[公式]

求不定积分

Sympy是使用integrate(表达式,变量)来求不定积分的,比如我们要求∫(exsin⁡(x)+excos⁡(x))dx\int(e^x\sin{(x)} + e^x\cos{(x)})\,dx∫(exsin(x)+excos(x))dx

from sympy import *
x,y = symbols(‘x y’)
expr=exp(x)*sin(x) + exp(x)*cos(x)
i_expr=integrate(expr,x)
print(i_expr)
执行之后的结果为:exp(x)*sin(x) 转化之后为:

[公式]

求定积分

Sympy同样是使用integrate()函数来做定积分的求解,只是语法不同:integrate(表达式,(变量,下区间,上区间)),我们来看如果求解 [公式]

from sympy import *
x,y = symbols(‘x y’)
expr=sin(x**2)
i_expr=integrate(expr, (x, -oo, oo))
print(i_expr)
执行之后的结果为sqrt(2)*sqrt(pi)/2,也就是

[公式]

Sympy能够做的也远不止这些,初高中、大学的数学运算题在Sympy极为丰富的功能里不过只是开胃入门小菜而已。

用Python学数学之Sympy代数符号运算相关推荐

  1. python @符号_用Python学数学之Sympy代数符号运算

    在我们初.高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题.不断运算上,计算方法.运算技巧.笔算能力以及数学公式的记忆仿佛成了我们学习数 ...

  2. python符号计算_用Python学数学之Sympy代数符号运算

    在我们初.高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题.不断运算上,计算方法.运算技巧.笔算能力以及数学公式的记忆仿佛成了我们学习数 ...

  3. python数学符号代码_用Python学数学之Sympy代数符

    在我们初.高中和大学近10年的学习时间里,数学一直占据着非常大的分量,但是回忆过去可以发现,我们把大量的时间都花在反复解题.不断运算上,计算方法.运算技巧.笔算能力以及数学公式的记忆仿佛成了我们学习数 ...

  4. Sympy代数符号运算库

    Python之Sympy代数符号运算库 计算器与数学 计算机代数系统 CAS Sympy符号运算的基本使用指南 Sympy 与 Math 函数的区别 定义变量 Symbol('x'), symbols ...

  5. Python入门数学类编程-----基础数学运算

    基本数学运算 直接运用+.-./.*.//(返回结果为整数) 不同类型的数字 >>> type(1.4781290) <class 'float'> >>&g ...

  6. python积分计算高等数学_Python与高等数学之Python与积分!用Python学数学

    计算机科学的起源是为了解决数学问题,所以,在某种程度上,可以把计算机科学归为数学的一个分支.因此,可以通过使用Python程序来学习高等数学中的知识,如积分.微分等,反之,也可以通过解决数学问题深化P ...

  7. python符号运算_用Python做科学计算-SymPy符号运算

    安装sympy库 ~$ sudo pip install sympy 例子 >>> from __future__ import division >>> from ...

  8. python学数学1-1:认识数字--自然数公理

    自然数的概念直接来自人们的生活,但数学家们为自然数N建立了完整的公理体系.皮亚诺公理就是接受最广的一个. 我们这里使用扩展的自然数(即包含了0的自然数) ①N中有一个元素,记作0. ②N中任一个元素都 ...

  9. python sympy库实现代数符号运算及表达式推导

    matlab是工程和科研人员必备的工具利器, 其一大功能就是可以实现代数符号运算,以及表达式推导,或者复杂表达式的化简工作, 是广大粗心而没有耐心计算人员的福音. clc close all clea ...

最新文章

  1. 5.9、离散卷积的一般描述
  2. Qt状态机框架介绍(一)
  3. linux如何查看所有的用户(user)、用户组(group)、密码(password/passwd)
  4. 聊聊高并发下库存加减那些事儿——“异步扣减库存”
  5. 【翻译】在Ext JS中创建特定主题的重写
  6. java 改装电动_java 数组
  7. python微信自动回复
  8. 苹果移动设备用什么管理比较好?有什么推荐?
  9. Excel 快速填充序号
  10. IOC容器构造之资源文件定位源码分析
  11. 94 - 绘制谢尔宾斯基三角形
  12. JavaSE_day01【Java概述、环境搭建、标识符、变量、基本数据类型】
  13. css 文本属性 文本两端对齐 单行文本间距 首行缩进
  14. 用IDEA弹奏《起风了》伴奏音乐 Java语言 <源码分享> GitHub有趣的小项目
  15. latex sty文件设置
  16. 分布式架构的几种实现方式
  17. 第三届北京·顺义张镇灶王文化节即将开幕
  18. 如何写出让同事无法维护的代码?
  19. 微信小程序怎么开发(小程序开发文档)
  20. Qt的LGPL协议是否意味着可以自由用QT开发商业软件?

热门文章

  1. 性能监控-软中断出现瓶颈的查看方式
  2. 金融计算机有效年利率,理性消费!教你正确计算分期的真实利率
  3. java MySQL 查询所有子级(不包含自己)
  4. (已更新)社区论坛小程序源码,功能齐全,简洁漂亮,前端+后端
  5. 2021全国大学生电子设计竞赛A题
  6. 下载Microsoft Store的应用安装包
  7. 如何取消Windows server 2016登录密码
  8. Oracle不能用system用户 ORA-01017
  9. 麒麟操作系统基于linux哪个版本_中国为什么有这么多麒麟Linux系统
  10. GitHub官方App正式推出了,小伙伴们确定不下载一个吗?