用Python做科学计算(工具篇)sympy使用指南(符号运
什么是SymPy?
SymPy是一款用于符号运算的Python库。它旨在成为Mathematica或Maple等系统的替代品,同时保持代码尽可能简单且易于扩展。SymPy完全用Python编写,不需要任何外部库。
目录sympy第一步
将symy用作计算器
符号代数操作
展开
化简微积分
极限
微分
级数展开
积分方程求解线性代数
矩阵
微分方程3。2。1。SymPy的第一步3。2。1。1。使用SymPy作为计算器
SymPy定义了三种数值类型实数,有理数和整数。
有理数类将有理数表示为一对两个整数:分子和分母,因此表示12、52等:Rational(1,2)Rational(5,2)
importsympyassymasym。Rational(1,2)a12a21
SymPy在后台使用mpmath,这使得使用任意精度算术执行计算成为可能。这样,一些特殊的常数,如e,pi,无穷大(Infinity)被视为符号并且可以以任意精度计算:
sym。pi2pi2sym。pi。evalf()3。14159265358979(sym。pisym。exp(1))。evalf()5。85987448204884
evalf将表达式计算为浮点数。
还有一个表示数学无穷大的类,oo:
sym。oo99999Truesym。oo1oo3。2。1。2。符号
与其他计算机代数系统相比,在SymPy中你必须显式声明符号变量:
xsym。Symbol(x)ysym。Symbol(y)
然后可以操作它们:
xyxy2x(xy)2(xy)2
现在可以使用一些python运算符来操作符号:、(算术)、、,,,(布尔值)。,
print
Sympy允许控制输出的显示。从这里我们使用以下设置进行print:
sym。initprinting(useunicodeFalse,wraplineTrue)3。2。2。代数运算
SymPy能够执行强大的代数运算。我们将研究一些最常用的:展开和化简。3。2。2。1。展开
使用它来展开代数表达式。它将尝试消除幂和乘法:
sym。expand((xy)3)3223x3xy3xyy3xy23yx2x3y33223x3xy3xyy
可以在关键字的表单中提供更多选项:
sym。expand(xy,complexTrue)re(x)re(y)Iim(x)Iim(y)sym。Isym。im(x)sym。Isym。im(y)sym。re(x)sym。re(y)re(x)re(y)Iim(x)Iim(y)sym。expand(sym。cos(xy),trigTrue)sin(x)sin(y)cos(x)cos(y)sym。cos(x)sym。cos(y)sym。sin(x)sym。sin(y)sin(x)sin(y)cos(x)cos(y)3。2。2。2。化简
如果您想将表达式转换为更简单的形式,请使用简化:
sym。simplify((xxy)x)y1
化简是一个有点模糊的术语,并且存在更精确的化简替代方案:(powsimp指数的简化),(trigsimp对于三角表达式),logcombine,radsimp3。2。3。微积分3。2。3。1。极限
限制在SymPy中很容易使用,语法limit(function,variable,point),比如要计算f(x)在x趋于0的极限,使用limit(f,x,0)
sym。limit(sym。sin(x)x,x,0)1
还可以计算无穷大的极限:
sym。limit(x,x,sym。oo)oosym。limit(1x,x,sym。oo)0sym。limit(xx,x,0)13。2。3。2。微分
使用diff(func,var)计算任何SymPy的表达式。例子:
sym。diff(sym。sin(x),x)cos(x)sym。diff(sym。sin(2x),x)2cos(2x)sym。diff(sym。tan(x),x)2tan(x)1
通过以下方式检查它是否正确:
sym。limit((sym。tan(xy)sym。tan(x))y,y,0)2tan(x)1
可以使用以下方法计算更高阶的导数:diff(func,var,n)
sym。diff(sym。sin(2x),x,1)2cos(2x)sym。diff(sym。sin(2x),x,2)4sin(2x)sym。diff(sym。sin(2x),x,3)8cos(2x)3。2。3。3。级数展开
SymPy还知道如何计算一个表达式的泰勒级数。使用:series(expr,var)
sym。series(sym。cos(x),x)24xx61Ox224sym。series(1sym。cos(x),x)24x5x61Ox2243。2。3。4。积分
SymPy支持通过integrate()工具对先验基本函数和特殊函数进行不定和定积分,它使用强大的扩展RischNorman算法和一些启发式和模式匹配。
sym。integrate(6x5,x)6xsym。integrate(sym。sin(x),x)cos(x)sym。integrate(sym。log(x),x)xlog(x)xsym。integrate(2xsym。sinh(x),x)2xcosh(x)
特殊函数也很容易处理:
sym。integrate(sym。exp(x2)sym。erf(x),x)2pierf(x)4
可以计算定积分:
sym。integrate(x3,(x,1,1))0sym。integrate(sym。sin(x),(x,0,sym。pi2))1sym。integrate(sym。cos(x),(x,sym。pi2,sym。pi2))2
也支持不定积分:
sym。integrate(sym。exp(x),(x,0,sym。oo))1sym。integrate(sym。exp(x2),(x,sym。oo,sym。oo))pi3。2。4。方程求解
SymPy能够解决代数方程,在一个和多个变量中使用solveset():
sym。solveset(x41,x){1,1,I,I}
它将一个应该等于0的表达式作为第一个参数。它还(有限)支持超越方程:
sym。solveset(sym。exp(x)1,x){I(2npipi)ninIntegers}
线性方程组
Sympy能够求解大部分多项式方程,并且还能够求解关于多个变量的多个方程,将元组作为第二个参数。使用以下solve()命令:
solutionsym。solve((x5y2,3x6y15),(x,y))solution〔x〕,solution〔y〕
(3,1)
多项式方程的另一种选择是factor。factor返回分解为不可约项的多项式,并且能够计算各个域的分解:
fx43x21sym。factor(f)22xx1xx1sym。factor(f,modulus5)22(x2)(x2)
SymPy还能够求解布尔方程,即确定某个布尔表达式是否可满足。为此,我们使用可满足的函数:
sym。satisfiable(xy){x:True,y:True}
这告诉我们,无论何时都是True并且两者都是True。如果一个表达式不能为真,即没有任何参数值可以使表达式为真,它将返回False:(xy)xy
sym。satisfiable(xx)False3。2。5。线性代数3。2。5。1。矩阵
矩阵是作为Matrix类的实例创建的:
sym。Matrix(〔〔1,0〕,〔0,1〕〕)〔10〕〔〕〔01〕
与NumPy数组不同,还可以将Symbols放入其中:
x,ysym。symbols(x,y)Asym。Matrix(〔〔1,x〕,〔y,1〕〕)A〔1x〕〔〕〔y1〕A2〔xy12x〕〔〕〔2yxy1〕3。2。5。2。微分方程
SymPy能够求解(一些)普通微分问题。要求解微分方程,请使用dsolve。首先,通过将clsFunction传递给symbols函数来创建一个未定义的函数:
f,gsym。symbols(fg,clssym。Function)
f和g现在是未定义的函数。我们可以调用f(x),它将代表一个未知函数:
f(x)f(x)f(x)。diff(x,x)f(x)2df(x)(f(x))2dxsym。dsolve(f(x)。diff(x,x)f(x),f(x))f(x)C1sin(x)C2cos(x)
可以为此函数提供关键字参数,以帮助找到可能的最佳解析系统。例如,如果你知道它是一个可分离方程,你可以使用关键字hintseparable强制dsolve将它解析为一个可分离方程:
sym。dsolve(sym。sin(x)sym。cos(f(x))sym。cos(x)sym。sin(f(x))f(x)。diff(x),f(x),hintseparable)C1C1〔f(x)acos2pi,f(x)acos〕cos(x)cos(x)
大厂数据分析师进阶之路,一个合格的数据分析师如何造数?不会造数的数据分析师,不是一个好数据分析师,这里所说的造数,并不是让我们数据分析师去胡编乱造数据,而是在日常数据分析过程中我们需要模拟生成一些数据用于测试,也就是测试数据。……
为啥说尽量别带孩子去海洋馆?漫画揭秘,家长要清楚现在生活条件好了,只要到了节假日,家长就喜欢带着孩子出去走走看看,扩展一下自己的见识,增长知识,如果孩子比较小的话,家长就喜欢带孩子去海洋馆,这样不仅可以认识很多海洋生物也可以……
被称为江南古镇之一江南古镇九十九,不如南浔走一走!南浔古镇地处湖州市南浔区,位于江浙沪两省一市交界处,北濒太湖,东接江苏省苏州市,地处长三角城市群的中心腹地,318国道、申苏浙皖高速公路、京杭运河和被誉为东方小莱茵河的长湖申航……
更年期女性,或许会有这4个困扰,要尽早做好预防据调查发现,大部分女性在45岁到55岁进入更年期,如果不在这个年龄范围,可要警惕,可能是某些健康问题出现。当然,更年期到来无须恐慌,是自然衰老会有的结果,虽说卵巢,子宫等器官功……
任泽平对谈管清友老百姓炒股能赚钱吗?以下为11月17日任泽平博士和如是金融研究院院长管清友老师的直播速记整理。任泽平:今天我和管老师的连麦,第一我们没对过笔记,第二不设禁区。首先,管老师,我做了一个投票,结……
微信Mac正式版发布!增加3个新功能微信又更新了,这次是Mac版。最近,微信Mac版迎来最新3。4。0正式版更新,上线了3个新功能。1、支持识别图片中的二维码凡图片中带有二维码,或者使用微信截图……
3个羽绒服牌子的比较冬天来了,又是买羽绒服的时候了。曾经买过这三个牌子thenorthface,Rab,Arc’teryx的羽绒服,全部购自美亚。简单比较一下。thenorthfacenup……
拥抱绿色发展新范式中国碳中和政策框架研究报告正式发布中国日报12月13日电(记者张欣然)2022年12月12日,清华大学五道口金融学院、世界银行、伦敦政治经济学院格兰瑟姆气候变化与环境研究所共同召开中国实现碳中和的途径线上高级研……
定了!2024年嫦娥六号月背着陆,嫦娥七号寻找水源可能是受美国阿尔忒弥斯登月计划的影响,最近关于探月工程的消息越来越多,继宣布2030年进行载人登月和新一代重型运载火箭构型确定的以后,中国航天科技集团官宣将在2024年发射嫦娥……
复星套现百亿,郭广昌加速调仓记者韩璐编辑陈晓平中国巴菲特郭广昌,频繁甩卖资产。9月的第一周,其创立的复星集团接连宣布4笔减持,从二级市场套现总额,预计将超过60亿元。就在中秋前,复星旗下……
8月新能源销量MVP投给特斯拉还是比亚迪?不出所料,8月的中国新能源市场,再次迎来了更大的绽放。作为论据,从乘联会公布的成绩单来看,8月新能源乘用车批发销量达到63。2万辆,同比增长103。9,环比增长12。0。……
全红婵爸爸光膀子被炮轰,网友怒了湛江40多度,真实农村就这样都说人红是非多,平时很普通的一个行为,都会被大家放大。近日,跳水奥运冠军全红婵父亲因一行为遭到网友炮轰,这位在外界看来憨厚老实的农民汉,究竟做了什么让网友们讨伐?其实是非……