1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python中Sympy代数符号运算的介绍

Python中Sympy代数符号运算的介绍

时间:2024-04-11 15:15:44

相关推荐

Python中Sympy代数符号运算的介绍

后端开发|Python教程

matlab,数学,python

后端开发-Python教程

易语言菜单栏上加按钮源码,ad和vscode,电脑再装一个ubuntu系统,tomcat线程泄露,服务器用sqlite,好看时间插件,前端三大框架优缺点,爬虫爬取csv文件,php调用脚本,扬州seo顾问,英文网站css,网页swf播放器代码,微信招聘销售模板免费下载lzw

本篇文章给大家带来的内容是关于Python中Sympy代数符号运算的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

分诊 源码,vscode怎么用php,ubuntu编程装机,反编译tomcat文件,quaro爬虫,php登录qq空间,河北seo推广价格优惠,动易企业网站模板下载,手机网页首页设计模板lzw

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

新闻网APP源码,vscode输出闪,怎样连接ubuntu,mvn项目tomcat,sqlite替换功能,免费在线服务器,商品价格查询插件,移动前端web开发框架,爬虫初学书,php开发高级教程,seo专业优化外包公司,网站模版 源码之家,网页侧边菜单不能展开,html帖子模板,如何制作网页专题页面,设备维护管理系统源码,微擎制作小程序lzw

计算器与数学

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

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

答案是有的,它们就是计算机代数系统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在专业数学(数学、数据科学等)领域,由于其拥有非常多而且强大的第三方库,构成了一个极其完善的生态链,即使是面对世界上最为强势最为硬核的软件也是丝毫不虚的。

Sympy的符号运算

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

Sympy与Math函数的区别

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

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

执行之后,结果显示为:

2.82842712474619032*sqrt(2)

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

数学符号与表达式

我们要对数学方程组、微积分等进行运算时,就会遇到变量比如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表示法之后结果为$3x+y^3$,输出的结果就带有x和y变量。Symbol()函数定义单个数学符号;symbols()函数定义多个数学符号。

折叠与展开表达式

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

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

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

表达式化简

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

from sympy import *x,y = symbols(x y)expr=(2*x)**3*(-5*x*y**2)s_expr=simplify(expr)print(s_expr)

求解方程组

在人教版的数学教材里,我们初一上会接触一元一次方程组,初一下就会接触二元一次方程、三元一次方程组,在初三上会接触到一元二次方程,使用Sympy的solve()函数就能轻松解题。

解一元一次方程

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

$$6 \times x + 6 \times(x-2000)=150000$$

from sympy import *x = Symbol(x)print(solve(6*x + 6*(x-2000)-150000,x))

我们需要掌握Python的代码符号和数学符号之间的对应关系,解一元一次方程就非常简单。

解二元一次方程组

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

$$

\begin{cases}

x+ y =10,\\

2 \times x+ y=16

\end{cases}

$$

from sympy import *x,y = symbols(x y)print(solve([x + y-10,2*x+y-16],[x,y]))

很快就可以得出{x: 6, y: 4},也就是

$$x=6,y=4$$。

解三元一次方程组

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

$$

\begin{cases}

x+y+z=12,\\

x+2y+5z=22,\\

x=4y.

\end{cases}

$$

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

$$x=8,y=2,z=2$$

解一元二次方程组

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

from sympy import *x,y = symbols(x y)a,b,c=symbols(a b c)expr=a*x**2 + b*x + cs_expr=solve( expr, x)print(s_expr)

执行之后得出的结果为[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)],我们知道根与系数的关系二次方程会有两个解,这里的格式就是一个列表。转为我们常见的数学公式即为:

$$\frac{-b+\sqrt{-4ac+b^2}}{2a} 、-\frac{b+\sqrt{-4ac+b^2}}{2a}$$

微积分Calculus

微积分是大学高等数学里非常重要的学习内容,比如求极限、导数、微分、不定积分、定积分等都是可以使用Sympy来运算的。

求极限

Sympy是使用limit(表达式,变量,极限值)函数来求极限的,比如我们要求$\lim \limits_{x \to 0} \frac{sinx(x)}{x}$的值。

from sympy import *x, y, z = symbols(x y z)expr = sin(x)/xl_expr=limit(expr, x, 0)print(l_expr)

执行后即可得到结果为1。

求导

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

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),也就是$e^xsin(x)+e^xcos(x)$;求导两次的结果是2*exp(x)*cos(x),也就是

$$2e^xcosx$$

求不定积分

Sympy是使用integrate(表达式,变量)来求不定积分的,比如我们要求$\int(e^x\sin{(x)} + e^x\cos{(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)转化之后为:

$$e^xsin(x)$$

求定积分

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

$\int_{-\infty}^\infty \sin{(x^2)}\,dx$

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,也就是

$$\frac{\sqrt{2}\sqrt{\pi}}{2}$$

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

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的python视频教学栏目!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。