Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import math
- import copy
- from scipy.optimize import minimize
- def cor(V,x,eps):
- s = list()
- for i in V:
- s.append(1 / (np.linalg.norm(x - i, ord=2) + eps))
- S = list()
- for i in s:
- S.append(i / sum(s))
- print(S)
- print(V)
- return S[0] * V[0] + S[1] * V[1] + S[2] * V[2] + S[3] * V[3]
- def coeffs(coef_lambda):
- c = list()
- for i in coef_lambda:
- c.append(sum(coef_lambda) / i)
- c1 = list()
- for i in c:
- c1.append(i / sum(c))
- return c1
- def step_alg(A, eps):
- m = A.shape[1]
- w = np.array([[]])
- for i in range(m):
- w = np.append(w, [[1 / m]], axis=1)
- lam = pow(10, 10)
- k = 0
- w = w.T
- while True:
- k = k + 1
- w1 = copy.copy(w)
- w = np.dot(A, w)
- s = 0
- for i in range(A.shape[1]):
- s = s+w[i][0] / w1[i][0]
- lam1 = copy.copy(lam)
- lam = 1 / m * s
- m = max(w.T[0])
- for i in range(A.shape[1]):
- w[i][0] = w[i][0] / m
- if abs(lam - lam1) > eps:
- continue
- else:
- s=sum(w.T[0])
- for i in range(A.shape[1]):
- w[i][0] = w[i][0] / s
- break;
- return w
- def St(x):
- sums = list()
- for i in V:
- sums.append(np.linalg.norm(x - i, ord=2))
- sums = np.array(sums)
- return sums
- def Stein(x):
- return np.sum(C * St(x))
- A1=np.array([[1, 3, 7, 9],
- [1/3, 1, 3, 1],
- [1/7, 1/3, 1, 1],
- [1/9, 1, 1, 1]])
- A2=np.array([[1, 5, 7, 9],
- [1/5, 1, 3, 1],
- [1/7, 1/3, 1, 1],
- [1/9, 1, 1, 1]])
- A3=np.array([[1, 3, 7, 3],
- [1/3, 1, 3, 1],
- [1/7, 1/3, 1, 1,],
- [1/3, 1, 1, 1]])
- A4=np.array([[1, 3, 7, 5],
- [1/3, 1, 3, 1],
- [1/7, 1/3, 1, 1],
- [1/5, 1, 1, 1]])
- w1=step_alg(A1, 0.0001)
- w2=step_alg(A2, 0.0001)
- w3=step_alg(A3, 0.0001)
- w4=step_alg(A4, 0.0001)
- V = copy.deepcopy(w1.T)
- V = np.append(V, copy.deepcopy(w2.T), axis=0)
- V = np.append(V, copy.deepcopy(w3.T), axis=0)
- V = np.append(V, copy.deepcopy(w4.T), axis=0)
- lambda1,v = np.linalg.eig(A1)
- lambda2,v = np.linalg.eig(A2)
- lambda3,v1 = np.linalg.eig(A3)
- lambda4,v1 = np.linalg.eig(A4)
- lambda1 = max(lambda1)
- lambda2 = max(lambda2)
- lambda3 = max(lambda3)
- lambda4 = max(lambda4)
- print(lambda1, lambda2, lambda3, lambda4)
- C = np.array(coeffs([lambda1, lambda2, lambda3, lambda4]))
- x0=np.array([0, 0, 0, 0])
- x=minimize(Stein, x0, method='nelder-mead', options={'xtol':1e-3,'disp':True}).x
- print(cor(V, x, 0.0001))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement