python - 积分勒让德多项式的递归

标签 python recursion

Attached image

我正在用 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+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

Why are they decreasing k to call the function, but in the first part the coefficient (2*k-1) not?

恕我直言,他们做到了,按照我的推导。

And why is the coefficient in the second part changed to (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.

关于python - 积分勒让德多项式的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60025288/

相关文章:

python - 第二次运行 np.empty

python - 为什么 tempfile 和 os.chdir() 会抛出 RecursionError?

c - 递归调用的总线 10 错误

python - 如何跨列有效地部分 argsort Pandas 数据框

python - 在模板django中分组然后排序

mysql - 使用半正矢公式与 MySQL 的两个坐标表最接近的匹配

c++ - 如何使此搜索功能非递归?

javascript - 递归地获取给定整数中奇数的计数

python - Python中最好的词干提取方法是什么?

python - 使用python脚本发送电子邮件