代码之家  ›  专栏  ›  技术社区  ›  user366312

二分法寻根的Python实现

  •  0
  • user366312  · 技术社区  · 5 年前
    import math
    import matplotlib.pyplot as plt
    
    # RootFinder
    EPSILON = float(0.01);
    
    mid_x_list = []
    mid_y_list = []
    
    def Bisection(leftX, rightX, func):
        midX = 0.0;
        midY = 0.0;
        i = 0;
        while (rightX - leftX) >= EPSILON:   
            midX = (leftX + rightX) / (2.0 * 100.0) ;
            midY = func(midX);
            mid_x_list.append(midX);
            mid_y_list.append(midY);
            print(i, leftX, rightX, midX, midY);         
            if midY < 0:
                leftX = midX;
            else:
                rightX = midX;            
            i = i + 0.1;        
    
    
    # MainProgram
    # def func(x):
        # return x * x * x - x - 2; # wikipedia
        # return x * x - 2;
    
    
    
    #a = 1, b = 2; # wikipedia
    a = -50
    b = 50;
    
    x_list = []
    y_list = []
    
    for i in range(a, b):
        x = i/100.0
        y = math.sin(x);
        x_list.append(x)
        y_list.append(y)
    
    plt.plot(x_list, y_list)
    
    Bisection(a, b, math.sin);
    
    plt.plot(mid_x_list, mid_y_list)
    

    enter image description here

    为什么这个实现没有显示正弦波?

    0 回复  |  直到 5 年前
    推荐文章