0

我正在尝试使用二分算法找到函数根的良好近似值,但是,当我运行代码时,它不会返回根 (c)。这是我的代码。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10,10,201)

def f(x): 
    return np.cos(x) 

plt.figure()
plt.plot(x,f(x),label = 'cosx')
plt.xlabel('independent variable x')
plt.ylabel('dependent variable y')
plt.title('')

plt.show()

TOL = 10**-6
a = 0
b = 1

def bisection(a,b,TOL):
    c = (a+b)/2.0  
    while (b-a)/2.0 > TOL:
        if f(c)==0:
            return c
        elif f(a)*f(c)<0:
            b = c
        else:
            a = c
    c = (a+b)/2.0
    return c
4

1 回答 1

0

正如发布的那样,您的代码不会更改循环中的值,c 因为它在 while 循环之外,因此值a永远b不会改变,从而导致无限循环:

def bisection(a,b,TOL):
    c = (a+b)/2.0  
    while (b-a)/2.0 > TOL:
        if f(c)==0:
            return c
        elif f(a)*f(c)<0:
            b = c
        else:
            a = c
        c = (a+b)/2.0 # put inside the while
    return c

要通过循环查看 c 的值,请添加打印语句:

def bisection(a, b, TOL):
    c = (a + b) / 2.0
    while (b - a) / 2.0 > TOL:
        if f(c) == 0:
            return c
        elif f(a) * f(c) < 0:
            b = c
        else:
            a = c
        c = (a + b) / 2.0
        print ("Current value of c is {}".format(c)) 
    return c
于 2014-09-14T19:17:50.177 回答