numpy 几何级数:根据和以及第一个和最后一个元素计算商和元素数

c3frrgcw  于 2022-12-13  发布在  其他
关注(0)|答案(3)|浏览(125)

在对数刻度上创建等间距的数字如果已知序列的起始值和终值,例如,numpy.logspacenumpy.geomspace,则对于给定的基数和元素数,可以很容易地完成(几何级数)。现在假设我想以相反的方式定义几何级数,即:如果我知道级数的和以及级数的第一个和最后一个元素,我能计算出商和元素的个数吗?
例如,假设级数的第一个和最后一个元素是



,级数之和应该等于

。我通过反复试验知道,它适用于n=9r≈1.404,但如何计算这些值呢?

ewm0tg9j

ewm0tg9j1#

你有足够的信息来解决它:

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不是整数,您可以近似n并重新计算r

pvcm50d1

pvcm50d12#

我们必须重建几何级数,即得到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)

如果要获取nnumber,请注意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);

Fiddle
如果您将数据(11550

a = 1 
q = 1.4 
n = 9.04836151801382 # not integer

由于n不是整数,您可能需要调整;当total可以变化时,设last == 15是精确的。在这种情况下,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
mfpqipee

mfpqipee3#

您必须解出rn的以下两个方程式:

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
在您的情况下,r = 7 / 5 = 1.4n = 9.048...
n四舍五入为9是有意义的,但是r^8 = 15r ~ 1.40285)和r = 1.4并不完全兼容。

相关问题