将勒让德多项式积分在SymPy中,并将这些积分用作系数

时间:2018-03-13 15:24:35

标签: sympy

我试图在SymPy中做一个简单的例子来计算一些系数,然后在legendre多项式的总和中使用它们。最后绘制它。很简单,但不能使它工作。我想用它来做我的电磁学课程。我在以下两次尝试中都遇到错误:

%matplotlib inline
from sympy import *
x, y, z = symbols('x y z')
k, m, n = symbols('k m n', integer=True)
f, step, potential = symbols('f step potential', cls=Function)
var('n x')
A=SeqFormula(2*(2*m+1)*Integral(legendre(2*m+1,x),(x,0,1)).doit(),(m,0,oo)).doit()
Sum(A.coeff(m).doit()*legendre(2*m+1,x),(m,0,10)).doit()
B=Tuple.fromiter(2*(2*n+1)*Integral(legendre(2*n+1,x),(x,0,1)).doit() for n in range(50))
Sum(B[m]*legendre(2*m+1,x),(m,0,10)).doit()

以下是Mathematica中我希望复制的脚本的一部分:

Nn = 50; 
Array[A, Nn] 
For[i = 0, i <= Nn, i++, A[i + 1] = Integrate[LegendreP[2*i + 1, x]*(2*(2*i + 1) + 1), {x, 0, 1}]]; 
Step = Sum[A[n + 1]*LegendreP[2*n + 1, #], {n, 0, Nn}] & Plot[Step[x], {x, -1, 1}]

1 个答案:

答案 0 :(得分:1)

我认为你用A搜索的结构是Python的lambda。

A = lambda m: 2*(2*m+1)*Integral(legendre(2*m+1, x), (x, 0, 1))
f = Sum(A(m)*legendre(2*m+1, x), (m, 0, 10)).doit()
plot(f, (x, -1, 1))

关键是m必须是明确的才能进行整合; SymPy不知道用于集成legendre(n, x)的通用公式。因此,仅当使用具体值m调用A时才会尝试此处的集成,例如A(0)A(1)等。

graph