python - 符号无穷级数的收敛
问题描述
我想象征性地确定无限级数的收敛值。使用 Mathematica 和 Sum 命令,我得到了一个结果(我不知道是否正确),我尝试用 Python 重现它,但无法详细说明。
我的代码是:
import sympy as sym
from sympy.abc import k, x, d,f
from sympy import Sum, oo
result = sym.Sum(x**(2*(k-1))*sym.exp(sym.I*(2*k-1)*d), (k, 1, oo)).doit()
有什么问题吗?有没有更有效的方法来执行这个操作?
谢谢
解决方案
应该可以按照您尝试的方式计算它,尽管它可能尚未在 sympy 中实现。总和是一个几何级数,所以我们可以手动计算它:
In [82]: s = Sum(x**(2*(k-1))*sym.exp(I*(2*k-1)*d), (k, 1, oo))
In [83]: s
Out[83]:
∞
___
╲
╲ 2⋅k - 2 ⅈ⋅d⋅(2⋅k - 1)
╱ x ⋅ℯ
╱
‾‾‾
k = 1
In [84]: s2 = factor_terms(powsimp(factor_terms(s.rewrite(exp).expand()), deep=True))
In [85]: s2
Out[85]:
∞
___
╲
-ⅈ⋅d ╲ 2⋅k⋅(ⅈ⋅d + log(x))
ℯ ⋅ ╱ ℯ
╱
‾‾‾
k = 1
───────────────────────────────
2
x
In [86]: Sum(x**k, (k, 1, oo)).doit().subs(x, exp(2*(I*d + log(x)))) * exp(-I*d) / x**2
Out[86]:
⎛⎧ 2 2⋅ⅈ⋅d ⎞
⎜⎪ x ⋅ℯ │ 2│ ⎟
⎜⎪ ─────────────── for │x │ < 1⎟
⎜⎪ 2 2⋅ⅈ⋅d ⎟
⎜⎪ - x ⋅ℯ + 1 ⎟
⎜⎪ ⎟
⎜⎪ ∞ ⎟
⎜⎪ ____ ⎟ -ⅈ⋅d
⎜⎨ ╲ ⎟⋅ℯ
⎜⎪ ╲ ⎟
⎜⎪ ╲ k ⎟
⎜⎪ ╱ ⎛ 2 2⋅ⅈ⋅d⎞ otherwise ⎟
⎜⎪ ╱ ⎝x ⋅ℯ ⎠ ⎟
⎜⎪ ╱ ⎟
⎜⎪ ‾‾‾‾ ⎟
⎜⎪k = 1 ⎟
⎝⎩ ⎠
─────────────────────────────────────────
2
x
如果将特定值替换为x
and ,则可以用数字测试结果d
:
In [95]: s3 = Sum(x**k, (k, 1, oo)).doit().subs(x, exp(2*(I*d + log(x)))) * exp(-I*d) / x**2
In [96]: s.subs(x, S.Half).subs(d, 1).n()
Out[96]: 0.318932163677498 + 0.827845692253729⋅ⅈ
In [97]: s3.subs(x, S.Half).subs(d, 1).n()
Out[97]: 0.318932163677498 + 0.827845692253729⋅ⅈ
推荐阅读
- python - 如何使用 python pandas 在单个 csv 单元格中打包多个列表值
- python - 使用 Juypter Notebook 时如何释放 RAM?
- javascript - 方法未获得更改事件的单元测试代码覆盖率
- r - 如何将每个向量元素添加到 R 中的每个列表元素?
- php - 如何让我的 IDE 识别 PHP call_user_func?
- mysql - 将托管 MYSQL 数据库连接到 Android Studio 项目的最简单方法
- c# - 测试时以特定状态启动状态机
- mysql - 使用 Django 在数据库中保存数据时出现问题
- html-framework-7 - 路由路径未反映在 url framework7
- html - 如何将 CSS 卡拆分为 50-50 的内容和图像?