zoukankan      html  css  js  c++  java
  • 【计算方法】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()
    
  • 相关阅读:
    TSQL
    NET 中的对象序列化
    我常用的WebConfigSet类
    Asp.Net 2.0中的客户端脚本
    DataTable.Select()使用
    Change SharePoint 2013 Search Topology
    3 ways to localize SharePoint XSLT
    线程编程托管C++ Thread类
    SQL字符串操作函数小结
    通过数据的判断使Gridview中数据变色
  • 原文地址:https://www.cnblogs.com/ME-WE/p/12433581.html
Copyright © 2011-2022 走看看