Python科学计算与数据处理符号运算库doc.docx

上传人:b****6 文档编号:16356966 上传时间:2023-07-12 格式:DOCX 页数:12 大小:25.27KB
下载 相关 举报
Python科学计算与数据处理符号运算库doc.docx_第1页
第1页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第2页
第2页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第3页
第3页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第4页
第4页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第5页
第5页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第6页
第6页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第7页
第7页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第8页
第8页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第9页
第9页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第10页
第10页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第11页
第11页 / 共12页
Python科学计算与数据处理符号运算库doc.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Python科学计算与数据处理符号运算库doc.docx

《Python科学计算与数据处理符号运算库doc.docx》由会员分享,可在线阅读,更多相关《Python科学计算与数据处理符号运算库doc.docx(12页珍藏版)》请在冰点文库上搜索。

Python科学计算与数据处理符号运算库doc.docx

Python科学计算与数据处理符号运算库doc

Python科学计算与数据处理—符号运算库

符号运算库目录从示例开始欧拉恒等式球体体积数学表达式符号数值运算符和函数符号运算表达式转换和简化方程目录微分方程积分其他函数符号运算库。

  它的目标是成为一个功能齐全的计算机代数系统,同时保持代码简单、易于理解和可扩展。

  SymPy完全用Python编写,不需要任何外部库。

  符号可用于数学表达式的符号推导和计算。

  您可以使用isympy来运行程序isympy来添加基于IPython的数学表达式的可视化显示功能。

  在启动时,以下程序将自动运行:

