【计算方法】02 - 试值法求利率(非线性方程求解)

【题目简述】试值法求利率(非线性方程求解)

【问题描述】如果在240个月内每月付款300美元,求解满足全部年金A为500000美元的利率I的近似值

【输入形式】在屏幕上输入3个数,分别表示左端点值、右端点值和由所求利率得到的年金误差。各数间都以一个空格分隔。

【输出形式】第一行输出迭代次数,第二行输出利率(精确到小数点后11位)

【样例输入】

 0.15 0.16 0.01

【样例输出】

 3

 0.15753930922

【样例说明】输入:左端点值为0.15,右端点值为0.16,由所求利率得到的年金误差为0.01美元。输出:第一行为迭代次数3次,第二行为求得的利率为0.15753930922

【评分标准】根据输入得到的输出准确

# -*- coding: utf-8 -*-
# 第二次作业 - 试值法求利率(非线性方程求解)
import math

# 年金计算函数
def f(x):
    p = 300
    n = 240
    A = 12*p*((1+x/12)**n-1)/x-500000
    return A

# a为左端点值,b为右端点值,accuracy为给定误差
def FalsePosition(a, b, accuracy):
    # 如果f(a)*f(b) > 0,此方法不适用
    if f(a)*f(b) > 0 :
        print("This method is not suitable ")
        return
    err = 100000
    n = 0
    # while循环
    while (err > accuracy):
        c = b - f(b)*(b-a) / ( f(b)-f(a) )
        if f(c) == 0:
            break
        elif f(a)*f(c) < 0:
            b = c
            c = b - f(b)*(b-a) / ( f(b)-f(a) )
        else:
            a = c
            c = b - f(b)*(b-a) / ( f(b)-f(a) )
        err = abs(f(c))
        n = n + 1
    return (n, round(c, 11))


# main函数
def main():
    left, right, accuracy = map(float, input().split())
    result = FalsePosition(left, right, accuracy)
    print(result[0])
    print(result[1])

if __name__ == '__main__':
    main()

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务