235.算术几何数列(An Arithmetic Geometric Sequence)


给定算术-几何数列 \(u(k) = (900-3k)r^{k - 1}\)。令 \(s(n) = \sum_{k = 1}^n u(k)\)。求使得 \(s(5000) = -600\,000\,000\,000\)\(r\) 值。请将答案四舍五入至小数点后 12 位。

分析:我们给出通项:

$$u(k) = (900 - 3k)r^{k-1}$$

我们想要找到这个级数的求和公式:

$$S(n) = \sum_{k=1}^{n} u(k) = \sum_{k=1}^{n} (900 - 3k)r^{k-1}$$

为了找到求和公式,我们可以应用对 \(r\) 求导的技巧。首先,让我们将级数重写为几何级数的形式:

$$S(n) = 900\sum_{k=1}^{n} r^{k-1} - 3\sum_{k=1}^{n} kr^{k-1}$$

现在我们有两个几何级数。我们知道几何级数的求和公式是:

$$\sum_{k=1}^{n} r^{k-1} = \frac{1 - r^n}{1 - r}$$

让我们对几何级数关于 \(r\) 求导:

$$\frac{d}{dr}\sum_{k=1}^{n} r^{k-1} = \sum_{k=1}^{n} \frac{d}{dr} r^{k-1} = \sum_{k=1}^{n} (k-1)r^{k-2}$$

现在,我们可以找到第二个级数的求和公式:

$$\sum_{k=1}^{n} kr^{k-1} = r\sum_{k=1}^{n} (k-1)r^{k-2} = r\frac{d}{dr}\sum_{k=1}^{n} r^{k-1}$$

对几何级数公式求导:

$$r\frac{d}{dr}\left(\frac{1 - r^n}{1 - r}\right) = \frac{nr^{n+1} - (n+1)r^n + 1}{(1-r)^2}$$

现在将公式代回 \(S(n)\)

$$S(n) = 900 \left(\frac{1 - r^n}{1 - r}\right) - 3\left(\frac{nr^{n+1} - (n+1)r^n + 1}{(1-r)^2}\right)$$

这是给定级数的求和公式。

已知 \(s(5000) = -600\,000\,000\,000\)。代入值:

$$-600\,000\,000\,000 = 900 \left(\frac{1 - r^{5000}}{1 - r}\right) - 3\left(\frac{5000r^{5001} - 5001r^{5000} + 1}{(1-r)^2}\right)$$

为了求解 \(r\) 的值,我们可以使用数值方法,如二分法或牛顿法。在这种情况下,我们将使用 scipy 库中的 scipy.optimize.root_scalar 函数,这是一种稳健的根查找方法。

下面是查找 \(r\) 值的 Python 代码:

import numpy as np
from scipy.optimize import root_scalar

def s(n, r):
    return 900 * (1 - r**n) / (1 - r) - 3 * (n * r**(n + 1) - (n + 1) * r**n + 1) / (1 - r)**2

def equation(r):
    return s(5000, r) + 600_000_000_000

a, b = 0.1, 1.1

result = root_scalar(equation, method='brentq', bracket=[a, b])
r_value = result.root

print(f"r: {r_value:.12f}")

此代码将找到 \(r\) 的值并将其四舍五入至小数点后 12 位打印出来。