该程序首先将Python的除法运算符从整数除法改为普通除法。

  然后,从SymPy库中加载所有符号,并定义四个通用数学符号x、y、z、t,三个符号k、m、n表示整数,三个符号f、g、h表示数学函数。

  fromFutureimPortdivisionfromSymport*x,y,z,t=符号(#x,y,z,t#)k,m,n=符号(#k,m,n#,integer=true)f,g,h=符号(#f,g,h#,cls=函数)#initprinting()从这个例子开始,这个公式被称为欧拉恒等式,其中e是自然常数,I是虚单位,pi是pi。

  这个公式被认为是数学中最奇妙的公式。

它通过加法、乘法和幂运算连接两个基本的数学常数。

  在从符号库中载入的符号中,E代表自然常数,I代表虚数,单位pi代表周长比,所以上述公式可以直接计算如下:

E**(I*PI)从例子开始,符号不仅可以直接计算公式的值,而且有助于推导和证明数学公式。

  欧拉等式可以被替换成下面的欧拉公式:

在SymPy中,您可以使用expand()来扩展表达式并进行尝试:

没有成功,您只是更改了书写风格。

  当expand()的复数参数为真时,表达式将分为两部分:

实数和虚数:

expand(e**(I*x))expand(I*x)从示例开始,表达式这次被扩展,但结果相当复杂。

  显然,expand()使用x作为复数。

  为了将x指定为实数,需要重新定义x:

最后,获得所需的公式。

  泰勒多项式可用于展开表达式:

展开(exp(I*x),复数=真)I*exp(im(x))*sin(re(x))exp(im(x))*cos(re(x))x=符号(x,实数=真)展开(exp(I*x),复数=真)isin(x)cos(x)从示例开始,级数()对表达式执行泰勒级数展开。

  你可以看到虚项和实项在展开后交替出现。

  根据欧拉公式,虚项之和应等于正弦(x)的泰勒展开式,实项之和应等于余弦(x)的泰勒展开式。

  Tmp=级数(exp(I*x),x,,,prinTmpi*xx**I*x**x**I*x**x**I*x**x**I*x*x*x*x*x*x**o(x**)tmp从下面的例子中得到tmp的实部:

下面的cos(x)的泰勒展开式表明这些项与上面的结果是一致的。

  Re(tmp)x**

  由于展开式的实部和虚部等于cos(x)和sin(x),验证了欧拉公式的正确性。

  Im(tmp)x**SymPy中的integral()可以执行符号积分。

  用integral()进行不定积分运算:

如果指定了变量x的取值范围,integral()可以进行定积分运算:

integral(x*sin(x),x*cos(x)sin(x)integral(x*sin(x),(x,,*pi))*pi从例子开始,为了计算球体的体积,先看如何计算圆的面积。

假设圆的半径是r,圆上任何一点的y坐标函数是:

因此,函数y(x)可以直接在r到r的区间内积分,得到半圆面积。

  x,y,r=符号(#x,y,r#)f=*integrate(sqrt(r*rx**),(x,r,r))printf*integrate(sqrt(r**x**),(x,r,r))从示例开始,首先需要定义操作中需要的符号。

这里,symbols()用于一次创建多个符号。

  Integral()不计算积分结果,而是直接返回输入公式。

  这是因为在不知道r大于r的情况下,SymPy可以通过重新定义r得到正确的答案:

其次,球体的体积可以通过对这个面积公式的定积分得到,但是相应切面的半径也会随着x轴坐标的变化而变化。

  R=符号(#r#,正=真)circlearea=*integral(sqrt(r**x**),(x,r,r))printchercleayapi*r**从示例开始,假设x轴的坐标为x,球体的半径为r,则可以使用前面的公式y(x)计算球体在x处的切线半径。

  因此,有必要替换圆的circlearea公式中的变量r:

然后,通过对circlearea中的变量x的间隔r到r执行定积分,可以获得球的体积公式:

圆面积=圆learmeasures(r,Skrt(r**x**))printchleayapi*(r**x**)printintegral(圆面积,(x,r,r))*pi*r**从示例开始,用subs替换公式:

subs()可以替换公式中的符号。

有两种方法可以调用它:

expressionsubs(x,Y):

用yexpressionsubs({x:

y,u:

v})替换公式中的x:

replaceexpressionsubs((x,Y),(u,v)):

用列表替换多次请注意,多个替换是按顺序执行的,因此:

expressionsubs((x,Y),(Y,x))不能交换符号x和Y。

  数学表达式符号创建符号使用符号()此函数返回一个符号对象来表示具有名称属性的符号变量。

这是一个符号名称,例如:

其中左边的x是一个符号对象,右边用引号括起来的x是符号对象的名称属性。

两个x不要求相同,但是为了便于理解,符号对象和名称属性通常显示为相同的,并且名称属性用引号括起来。

  如果要同时在多个符号对象符号()中配置多个名称属性,可以用x=符号(#xlsquo)数学表达式空格或逗号分隔它们,并用引号将它们括起来,如下所示:

一次配置三个符号,因为符号对象名称和名称属性名称通常是一致的,可以使用var()函数,如:

此语句和上一个语句具有相同的函数,在当前环境中创建具有相同名称的符号对象(符号实际上更好,以防止误解)。

  Var(x,y,x,y)(x,y,x,y)x,y,x,y=符号(#x,y,x,y#)上述语句创建名为x、y、x、y的符号对象,同时在当前环境中创建相同名称的变量以分别表示符号对象。

  因为符号对象在转换为字符串时直接使用其名称属性,所以它可以在交互环境中看到变量。

x的值是x,但是当查看变量x的类型时,可以发现它实际上是一个符号对象。

  xxtype(x)symposymbolsymbolxname#x#type(xname)str数学表达式变量名和符号名当然也可以不同,例如:

数学公式中的符号通常有特定的假设,例如,m、n通常是一个整数,而z通常代表一个复数。

  当使用var()、符号()或符号()创建符号对象时,您可以指定通过关键字参数创建的符号的假设。

这些假设将影响他们参与的计算。

  a,b=符号(α,β)a,b(α,β)数学表达式如下创建两个整数符号m和n,以及一个正符号x:

每个符号都有许多is*属性来判断符号的各种假设。

  在IPython中使用自动完成可以快速检查这些假设的名称。

  请注意,下划线后带有大写字母的属性用于判断对象的类型,而带有所有小写字母的属性用于判断符号的假设条件。

  m,n=符号(m,n,整数=真)X=符号(X,正=真)数学表达式xis#按tab键完成xissy#x是一个符号Truexispositive#x是一个正数Truexisimaginary#因为X可以在大小上进行比较,所以它不是一个虚数Falsexis复数#X是一个复数,因为复数包括实数,而实数包括正数。

真正的数学表达式使用假设属性来快速检查所有假设,其中“公共”为“真”表示该符号满足交换定律。

其余的假设很容易通过英文名称得知。

  在SymPy中,所有对象都继承自基类。

事实上,这些是*属性和假设属性是在基本类中定义的:

xassumptionsSymbolmro()数学表达式数值为了实现符号运算,在SymPy中有一组数值运算系统。

  因此,SymPy的值和Python的整数、浮点数是完全不同的对象。

  为了便于使用,SymPy将尽可能多地自动将Python的数字类型转换为SymPy的数字类型。

  此外,SymPy还为此转换提供了一个S对象。

  在下面的示例中,当计算中涉及到SymPy的值时,结果将是SymPy的值对象。

  数学表达式在符号中使用有理对象来表示它由两个整数的商来表示,这在数学上被称为有理数。

  您也可以通过Rational直接创建它:

#Rational(,#Rational),一个带有浮点数S()S()#和SymPy结果的数字对象,将自动划分数学表达式运算符和函数。

SymPy重新定义了所有数学运算符和数学函数。

  例如,“加法”类代表加法,“乘法”类代表乘法,“幂”类代表指数运算,“正弦”类代表正弦函数。

  像符号对象一样,这些运算符和函数是从基本类继承而来的。

他们的继承列表(例如Addmro())可以在IPython中查看。

  这些类可用于创建复杂的表达式:

var(x,y,z,n)add(x,y,z)XYZadd(mul(x,y,z),power(x,y,sin(z))x*y*zx**ysin(z)数学表达式因为用于创建表达式(如add()的方法在Basic类中重新定义,所以可以用与Python表达式相同的方式创建SymPy表达式:

在Basic类中定义了两个非常重要的属性:

func和args。

  func属性获取对象的类,args获取其参数。

  使用这两个属性来观察由SymPy创建的表达式。

  SymPy没有减法类。

让我们看看减法得到的表达式:

x*y*zsin(z)x**yx*y*zx**ysin(z)数学表达式。

从上面的例子中,我们可以看到表达式xy实际上是由SymPy中的加法(x,Mul(,y))表示的。

  类似地,在SymPy中没有除法类来观察xy是如何用与上面相同的方法在SymPy中表示的。

  两个加法器,一个是x,一个是y(x,y)targsfunc#y是由Mul表示的sympycoremultargsargs(,sympy的表达式实际上是通过将基本类的各种对象嵌套在多层中获得的树形结构。

  下列函数使用递归来显示这种树结构:

由于调用函数f时由fsolve函数传递的参数是数组,如果数组中的元素直接用于计算,计算速度将会降低。

因此,在Python中,float函数用于将数组中的元素转换为标准浮点数,然后调用标准数学库中的函数进行计算。

  defprintexpression(e,level=):

spaces=*levelifinstance(e,(Symbol,Number)):

printspacetr(e)returnnifeln(eargs):

printspacefundnameforargs:

printexpression(arg,level)else:

printspacefundcname数学表达式由SymPy中的以下树表示,例如:

由于每个对象的args属性类型都是元组,因此表达式一旦创建就不能更改。

  使用不可变结构来表示表达式有许多优点。

例如,表达式可以用作字典中的键。

  PRINTEXPRESSion(SQRT(X**Y**))POWADDPOWXPOWY数学表达式可以使用Function()创建自定义数学函数,此外还可以使用预定义的数学函数,该函数在SymPy中具有特殊的运算含义:

请注意,虽然函数是一个类,但从上述语句中获得的F不是函数类的实例。

  与预定义的数学函数一样,F也是一个继承自函数类的类:

F=Function(F)fbasecymoreffunctionappledunddefinitinstance(F,Function)False数学表达式当我使用F创建一个表达式时,它相当于创建它的一个实例:

F的实例t可以参与表达式操作:

t=f(x,y)isinstance(t,Function)Truetype(t)ftfunc#(其中func和args是代表对象类和对象参数的基类的两个非常重要的属性例如,simplification()调用SymPy中的各种表达式转换函数来简化表达式。

  然而,数学表达式的简化是一项非常复杂的工作,根据其使用目的,对于同一表达式可以有许多简化方案。

  简化((x)**(x)**)*x符号运算radsimp()使表达式的分母合理化。

它得到的表达式的分母部分将不包含无理数。

  例如,它还可以处理带符号的表达式:

radsimp((sqrt()*sqrt())(sqrt()*sqrt())radsimp((y*sqrt(x)x*sqrt(y)))(sqrt(x)*yx*sqrt(y))(x*y*(xy))符号运算ratsimp()表达式中的分母分为两部分:

fraction()返回一个包含表达式的分子和分母的元组。

它可用于获取ratsimp()后的分子或分母。

请注意,fraction()不会自动对表达式执行常规操作。

因此:

ratsimp(x(xy)y(xy))*y**(x**y**)分数(ratsimp(xy))(xy,x*y)分数(xy)(yx),符号运算取消()除分数表达式的分子和分母可以除纯符号分数表达式和自定义函数表达式,但不能除内部函数的表达式。

  cancel((x**)(x))xcancel(sin((x**)(x))#cancel不能将函数内部的表达式划分为sin(x**(x)(x))cancel((f(x)**)(f(x)))###可以将自定义函数表达式划分为f(x)符号运算trigsimp()以简化表达式中的三角函数。

  它有两个可选参数deep和recursive。

默认值为“假”。

  当深度参数为真时,表达式中的所有子表达式都将被简化。

当递归参数为真时,trigsimp()将被递归用于最大化简化:

trigsimp(sin(x)***sin(x)***Cos(x)Cos(x)**)sin(*x)trigsimp(f(sin(x)***sin(x)**)Cos(x)Cos(x)**)#也可以简化自定义函数中的三角函数。

到目前为止,不知道什么是深度和递归的f(sin(*x))符号运算expandtrig()可以扩展三角函数的表达式。

  它实际上是expand()的封装,通过将expand()的触发参数设置为真,实现了三角函数的展开计算。

  当它调用expand()时,输入expandtrig以检查参数。

  expand()的一般扩展操作根据用户设置的标志参数扩展表达式。

  默认情况下,以下标志参数为真。

  Mul:

展开乘法展开触发器(SIN(*XY))(*COS(X)**)*SIN(Y)*SIN(X)*COS(X)*COS(Y)符号运算日志:

展开对数函数参数中的乘积和幂的重数:

展开加法的整数幂基数:

展开幂函数的基数乘积X,Y=符号(X,Y,正=真)展开(log(x*y**))log(x)*log(y)展开((xy)**)x***x***y*x*y**y**展开(x**(yz))x**y*x**z符号运算可以将默认为真的标志参数设置为假,强制不展开相应的表达式。

  在以下示例中,mul被设置为False,因此乘法不会被扩展:

expand()的以下标志参数默认为False。

  复数:

展开复数的实部和虚部默认情况下,复数的实部和虚部不展开:

x,y,z=符号(x,y,z,正=真)展开(x*log(y*z),mul=假)x*(log(y)log(z))x,y=符号(x,y,复数=真)展开(x*y,复数=真)re(x)*re(y)I*re(x)*im(y)I*re(y)*im(x)im(x)*im(y)符号运算函数:

展开某些特殊函数触发器:

展开三角函数expandlog()、expandmul()、expandcomplex()、expandtreg()函数,如、expandunc()封装expand()通过将相应的标志参数设置为真。

  展开(gamma(x),func=true)x*gamma(x)展开(sin(xy),trig=true)sin(x)*cos(y)sin(y)*cos(x)符号运算因子()可以分解多项式表达式:

collect()收集表达式中指定符号的有理指数幂的系数。

  例如,希望在下面的表达式中获得x的每个幂的系数:

因子(*x***y*x*x*y)**(x*y)**(x)因子(扩展((xy)**)))(xy)**a,b=符号(#a,B#)eq=(a*x)**(b*x)**符号运算首先需要扩展表达式eq。

表达式eq是一系列乘法的和。

然后,调用collect()来收集表达式eq中X的幂系数:

eq=expand(eq)eqa***X***a***X***a*XB***X***b*Xcollect(eq),X)a***X**X***(*a**b**)X*(a*b)符号运算默认情况下collect()返回一个已排序的表达式。

如果我们想要获得x的每个幂的系数,我们可以将evaluate参数设置为False,并让它返回一个以x的幂为关键字、值为系数的字典:

p=collect(eq,x,Evaluate=False)pS()#常量项注意,SymPy中的值是必需的,或者PX**#x的子项系数b***a**用于符号运算collect()也可以收集表达式的每个幂的系数,例如,下面的程序收集表达式sin(*x)的系数:

收集(A*Sin(*x)B*Sin(*x),Sin(*x))(ab)*Sin(*x)符号运算方程可以直接表示为具有SymPy值的方程。

  您也可以使用Eq()来创建方程。

  Solve()可以用符号解方程。

它的第一个参数是表示方程的表达式。

以下参数是表示方程中未知变量的符号。

  以下示例使用solve()求解二次方程:

a,b,c=符号(a,b,c)求解(a*x**b*xc,x)(bsqrt(*a*CB**)(*a),(bsqrt(*a*CB**)(*a)符号运算使用eq创建一个方程对象并求解它:

myeq=Eq(a*x**b*xc),(myeq,x)(bsqrt(*a*cb**)(*a),(bsqrt(*a*cb**)(*a)符号运算由于该方程可能有多组解,solve()返回一个列表以保存所有解。

  您可以传递包含多个表达式的元组或列表,并让SOVEL()求解方程以获得一个两级嵌套列表的解,其中每个元组表示方程的一组解:

#求解方程(使用元组形成一组几个方程)SOVEL((x**x*y,y**x*y),x,y)(SQRT()*i,*SQRT()*i),(SQRT()*i),*sqrt()*I)#有两组符号运算。

导数是一个表示导数函数的类。

它的第一个参数是一个需要推导的数学函数。

它的第二个参数是一个自变量。

请注意,导数是一个不需要求导的导数函数:

如果希望它执行实际操作,可以调用它的doit()方法:

t=导数(sin(x),x)#创建一个导数对象tDerivative(sin(x),X)tdoit()cos(x)符号运算也可以直接使用diff()函数或diff()表达式方法来计算导数函数:

导数对象可以用来表示自定义数学函数的导数函数,例如:

diff(sin(*x),X)*cos(*x)sin(*X)diff(x)*cos(*X)diff(sin(*X),X),*sin(*x)diff(sin(*x),X,*cos(*X)导数(f(x),X)导数(f(X),X)符号运算由于SymPy不知道如何导出自定义数学函数,其diff()方法将返回与上述相同的结果:

添加更多符号参数可以表示更高阶的导数函数,例如:

f(x)diff(x)方法中的X表示导数(X))#表示f(x)是x(f(x),x,x,x)的三阶导数(或偏导数)#也可以写成一个符号运算或多个变量的导数函数,例如,diff()解的格式和导数声明的格式是相似的,例如,下面的语句计算结果sin(xy)到x的二次导数、到Y的三次导数:

导数(f(x,Y),x,y,,#微分方程dsolve(sin(x*y),x,y,y),x*(x***y***cos(x*y)*x*y*sin(x*y)*cos(x*y))符号运算微分方程dsolve()可以符号求解微分方程。

  它的第一个参数是一个带有未知函数的表达式,第二个参数是一个需要求解的未知函数。

  例如,下面的程序求解微分方程。

  结果是一个系数c待定的自然指数函数。

  F=函数(f)dsolve(导数(f(x),x)f(x),f(x))f(x)=c*exp(x)符号运算当使用dsolve()求解微分方程时,可以传递一个提示参数来指定微分方程的解。

  该参数的默认值为default,这意味着SymPy会自动选择解决方案。

  提示参数可以设置为best,以便让dsolve()尝试所有已知的解决方案,并返回最简单的解决方案,如下面的微分方程:

求解。

  结果是一个描述f(x)和自变量之间关系的一般方程。

  通常,这个函数称为隐式函数:

符号运算:

如果将提示参数设置为最佳,则可以获得更简单的显式函数表达式:

x=符号(x,实数=真)#将符号x定义为实数eq=dsolve(f(x)diff(x)f(x)**f(x),f(x))eqf(x)=c(cexp(x))eq=dsolve(F(x)diff(x)F(x)**F(x),F(x),hin=best)eqf(x)=c(c)x):

计算不定积分(f,(x,a,b)):

计算定积分如果要计算多个变量上的多个积分,只需按顺序列出要积分的变量:

积分(f,x,y):

计算双不定积分(f,(x,a,b),(y,c,D)):

双定积分符号运算的计算类似于导数对象表示的微分表达式,积分对象表示积分表达式。

它的参数类似于integral()。

例如,调用doit()方法的积分对象可以计算它:

e=integral(x*sin(x),X)einintegral(X*sin(X),X)edoit()x*cos(x)sin(x))符号运算有些积分表达式不能被符号化简化。

在这种情况

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2