[英]Recursion of integrated Legendre polynomials
我正在用 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)?
編輯
所以一般來說,afaiu,你的問題源於公式(在你的附圖中確實顯示了L_{k+1}(x)
),而他們確實實現了L_{k}(x)
而沒有顯示如何獲得L_{k}(x)
的中間推導L_{k}(x)
來自L_{k+1}(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
。
>>> (2*(k-1)-1)
是否第一計算k-1
乘以它由2
,然后減去1
,其是從淡漠2*k-1
。 例如:
k = 5
確實產生了您的解決方案(2*(5-1)-1) = 7
和來自官方解決方案(2*5-1) = 9
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.