【计算方法】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 = 300n = 240A = 12*p*((1+x/12)**n-1)/x-500000return 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 ")returnerr = 100000n = 0# while循环while (err > accuracy):c = b - f(b)*(b-a) / ( f(b)-f(a) )if f(c) == 0:breakelif f(a)*f(c) < 0:b = cc = b - f(b)*(b-a) / ( f(b)-f(a) )else:a = cc = b - f(b)*(b-a) / ( f(b)-f(a) )err = abs(f(c))n = n + 1return (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()

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部