如果已知序列的起始值和最终值,例如使用
numpy.logspace
和 numpy.geomspace
,则可以轻松地在给定的基数和元素数量上创建对数刻度(几何级数)上均匀间隔的数字。现在假设我想以相反的方式定义几何级数,即基于所得几何级数的属性。如果我知道级数的总和以及级数的第一个和最后一个元素,我可以计算商和元素数量吗?
例如,假设级数的第一个和最后一个元素是
a_0
和 a_n
,级数的总和是 s_n
。我从反复试验中知道它适用于 n=9
和 r≈1.404
,但是如何计算这些值?
我们必须重建几何级数,即获得
a, q, m
(这里^
意味着提升到权力):
a, a * q, a * q^2, ..., a * q^(m - 1)
如果我们知道
first, last, total
:
first = a # first item
last = a * q^(m - 1) # last item
total = a * (q^m - 1) / (q - 1) # sum
解这些方程我们可以发现
a = first
q = (total - first) / (total - last)
m = log(last / a) / log(q)
如果您想获得数量的物品
n
,请注意n == m + 1
代码:
import math
...
def Solve(first, last, total):
a = first
q = (total - first) / (total - last)
n = math.log(last / a) / math.log(q) + 1
return (a, q, n);
如果您输入数据(
1
、15
、50
),您就会得到解决方案
a = 1
q = 1.4
n = 9.04836151801382 # not integer
因为
n
不是整数,您可能想要调整;当 last == 15
可以变化时,让 total
准确。在这种情况下 q = (last / first) ^ (1 / (n - 1))
和 total = first * (q ^ n - 1) / (q - 1)
a = 1
q = 1.402850552006674
n = 9
total = 49.752 # now n is integer, but total <> 50
您必须针对
r
和 n
求解以下两个方程:
a:= An / Ao = r^(n - 1)
和
s:= Sn / Ao = (r^n - 1) / (r - 1)
您可以通过
消除
n
s = (r a - 1) / (r - 1)
并求解
r
。然后 n
接下来是 log(a) / log(r) + 1
。
就您而言,从
s = 50
和 a = 15
,我们获得 r = 7/5 = 1.4
和 n = 9.048...
将
n
舍入为 9
是有意义的,但是 r^8 = 15
(r ~ 1.40285
) 和 r = 1.4
不太兼容。
您有足够的信息来解决它:
Sum of series = a + a*r + a*(r^2) ... + a*(r^(n-1))
= a*((r^n)-1)/(r-1)
= a*((last element * r) - 1)/(r-1)
给定级数
a
和最后一个元素的总和,您可以使用上面的等式来查找 r
的值。
插入给定示例的值:
50 = 1 * ((15*r)-1) / (r-1)
50r - 50 = 15r - 1
35r = 49
r = 1.4
然后,使用
sum of series = a*((r^n)-1)/(r-1)
:
50 = 1*((1.4^n)-1)(1.4-1)
21 = 1.4^n
n = log(21)/log(1.4) = 9.04
如果
n
不是整数,您可以近似 r
并重新计算 n
。