[英]Python Hw, bisection Method
A 部分 - 二分法编写一个 function 称为二分法(n,p),要求用户输入数学 function f(x)和两个边界点,以便使用二分法求解 r 使得 f(r)= 0。 当找到解决方案 r 或达到最大迭代次数 n(默认 n = 100)时,以先发生者为准,function 终止。
def bisection(n = 100, p = 0.0001):
# code goes below
fx = input("f(x) = ")
a = float(input("Boundary A: "))
x = a
fa = eval(fx)
b = float(input("Boundary B: "))
x = b
fb = eval(fx)
i = 0
if (fa * fb >= 0):
print("Bisection method fails")
return
while(i < n):
m = a + b / 2
x = m
fm = eval(fx)
if(fm * fa < 0):
a = a
b = m
if (fm * fb < 0):
a = m
b = b
i = i + 1
if (fm == 0):
return m
pass
当我输入时: f(x) = x - 1 边界 A:0 边界 B:3
没有打印答案所以我很困惑?!
这段代码有很多问题。 出于某种原因,您定义了 p 并且再也没有通过它,我认为它代表 epsilon。 您将中点定义为
a+b/2
这相当于
一个+(乙/ 2)
但你需要
(a+b)/2
. 陈述
如果(fm == 0):
这个语句可能永远不会运行,因为在几次迭代中很难接近根。
相反,使用
如果(绝对值(fm<p)):
修改代码
def bisection(n = 250, p = 10**-6):
# code goes below
fx = input("f(x) = ")
a = float(input("Boundary A: "))
x = a
fa = eval(fx)
b = float(input("Boundary B: "))
x = b
fb = eval(fx)
for i in range(1, n+1):
m = (a + b)/2
x = m
fm = eval(fx)
if(fm * fa < 0):
a = a
b = m
elif (fm * fa > 0):
a = m
b = b
elif (abs(fm<p)):
return m
print(bisection())
Output:
f(x) = x - 1
Boundary A: 0
Boundary B: 3
1.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.