import numpy as np
import matplotlib.pyplot as plt
def g(x):
return 0.5 * (x + 2 / x)
def is_lipschitz(g, a, b, num_points=1000):
x = np.linspace(a, b, num_points)
max_lipschitz_constant = 0
for i in range(num_points):
for j in range(i + 1, num_points):
x_i = x[i]
x_j = x[j]
if x_i != x_j:
lipschitz_constant = abs(g(x_i) - g(x_j)) / abs(x_i - x_j)
max_lipschitz_constant = max(max_lipschitz_constant, lipschitz_constant)
return max_lipschitz_constant
# 设置区间 [a, b]
a, b = 0.5, 2.0
# 验证利普希兹条件
L = is_lipschitz(g, a, b)
print(f"Lipschitz constant: {L}")
if L < 1:
print("The iteration method is convergent.")
else:
print("The iteration method is not convergent.")
# 迭代法模拟
x0 = 1.0
iterations = [x0]
for _ in range(10):
x0 = g(x0)
iterations.append(x0)
# 绘制迭代过程
plt.plot(iterations, marker='o')
plt.xlabel('Iteration')
plt.ylabel('x')
plt.title('Iteration Method Convergence')
plt.grid(True)
plt.show()