Python科学计算与数据处理课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Python科学计算与数据处理课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 科学 计算 数据处理 课件
- 资源描述:
-
1、SymPy符号运算库1PPT课件目录o 从例子开始n 欧拉恒等式n 球体体积o 数学表达式n 符号n 数值n 运算符和函数o 符号运算n 表达式变换和化简n 方程2PPT课件目录n 微分n 微分方程n 积分o 其他功能3PPT课件 SymPy是一个符号数学Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码的精简而易于理解和可扩展。SymPy完全由Python写成,不需要任何外部库。可用SymPy进行数学表达式的符号推导和演算。可使用isympy运行程序,isympy在 IPython的基础上添加了数学表达式的直观显示功能。启动时还会自动运行下面的程序:4PPT课件 这段程序
2、首先将Python的除法操作符“/”从整数除法改为普通除法。然后从SymPy库载 入所有符号,并且定义了四个通用的数学符号x、y、z、t,三个表示整数的符号k、m、n,以及三个表示数学函数的符号f、g、h。from _future_ import division from sympy import*x,y,z,t=symbols(x,y,z,t)k,m,n=symbols(k,m,n,integer=True)f,g,h=symbols(f,g,h,cls=Function)#init_printing()5PPT课件从例子开始o 欧拉恒等式 此公式被称为欧拉恒等式,其中e是自然常数,i是虚
3、数单位,是圆周率。此公式被誉为数学中最奇妙的公式,它将5个基本数学常数用加法、乘法和幂运算联系起来。从SymPy库载入的符号中,E表示自然常数,I表示虚数单位,pi表示圆周率,因此上面 的公式可以直接如下计算:E*(I*pi)+1?010ie 6PPT课件从例子开始 SymPy除了可以直接计算公式的值之外,还可以帮助做数学公式的推导和证明。欧拉恒等式可以将 代入下面的欧拉公式得到:在SymPy中可以使用expand()将表达式展开,用它展幵 试试看:没有成功,只是换了一种写法而已。当expand()的complex参数为True时,表达式将被分为实数和虚数两个部分:cossinixexixix
4、e expand(E*(I*x)exp(I*x)?7PPT课件从例子开始 这次将表达式展开了,但是得到的结果相当复杂。显然,expand()将x当做复数了。为了指定x为实数,需要重新定义x:终于得到了需要的公式。可以用泰勒多项式对其进行展开:expand(exp(I*x),complex=True)I*exp(-im(x)*sin(re(x)+exp(-im(x)*cos(re(x)?x=Symbol(x,real=True)expand(exp(I*x),complex=True)Isin(x)+cos(x)?8PPT课件从例子开始 series()对表达式进行泰勒级数展开。可以看到展开之后
5、虚数项和实数项交替出现。根据欧拉公式,虚数项的和应该等于sin(x)的泰勒展开,而实数项的和应该等于cos(x)的泰勒展开。tmp=series(exp(I*x),x,0,10)print tmp1+I*x-x*2/2-I*x*3/6+x*4/24+I*x*5/120-x*6/720-I*x*7/5040+x*8/40320+I*x*9/362880+O(x*10)tmp9PPT课件从例子开始 下面获得tmp的实部:下面对cos(x)进行泰勒展开,可看到其中各项和上面的结果是一致的。re(tmp)x*8/40320-x*6/720+x*4/24-x*2/2+re(O(x*10)+1 serie
6、s(cos(x),x,0,10)1-x*2/2+x*4/24-x*6/720+x*8/40320+O(x*10)10PPT课件从例子开始 下面获得tmp的虚部:下面对sin(x)进行泰勒展开,其中各项也和上面的结果一致。由于 展开式的实部和虚部分别等于cos(x)和sin(x),因此验证了欧拉公式的正确性。im(tmp)x*9/362880-x*7/5040+x*5/120-x*3/6+x+im(O(x*10)series(sin(x),x,0,10)x-x*3/6+x*5/120-x*7/5040+x*9/362880+O(x*10)ixe11PPT课件从例子开始o 球体体积 Scipy介绍
7、了如何使用数值定积分计算球体的体积,SymPy中的integrate()则可以进行符号积分。用integrate()进行不定积分运算:如果指定变量x的取值范围,integrate()就能进行定积分运算:integrate(x*sin(x),x)-x*cos(x)+sin(x)integrate(x*sin(x),(x,0,2*pi)-2*pi12PPT课件从例子开始 为了计算球体体积,首先看看如何计算圆的面积,假设圆的半径为r,则圆上任意一点的Y坐标函数为:因此可以直接对函数y(x)在-r到r区间上进行定积分得到半圆面积。x,y,r=symbols(x,y,r)f=2*integrate(sq
8、rt(r*r-x*2),(x,-r,r)print f2*Integral(sqrt(r*2-x*2),(x,-r,r)22()y xrx13PPT课件从例子开始 首先需要定义运算中所需的符号,这里用symbols()一次创建多个符号。Integrate()没有计算出积分结果,而是直接返冋了输入的算式。这是因为SymPy不知道r是大于0的,重新 定义r,就可以得到正确答案了:接下来对此面积公式进行定积分,就可以得到球体的体积,但是随着X轴坐标的变化,对应切面的半径也会发生变化。r=symbols(r,positive=True)circle_area=2*integrate(sqrt(r*2-
9、x*2),(x,-r,r)print circle_areapi*r*214PPT课件从例子开始 假设X轴的坐标为x,球体的半径为r,那么x处球的切面半径可以使用前面的公式y(x)计算出。因此需要对圆的面积公式circle_area中的变量r进行替代:然后对circle_area中的变量x在区间-r到r上进行定积分,就可以得到球体的体积公式:circle_area=circle_area.subs(r,sqrt(r*2-x*2)print circle_areapi*(r*2-x*2)print integrate(circle_area,(x,-r,r)4*pi*r*3/315PPT课件从例
10、子开始 用subs进行算式替换:subs()可以将算式中的符号进行替换,它有3种调用方式:n expression.subs(x,y):将算式中的 x 替换成 y.n expression.subs(x:y,u:v):使用字典进行多次替换.n expression.subs(x,y),(u,v):使用列表进行多次替換.请注意多次替换是顺序执行的,因此:expression.subs(x,y),(y,x)并不能对符号x和y进行交换。16PPT课件数学表达式o 符号 创建一个符号使用symbols(),此函数会返回一个Symbol对象,用于表示符号变量,其有name属性,这是符号名,如:其中左边的
11、x是一个符号对象,而右边括号中用引号包着的x是符号对象的name属性,两个x不要求一样,但是为了易于理解,通常将符号对象和name属性显示成一样,另外name属性是引号包起来的。如要同时配置多个符号对象,symbols()中多个name属性可以以 x0=symbols(x0)17PPT课件数学表达式 空格或者逗号分隔,然后用引号包住,如下:一次配置三个符号,由于符号对象名和name属性名经常一致,所以可以使用var()函数,如:这语句和上个语句功能一致,在当前环境中创建了4个同名的Symbol对象(为了防止误会,使用symbols其实更好)。var(x0,y0,x1,y1)(x0,y0,x1,
12、y1)x0,y0,x1,y1=symbols(x0,y0,x1,y1)18PPT课件数学表达式 上面的语句创建了名为x0、y0、x1、y1的4个Symbol对象,同时还在当前的环境中创建 了 4个同名的变量来分别表示这4个Symbol对象。因为符号对象在转换为字符串时直接使用它的name 属性,因此在交互式环境中看到变量,x0的值就是x0,但是査看变量x0的类型时就可以发现,它实际上是一个Symbol对象。x0 x0 type(x0)sympy.core.symbol.Symbol x0.namex0 type(x0.name)str19PPT课件数学表达式 变量名和符号名当然也可以是不一样的
13、,例如:数学公式中的符号一般都有特定的假设,例如m、n通常是整数,而z经常表示复数。在用var()、symbols()或Symbol()创建Symbol对象时,可以通过关键字参数指定所创建符号的假 设条件,这些假设条件会影响到它们所参与的计算。a,b=symbols(alpha,beta)a,b(alpha,beta)20PPT课件数学表达式 例如,下面创建了两个整数符号m和n,以及一个正数符号x:每个符号都有许多is_*属性,用以判断符号的各种假设条件。在IPython中,使用自动完 成功能可以快速査看这些假设的名称。注意下划线后为大写字母的属性,用来判断对象的类型;而全小写字母的属性,则用
14、来判断符号的假设条件。m,n=symbols(m,n,integer=True)x=Symbol(x,positive=True)21PPT课件数学表达式 x.is_#按了tab键自动完成 x.is_Symbol#x 是一个符号 True x.is_positive#x 是一个正数 True x.is_imaginary#因为x可以比较大小,所以它不是虚数 False x.is_complex#x是一个复数,因为复数包括实数,而实数包括正数 True22PPT课件数学表达式 使用assumptions0 属性可以快速査看所有的假设条件,其中commutative为True表示此符号满足交换律,
15、其余的假设条件根据英文名很容易知道它们的含义。在SymPy中,所有的对象都从Basic类继承,实际上这些is_*属性和assumptions0属性都是在Basic类中定义的:x.assumptions0 Symbol.mro()23PPT课件数学表达式o 数值 为了实现符号运算,在SymPy内部有一整套数值运算系统。因此SymPy的数值和Python 的整数、浮点数是完全不同的对象。为了使用方便,SymPy会尽量自动将Python的数值类型转换为SymPy的数值类型。此外,SymPy提供了一个S对象用于进行这种转换。在下面的例子中,当有SymPy的数值参与计算时,结果将是SymPy的数值对象。
16、24PPT课件数学表达式 “5/6”在SymPy中使用Rational对象表示,它由两个整数的商表示,数学上称之为有理数。也可以直接通过Rational创建:1/2+1/3#结果为浮点数 0.8333333333333333 S(1)/2+1/S(3)#结果为SymPy的数值对象 5/6 Rational(5,10)#有理数会自动进行约分处理 1/225PPT课件数学表达式o 运算符和函数 SymPy重新定义了所有的数学运算符和数学函数。例如Add类表示加法,Mul类表示乘法,而Pow类表示指数运算,sin类表示正弦函数。和Symbol对象一样,这些运算符和函数都从Basic类继承,可在IPy
17、thon中查看它们的继承列表(例如:Add.mro()。可以使用这些类创建复杂的表达式:var(x,y,z,n)Add(x,y,z)x+y+z Add(Mul(x,y,z),Pow(x,y),sin(z)x*y*z+x*y+sin(z)26PPT课件数学表达式 由于在Basic类中重新定义了_add_()等用于创建表达式的方法,因此可以使用和Python表达式相同的方式创建SymPy的表达式:在Basic类中定义了两个很重要的属性:func和args。func属性得到对象的类,而args得到其参数。使用这两个属性可以观察SymPy所创建的表达式。SymPy没有减法运算类,下面看看减法运算所得到
18、的表达式:x*y*z+sin(z)+x*y x*y*z+x*y+sin(z)27PPT课件数学表达式 通过上面的例子可以看出,表达式“x-y”在SymPy中实际上是用“Add(x,Mul(-1,y)”表示的。同样,SymPy中没有除法类,可使用和上面相同的方法观察“x/y”在SymPy中是如何表示的。t=x-y t.func#减法运算用加法类Add表示 sympy.core.add.Add t.args#两个加数一个是x,一个是-y(x,-y)t.args1.func#-y是用Mul表示的 sympy.core.mul.Mul t.args1.args(-1,y)28PPT课件数学表达式 Sy
19、mPy的表达式实际上是一个由Basic类的各种对象进行多层嵌套所得到的树状结构。下面的函数使用递归显示这种树状结构:由于fsolve函数在调用函数f时,传递的参数为数组,因此如果直接使用数组中的元素计算的话,计算速度将会有所降低,因此这里先用float函数将数组中的元素转换为Python中的标准浮点数,然后调用标准math库中的函数进行运算。def print_expression(e,level=0):spaces=*level if isinstance(e,(Symbol,Number):print spaces+str(e)return if len(e.args)0:print sp
20、aces+e.func._name_ for arg in e.args:print_expression(arg,level+1)else:print spaces+e.func._name_29PPT课件数学表达式 例如 在SymPy中使用下面的树表示:由于其中的各个对象的args属性类型是元组,因此表达式一旦创建就不能再改变。使用不可变的结构表示表达式有很多优点,例如可以用表达式作为字典的键。22xyprint_expression(sqrt(x*2+y*2)Pow Add Pow x 2 Pow y 2 1/230PPT课件数学表达式 除了使用SymPy中预先定义好的具有特殊运算含义的
21、数学函数之外,还可以使用Function()创建自定义的数学函数:请注意Function虽然是一个类,但是上面的语句所得到的f并不是Function类的实例。和预定义的数学函数一样,f是一个类,它从Function类继承:f=Function(f)f._base_ sympy.core.function.AppliedUndef isinstance(f,Function)False31PPT课件数学表达式 当我使用f创建一个表达式时,就相当于创建它的一个实例:f的实例t可以参与表达式运算:t=f(x,y)isinstance(t,Function)True type(t)f t.func#(
22、其中func和args是Basic类的两个非常重要的属性,分别表示对象的类和对象的参数)f t.args(x,y)t+t*tf(x,y)*2+f(x,y)32PPT课件符号运算o 表达式变换和化简 simplify()可以对数学表达式进行化简,例如:simplify()调用SymPy内部的多种表达式变换函数对表达式进行化简运算。但是数学表达式的化简是一件非常复杂的工作,并且对于同一个表达式,根据其使用目的可以有多种化简方案。simplify(x+2)*2-(x+1)*2)2*x+333PPT课件符号运算 radsimp()对表达式的分母进行有理化,它所得到的表达式的分母部分将不含无理数。例如:
23、它也可以对带符号的表达式进行处理:radsimp(1/(sqrt(5)+2*sqrt(2)(-sqrt(5)+2*sqrt(2)/3radsimp(1/(y*sqrt(x)+x*sqrt(y)(-sqrt(x)*y+x*sqrt(y)/(x*y*(x-y)34PPT课件符号运算 ratsimp()对表达式中的分母进行通分运算,即将表达式转换为分子除分母的形式:fraction()返回一个包含表达式的分子和分母的元组,用它可以获得ratsimp()通分之后的分 子或分母:注意fraction()不会自动对表达式进行通分运算,因此:ratsimp(x/(x+y)+y/(x-y)2*y*2/(x*2
24、-y*2)+1 fraction(ratsimp(1/x+1/y)(x+y,x*y)fraction(1/x+1/y)(1/y+1/x,1)35PPT课件符号运算 cancel()对分式表达式的分子分母进行约分运算,可以对纯符号的分式表达式以及自定义函数表达式进行约分,但是不能对内部函数的表达式进行约分。cancel(x*2-1)/(1+x)x-1 cancel(sin(x*2-1)/(1+x)#cancel不能对函数内部的表达式进行约分 sin(x*2/(x+1)-1/(x+1)cancel(f(x)*2-1)/(f(x)+1)#能对自定义函数表达式进行约分f(x)-136PPT课件符号运算
展开阅读全文