python表示幂运算的符号_3.1. SymPy-符号运算好帮手

封面上的经典公式¶

本书的封面上的公式: eiπ + 1 = 0

叫做欧拉恒等式,其中e是自然指数的底,i是虚数单位, π

是圆周率。此公式被誉为数学最奇妙的公

式,它将5个基本数学常数用加法、乘法和幂运算联系起来。下面用SymPy验证一下这个公式。

载入的符号中,E表示自然指数的底,I表示虚数单位,pi表示圆周率,因此上述的公式可以直接如下计

算:

>>> from sympy import *

>>> E**(I*pi)+1

\[\displaystyle 0\]

欧拉恒等式可以下面的公式进行计算, e ix = cos x + i sin x 57

用Python做科学计算

为了用SymPy求证上面的公式,我们需要引入变量x。在SymPy中,数学符号是Symbol类的对象,因

此必须先创建之后才能使用:

>>> x = Symbol('x')

expand函数可以将公式展开,我们用它来展开E**(I*pi)试试看:

>>> expand( E**(I*x) )

\[\displaystyle e^{i x}\]

没有成功,只是换了一种写法而已。这里的exp不是math.exp或者numpy.exp,而是sympy.exp,它

是一个类,用来表述自然指数函数。

expand函数有关键字参数complex,当它为True时,expand将把公式分为实数和虚数两个部分:

>>> expand(exp(I*x), complex=True)

I*exp(-im(x))*sin(re(x)) + exp(-im(x))*cos(re(x))

这次得到的结果相当复杂,其中sin, cos, re,

im都是sympy定义的类,re表示取实数部分,im表示取虚

数部分。显然这里的运算将符号x当作复数了。为了指定符号x必须是实数,我们需要如下重新定义符

号x:

>>> x = Symbol("x", real=True)

>>> expand(exp(I*x), complex=True)

I*sin(x) + cos(x)

终于得到了我们需要的公式。那么如何证明它呢。我们可以用泰勒多项式展开:

>>> tmp = series(exp(I*x), x, 0, 10)

>>> pprint(tmp)

2 3 4 5 6 7 8 9

x ⅈ⋅x x ⅈ⋅x x ⅈ⋅x x ⅈ⋅x ⎛ 10⎞

1 + ⅈ⋅x - ── - ──── + ── + ──── - ─── - ──── + ───── + ────── + O⎝x ⎠

2 6 24 120 720 5040 40320 362880

series是泰勒展开函数,pprint将公式用更好看的格式打印出来。下面分别获得tmp的实部和虚部,分

别和cos(x)和sin(x)的展开公式进行比较:

>>> pprint(re(tmp))

8 6 4 2

x x x x ⎛ ⎛ 10⎞⎞

───── - ─── + ── - ── + re⎝O⎝x ⎠⎠ + 1

40320 720 24 2

>>> pprint(series( cos(x), x, 0, 10) )

2 4 6 8

x x x x ⎛ 10⎞

1 - ── + ── - ─── + ───── + O⎝x ⎠

2 24 720 40320

>>> pprint(im(tmp))

9 7 5 3

x x x x ⎛ ⎛ 10⎞⎞

────── - ──── + ─── - ── + x + im⎝O⎝x ⎠⎠

362880 5040 120 6

>>> pprint(series(sin(x), x, 0, 10))

3 5 7 9

x x x x ⎛ 10⎞

x - ── + ─── - ──── + ────── + O⎝x ⎠

6 120 5040 362880

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值