【发布时间】:2018-03-11 23:23:59
【问题描述】:
我想对函数 F(e,Eo) 进行级数扩展,直到 e 的某个幂,并以数字方式对 Eo 变量进行积分。
我的想法是使用 SymPy 在e 中进行幂级数,然后使用 MPMath 对Eo 进行数值积分。
以下是示例代码。我收到无法从表达式创建 mpf 的消息。我想这个问题与 SymPy 的系列最后有一个 O(e**5) 术语有关,后来我希望数值积分显示 e 的函数而不是数字。
import sympy as sp
import numpy as np
from mpmath import *
e = sp.symbols('e')
Eo = sp.symbols('Eo')
expr = sp.sin(e-2*Eo).series(e, 0, 5)
F = lambda Eo : expr
I = quad(F, [0, 2*np.pi])
print(I)
很明显,我需要一种不同的方法,但我仍然需要对我的实际代码进行数值积分,因为它有更复杂的表达式,无法进行分析积分。
编辑:我应该为示例代码选择一个实变量的复杂函数,我正在尝试这个(扩展和集成)函数,例如:
expr = (cos(Eo) - e - I*sqrt(1 - e ** 2)*sin(Eo)) ** 2 * (cos(2*(Eo - e*sin(Eo))) + I*sin(2*(Eo - e*sin(Eo))))/(1 - e*cos(Eo)) ** 4
【问题讨论】:
-
旁注 1:
F = lambda Eo : expr行几乎肯定不会执行您想要的操作,因为 lambda 表达式的Eo与expr中使用的不一样。你可能想使用F = lambda x: expr.subs(Eo,x)或 SymPy 的lambdify之类的东西。 -
旁注 2:为什么每个人都使用 MPMath 来解决各种问题?它适用于任意精度的数学,这一切都很好,而且是大多数问题不需要的东西。
标签: python sympy numerical-integration