求帮忙一下,这个公式中的i该怎么计算出来,用什么东西计算。谢谢!
只能近似计算,先试出一个大概的边界,再用实数二分
guess = 0.01 # 从 1% 利率开始试
PV = 33404.87
FV = [144.5, 202.3, 375.7, 578, 722.5, 34867]
def init(FV, guess):
guess_PV = 0
for i in range(len(FV)):
guess_PV += FV[i]/((1+guess)**(i+1))
return guess_PV
while init(FV, guess) > PV:
guess += 0.01
l, r = guess-0.01, guess
while r - l > 1e-6:
mid = (l+r)/2
if init(FV, mid) < PV: r = mid
else: l = mid
print(f"{l:.5f}")
结果是当利率大概是0.01704,也就是1.704%的时候,6笔投资的现值大概是33404.48
这个考点我相信大家一定不陌生,求最大公约数有的人可能还用的是遍历去查询,如果是填空题时间长点可能无所谓,但是如果大题涉及到最大公约数或者公倍数的问题,蓝桥杯的数据量是出名的大(这个后面会体现),超时是肯定的。所以请大家背下欧几里得公式直接使用(已知效率最快求出公倍数地公式)
1.gcd函数(欧几里得算法原理)
//返回值则是a和b的最大公约数
int gcd(int a,int b){
return b == 0 ? a:gcd(b,a%b);
}
2.lcm函数(速求最小公倍数,原理基于gcd函数)
//返回值为a和b的最小公倍数
int lcm(int a, int b){
return a/gcd(a,b)*b;//最小公倍数=两数之积÷两数最大公约数
}
问题标题: 求解复利现值相似公式中的利率计算方式
问题内容: 我在计算复利现值相似公式时需要求解其中的利率i。请问在这种情况下,我该使用什么样的计算方法来确定利率i的值?我需要注意哪些因素?谢谢!
解决方案:
复利现值相似公式是指在不同的利率和不同的时间下,其两个不同的现值相等。假设在利率i下,金额P现在投资,n年后到期,得到的现值为Sn,现在我们想知道利率i的大小。可以用以下式子来计算:
Sn = P * (1 + i)^n
化简之后:
i = (S/P)^(1/n) - 1
其中,P为现值,S为复利终值,n为年份。
需要注意的是,由于使用n次方根对i求解,若n较大时,这个求解结果较为困难,因此,在实际使用时,建议使用二分查找法等算法来近似地求解i的取值。具体可以按以下步骤来实现:
def find_rate(P, S, n, epsilon=1e-6):
left, right = 0, 1 # 初始利率区间
while left <= right:
mid = (left + right) / 2
Sn = P * (1 + mid)**n
if abs(Sn - S) < epsilon: # 已经找到目标利率
return mid
elif Sn > S: # 当前利率过高,将右界移动至mid-epsilon
right = mid - epsilon
else: # 当前利率过低,将左界移动至mid+epsilon
left = mid + epsilon
return -1 # 未找到目标利率
from decimal import Decimal
def find_rate(P, S, n, epsilon=Decimal('1E-6')):
left, right = Decimal('0'), Decimal('1')
while left <= right:
mid = (left + right) / Decimal('2')
Sn = P * (Decimal('1') + mid)**n
if abs(Sn - S) < epsilon:
return mid
elif Sn > S:
right = mid - epsilon
else:
left = mid + epsilon
return -1