牛頓迭代法解非線性方程

牛頓迭代法

來着百度:
在這裏插入圖片描述
侵刪
在這裏插入圖片描述

Python

import numpy as np


def fun(t): # 原函數
    y = 9600*(1-np.e**(-t/15.0))-480*t
    return y


def dfun(t): # 導函數
    y = 640*(np.e**(-t/15.0))-480
    return y


def newton(p0, delta, epsilon, max1):
    for i in range(1, max1):
        p1 = p0-fun(p0)/dfun(p0)
        err = abs(p1-p0)
        #relerr = 2*err/(abs(p1)+delta)
        p0 = p1
        y = fun(p0)
        if err < delta or abs(y) < epsilon:
            break
    return p0


def main():
    a, b, c = map(float, input().split())
    b = int(b)
    c = int(c)
    delta = 10**(-b)
    epsilon = 10**(-c)
    max1 = 50 # 最大迭代次數
    t = newton(a, delta, epsilon, max1)
    print("%.5f" % t)
    x = 2400*(1-np.e**(-t/15.0))
    print("%.5f" % x)


if __name__ == '__main__':
    main()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章