-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathproblem1.py
More file actions
53 lines (37 loc) · 1.46 KB
/
problem1.py
File metadata and controls
53 lines (37 loc) · 1.46 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# conjugate gradient algorithm for solving linear systems.
import numpy as np
from sklearn.datasets import make_spd_matrix
def LinearCG(A, b, x0, tol=1e-5):
xk = x0
rk = np.dot(A, xk) - b
pk = -rk
rk_norm = np.linalg.norm(rk)
num_iter = 0
curve_x = [xk]
while rk_norm > tol:
apk = np.dot(A, pk)
rkrk = np.dot(rk, rk)
alpha = rkrk / np.dot(pk, apk)
xk = xk + alpha * pk
rk = rk + alpha * apk
beta = np.dot(rk, rk) / rkrk
pk = -rk + beta * pk
num_iter += 1
curve_x.append(xk)
rk_norm = np.linalg.norm(rk)
print('Iteration: {} \t x = {} \t residual = {:.4f}'.
format(num_iter, xk, rk_norm))
print('\nSolution: \t x = {}'.format(xk))
return np.array(curve_x)
# Problem 1
# A is a 2 × 2 symmetric positive-definite matrix and b is a 2 × 1 vector.
A= [[ 2.54086605,-0.01128187], [-0.01128187, 0.52868286]]
b = [1.38639293, 0.37191672]
x0 = np.array([ЛЮБОЕ_ЧИСЛО_ПО_ОСИ_Х, ЛЮБОЕ_ЧИСЛО_ПО_ОСИ_Y]) # НАЧАЛЬНОЕ ПРИБЛЕЖЕНИЕ по весам
Запускайте алгоритм, всё готово!
# РАНДОМНАЯ МАТРИЦА -ЕСЛИ НАДО поэксперементировать
#np.random.seed(0)
#A = make_spd_matrix(2, random_state=0)
#x_star = np.random.random(2) веса которые мы не знаем
#b = np.dot(A, x_star)
##############