20多条总结学完SymPy库

SymPy库

Sympy是一个数学符号库,包括了积分,微分方程等各种数学运算方法,为python提供了强大的数学运算支持。对于图像来说,虽然都是做离散的计算,操作最多的还是numpy里的数组,但实际上,这个库包含了积分微分,三角等最基本的数学运算,可以说是工科最基本的,用起来媲美matlab。

主要函数和用法:

1.sympy里未知数变量需要像matlab一样做一个额外的定义:x=symbols(“x”)

如果x为实数需要symbol(“x”,real=True),定义正数需要positive=True

2.Expnd(fomat,param2)函数可以帮助我们展开式子。比如把e的i和pi次准换成欧拉公式形式。但是注意其第二个参数是确定他输入式子中的未知数是实数还是虚数,这回影响展开结果。输入complex=True就会把结果分为实数和虚数两个部分。

3.泰勒公式”:series(式子,未知数名,在那个点展开,展开几项)

4.re()取出一个数的实数部分

5.不定积分:Integrate(式子,对什么未知数积分)。做定积分:Integrate(式子,(未知数名,下限,上限)

6.**表示平方sqrt()表示根号。

7.在sympy中,式子用等号赋给了一个变量,这并不是简单的赋值,事实上在这个库当中,每一个式子赋给变量相当于创建了一个关于式子的一个对象。你可以用点操作操作出里面大量的函数的

8.包括了.sub(原变量,新变量)替换函数。但是这是顺序交换的,sub([(x,y),(y,x)])不能交换xy变量

7..diff(未知数,几阶导数)函数求导。调用.doit()求得最终结果式子 。

8.可以用as_finite_diff()函数求离散的h,2h,3h。。。。的导数。

11.Lambdify([未知数],式子变量,数据形式)可以把一个式子用确切的数值计算出来。数据形式可以是numpy的,需要对最后一个参数的modules=”numpy”

12.式子类创建的式子对象中args属性保存了所有的加法项Var()函数可以快速创建未知数,创建的都是symbol对象。值得注意的是,在sympy中,是存在大写开头的Symbol()和小写开头的symbol(),前者是一个类,创建Symbol对象。后者是一个操作函数,功能和结果一样,只是实现方法上是有区别的。还有一点尤为重要,x变量symbol和传统意义上的变量是不同的。他不接受赋值,不能x0=5。为了表达方便才是用了x0.name=x0,使他得到了一个x0的变量名,而并不是说他是一个传统意义上的变量x0。另外,x0的值就是x0。最后一点很重要,变量名是我们最后看这玩意在写代码时候的名字,符号名是他点name属性里存着的真实名字。比如一个人在外面外号叫老张,但其实真名是张三。无论你在编译器里是怎么给他变成别的外号了,最终运行结果都会显示最真实的名字。(PS:这个设计初衷可能是好的,但是尽量还是不要去碰触这个会产生歧义和误导的东西。)

13.在python中是int这个类定义出来的123,456,这些整型的对象。但是这些对象在sympy中是不存在的,他独立提供了一套sympy.core.number.Rational类来做。可以直接用Rational(5,10)做一个Rational对象1/2,也可以直接用S函数来做,得到的也是一样的。在sympy中似乎都对这些类有了操作函数,但是我们还是可以通过这些类来直观的创建。相类似,浮点型用N()和Float(数字,有效数学)来做。

14.Add()连加,Mul()连乘,Pow(x,y)指数即x的y次,这些都是继承于Basic类的。

15.用点args得到所有参数,func()可以得到整个式子属于什么类或者单个属于什么类。并可以通过点args[n].args查看最具体的那一个变量,可见一个式子内部是由list存储的,这里不能说是字符型,但我猜测如此。

16.dotprint()可以查看树形的式子组成,书p370图6-2

17.构造抽象函数Function(),直接用f=Function(“f”),注意有一点,在python之中和C中的不同之处,c的创建对象实例有点像定义一个变量,和函数调用是不一样的,所以发现奇奇怪怪的比如student zhangsan;我们就知道这肯定是创建zhangsan这个对象。而python的是和函数的一样的,所以注意分辨。再要注意的是,这个Function创建的是类而不是对象实例。也就是说f是一个继承下来的类。还需要用t=f(x,y)去创建函数t这个对象。最终我们才能得到t这个抽象函数。抽象函数的作用就不多说了。非常有用。

18.通配符:通配符可以查找出可以与模板相匹配的项目,比如查找出一个wild(“a”)还有b后就可以%sympy_latex(3*x*(x+y)**2).match(a*b**2)最终得到和末班a*b**2匹配的a和b,分别为,剩下find()在树状图里找,replace()可以替换。至于%文本显示是为了方便看,这句魔法指令详解可以看p371的解释,不必太在意,这种会用就行。

19.simplify()可以把一个式子化简到最简的状态,这里还有许多根据目的化成假分数啊,等等,包括cancel等函数,但是用到查官方文档才是正解。

20.解方程:可以直接表示值为0的方程,也可以用Eq()去创建,返回的理论上也是一个对象实例。但是正常情况下不需要这么去做,直接使用solve(式子)就可以得到最终的结果。有些是单个未知数的就会是[解1,。。。解n]形式多个组合的就会使[(x0,y0).....(xn,yn)]

21.解微分方程:用dsolve(式子,要求的f(x))就可以直接得到f(x)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值