Python 积分勒让德多项式的递推

Python 积分勒让德多项式的递推,python,recursion,Python,Recursion,我正在用python编写这些递归,不明白为什么官方的解决方案与我的不同。 n=1,2的简单情况很清楚。 这是我的方法: return ((2*(k-1)-1)*x*leg(k-1) - ((k-1)-2)*leg(k-2)) / k 这是官方的解决方案: return ((2*k-1)*x*leg(k-1) - (k-1)*leg(k-2)) / k 为什么他们要减少k来调用函数,但在第一部分中,系数(2*k-1)不是?为什么第二部分的系数改为(k-1)?EDIT 因此,一般来说,afaiu

我正在用python编写这些递归,不明白为什么官方的解决方案与我的不同。 n=1,2的简单情况很清楚。 这是我的方法:

return ((2*(k-1)-1)*x*leg(k-1) - ((k-1)-2)*leg(k-2)) / k
这是官方的解决方案:

return ((2*k-1)*x*leg(k-1) - (k-1)*leg(k-2)) / k
为什么他们要减少k来调用函数,但在第一部分中,系数(2*k-1)不是?为什么第二部分的系数改为(k-1)?

EDIT

因此,一般来说,afaiu,您的问题源于公式(在您所附的图像中确实显示了
L{k+1}(x)
),而它们确实实现了
L{k}(x)
,没有中间派生,显示了如何从
L{k+1}(x)
获得
L{k}(x)

我进一步认为这里有一些混乱,所以我将明显偏离符号。 让
m=k+1
在下面的内容中

然后,我们通过直接替换得到:

m * L(x, m) = (2*(m+1)-1) * x * L(x, m-1) - ((m-1)-2) * L(x, m-2)  # for m >= 3
产生

L(x, m) = ( (2*m + 2 - 1) * x * L(x, m-1) - ((m-3) * L(x, m-2) ) / m
在python语法中,这是:

def L(x, m):
    if m == 1:
        return x
    elif m == 2:
        return 0.5 * (x**2 - 1)
    else:  # do this for all m >= 3
        return ( (2*m + 1) * x * L(x, m-1) - ((m-3) * L(x, m-2) ) / m
为什么他们要减少k来调用函数,但在第一部分中,系数(2*k-1)不是

不管他们做了什么,都要遵循我的推导

为什么第二部分的系数改为(k-1)

我真的不知道;在我看来,他们似乎在替换过程中犯了一个错误,即他们必须将
m+1
而不是
m-1


首先计算
k-1
乘以
2
,然后减去
1
,这与
2*k-1
无关。例如:

k=5
通过您的解决方案
(2*(5-1)-1)=7
和官方解决方案
(2*5-1)=9
编辑

因此,一般来说,afaiu,您的问题源于公式(在您所附的图像中确实显示了
L{k+1}(x)
),而它们确实实现了
L{k}(x)
,没有中间派生,显示了如何从
L{k+1}(x)
获得
L{k}(x)

我进一步认为这里有一些混乱,所以我将明显偏离符号。 让
m=k+1
在下面的内容中

然后,我们通过直接替换得到:

m * L(x, m) = (2*(m+1)-1) * x * L(x, m-1) - ((m-1)-2) * L(x, m-2)  # for m >= 3
产生

L(x, m) = ( (2*m + 2 - 1) * x * L(x, m-1) - ((m-3) * L(x, m-2) ) / m
在python语法中,这是:

def L(x, m):
    if m == 1:
        return x
    elif m == 2:
        return 0.5 * (x**2 - 1)
    else:  # do this for all m >= 3
        return ( (2*m + 1) * x * L(x, m-1) - ((m-3) * L(x, m-2) ) / m
为什么他们要减少k来调用函数,但在第一部分中,系数(2*k-1)不是

不管他们做了什么,都要遵循我的推导

为什么第二部分的系数改为(k-1)

我真的不知道;在我看来,他们似乎在替换过程中犯了一个错误,即他们必须将
m+1
而不是
m-1


首先计算
k-1
乘以
2
,然后减去
1
,这与
2*k-1
无关。例如:


k=5
你的解决方案确实会产生
(2*(5-1)-1)=7
,而从官方解决方案来看
(2*5-1)=9

我有一种强烈的预感,这个问题更多的是关于数学的(显示官方公式和你的推导公式之间的等价性)这里的问题是,过去一些官方的解决方案是错误的。我只是想知道我的方法是否正确,将图中给出的公式转换为我的方法。由于2*(k-1)-1=2*k-2-1=2*k-3!=2*k-1,适用于整数中的所有k,同样适用于其他系数。我的问题是关于编程,而不是展示数学证明!我有一个强烈的预感,这个问题更多的是关于数学(显示一个官方公式和你的导出公式之间的等价性)而不是编程。这里的问题是,在过去,一些官方的解决方案是错误的。我只是想知道我的方法是否正确,将图中给出的公式转换为我的方法。由于2*(k-1)-1=2*k-2-1=2*k-3!=2*k-1,适用于整数中的所有k,同样适用于其他系数。我的问题是关于编程,而不是展示数学证明!以下哪种方法是正确的?2*(k-1)-1=2*k-2-1=2*k-3!=2*k-1对于所有的k,他们在这里使用不同的公式,这是勒让德多项式。在这种情况下,我也遵循官方的解决方案:我的练习要求使用不同的给定公式计算积分(!)勒让德多项式,如所附的图像中所示。我无法理解如何从这些公式中得出解决方案。我把它写在一张纸上,k=3,4,官方的解决方案给出了与预期不同的结果。现在我假设他们使用了勒让德多项式的公式,而不是积分勒让德多项式的公式。你能看一看这张图片,确定它是否符合官方的解决方案吗?我的理解是,所有的k都必须减少1,才能从L_(k+1)到L_k。但是在官方公式中有任何明显的系统,因为在一种情况下,他们减少了它,而在另一种情况下,没有…非常感谢您所做的努力,并确认官方解决方案存在错误!在第一部分中,您错误地替换了k,因为如果m=k+1,那么k=m-1!=m+1。因此,您的第一部分类似于官方解决方案,但它应该是错误的。第二部分就像我做的一样!谢谢你,托马斯!以下哪种方法是正确的?2*(k-1)-1=2*k-2-1=2*k-3!=2*k-1对于所有的k,他们在这里使用不同的公式,这是勒让德多项式。在这种情况下,我也遵循官方的解决方案:我的练习要求使用不同的给定公式计算积分(!)勒让德多项式,如所附的图像中所示。我无法理解如何从这些公式中得出解决方案。我把它写在一张纸上,k=3,4,官方的解决方案给出了与预期不同的结果。现在我假设他们使用了勒让德多项式的公式,而不是积分公式