數值計算方法:龍貝格算法

import numpy as np
class longbeige():
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def hanshu(self, x):
        return np.sin(x) / x
    def run(self, k):
        t = []
        s = []
        c = []
        r = []
        for i in range(k + 1):
            t.append(0)
        for i in range(k + 1):
            s.append(0)
        for i in range(k + 1):
            c.append(0)
        for i in range(k + 1):
            r.append(0)
        t[0] = (self.b - self.a) / 2 * (self.hanshu(self.b) + 1)  # python類裏面的函數也是一個對象,需要加self
        for i in range(1, k + 1):
            sum = 0
            for m in range(1, 2 ** (i - 1) + 1):
                q = self.a + (2 * m - 1) * (self.b - self.a) / (2 ** i)
                sum = sum + self.hanshu(q)
            t[i] = t[i - 1] / 2 + (self.b - self.a) / (2 ** i) * sum
        for i in range(1, k):
            s[i] = 4 / 3 * t[i] - 1 / 3 * t[i - 1]
        for i in range(2, k):
            c[i] = 16 / 15 * s[i] - 1 / 15 * s[i - 1]
        for i in range(3, k):
            r[i] = 64 / 63 * c[i] - 1 / 63 * c[i - 1]
        for i in range(k):
            print("%.7f       %.7f       %.7f       %.7f\n" % (t[i], s[i], c[i], r[i]))
long = longbeige(0, 1)
long.run(4)

寫這段代碼遇到的問題:

  1. 2**2與2^2的區別·。
  2. 列表的範圍,注意range(0,k)不包括k,下次寫類似列表的時候注意。
  3. 定義類中的方法時要加self,類中的方法調用類中的方法時要加self.方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章