47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
def fd1(x):
|
|
return 1+1/x**2
|
|
|
|
def fd2(x):
|
|
return 1/(x-1)**0.5
|
|
|
|
# 迭代法求解方程
|
|
def Renew(x,fd,err):
|
|
count=0
|
|
i = 0
|
|
try:
|
|
while True:
|
|
xk = fd(x)
|
|
print(f"当前迭代值: {xk}, 上一次迭代值: {x}, 误差: {abs(xk-x)}")
|
|
if abs(i) < (xk-x):
|
|
count += 1
|
|
else:
|
|
count = 0
|
|
if count > 10:
|
|
print("不收敛")
|
|
break
|
|
if abs(xk-x) < err:
|
|
return xk
|
|
i = xk-x
|
|
x = xk
|
|
except Exception as e:
|
|
print(f"发生错误: {e}")
|
|
return None
|
|
return None
|
|
|
|
|
|
# 定义迭代公式 x = fd(x) ###############################
|
|
def fd(x):
|
|
return 1+1/x**2
|
|
|
|
if __name__ == "__main__":
|
|
##############################################################################################################
|
|
x0 = 1.5 # 初始值
|
|
err = 1e-5 # 精度要求 P136
|
|
|
|
result = Renew(x0, fd, err)
|
|
if result is not None:
|
|
print(f"收敛 解为: {result:.5f}")
|
|
else:
|
|
print("不收敛")
|
|
|