用不动点迭代法求f(x)=e^x+x-2=0在[0,1]内的近似根,要求误差小于10-6.
from math import exp
xl = 0 #区间下限
xu = 1 #区间上限
x = (xl+xu)/2 #迭代初始值
x_list = [x]
i = 0
while True:
x = exp(x) + x - 2 + x
x_list.append(x)
if len(x_list) > 1:
i += 1
error = abs((x_list[-1] - x_list[-2]) / x_list[-1])
if error < 10**(-6):
print(f'迭代第{i}次后,误差小于10^-6')
break
else:
pass
OverflowError: math range error
也就是溢出,数学范围错误
https://blog.csdn.net/weixin_48615832/article/details/109470488
以下为我修改后成功运行的代码
from math import exp,log
xl = 0 #区间下限
xu = 1 #区间上限
x = (xl+xu)/2 #迭代初始值
x_list = [x]
i = 0
while True:
x = log(2-x)
x_list.append(x)
if len(x_list) > 1:
i += 1
error = abs((x_list[-1] - x_list[-2]) / x_list[-1])
if error < 10**(-6):
print(f'迭代第{i}次后,误差小于10^-6')
break
else:
pass
print(f'所求方程式的根为{x_list[-1]}')
是不是这样哦,你越算越大,发散不收敛
from math import exp
xl = 0 #区间下限
xu = 1 #区间上限
x = (xl+xu)/2 #迭代初始值
y = x
i = 0
while True:
x = exp(x) + x - 2
i += 1
error = abs((x - y) / x)
y = x
if error < 10**(-6):
print(f'迭代第{i}次后,误差小于10^-6')
break