1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import numpy as np
import matplotlib.pyplot as plt
A = np.array([[ 8 , - 3 , 2 ], [ 4 , 11 , - 1 ], [ 6 , 3 , 12 ]])
b = np.array([[ 20 , 33 , 36 ]])
# 方法一:消元法求解方程组的解
result = np.linalg.solve(A, b.T)
print ( 'Result:\n' , result)
# 方法二:迭代法求解方程组的解
B = np.array([[ 0 , 3 / 8 , - 2 / 8 ], [ - 4 / 11 , 0 , 1 / 11 ], [ - 6 / 12 , - 3 / 12 , 0 ]])
f = np.array([[ 20 / 8 , 33 / 11 , 36 / 12 ]])
error = 1.0e - 6
steps = 100
xk = np.zeros(( 3 , 1 )) # initialize parameter setting
errorlist = []
for k in range (steps):
xk_1 = xk
xk = np.matmul(B, xk) + f.T
print ( 'xk:\n' , xk)
errorlist.append(np.linalg.norm(xk - xk_1))
if errorlist[ - 1 ] < error:
print ( 'iteration: ' , k + 1 )
break
# 把误差画出来
x_axis = [i for i in range ( len (errorlist))]
plt.figure()
plt.plot(x_axis, errorlist)
|