import numpy as np
from matplotlib import pyplot as plt
# Kaczmarz 算法
def Kaczmarz(A, b, epslison, X):
global X_array
m, n = np.shape(A)
while np.linalg.norm(A@X-b)>epslison:
for j in range(m):
X = X - (X@A[j]-b[j])*A[j]/(A[j]@A[j].T)
X_array = np.append(X_array, X[np.newaxis,:], axis=0)
# 初始化数据
epslison = 0.001
mu = 1.0
A = np.array([[1.0, -1.0], [0.0, 1.0]])
b = np.array([2.0, 3.0])
X = np.array([0, 0])
X_array = np.array([X])
Kaczmarz(A, b, epslison, X)
fig = plt.figure(figsize=(8, 8))
plt.plot([0, 6], [-2, 4])
plt.plot([0, 6], [3, 3])
plt.plot(X_array[:, 0], X_array[:, 1], color='r', linestyle='-', marker='o', linewidth=2.0)
plt.grid()
plt.show()
Kaczmarz迭代算法 HW9
于 2022-11-27 00:06:22 首次发布