Source code for svcco.implicit.solver.solver_functions.init_normals_not_given
import numpy as np
from ...core.h_matrix import H
from ...core.utils import norm
[docs]def init_normals_not_given(lam,K00,K01,K11):
H_matrix = H(K00,K01,K11,lam)
n = K00.shape[0]
d = K11.shape[0]//n
w,v = np.linalg.eig(H_matrix)
rw = w.real
eh = np.argmin(rw)
g0 = np.zeros((n,d))
for i in range(n):
#for j in range(d):
# g0[i,j] = np.real(v[eh,i+n*j])
#mag = np.linalg.norm(g0[i,:])
#for j in range(d):
# g0[i,j] = g0[i,j]/mag
g0[i,0] = np.real(v[eh,i])
g0[i,1] = np.real(v[eh,i+n])
g0[i,2] = np.real(v[eh,i+n*2])
norms = norm(g0[i,:])
g0[i,0] = g0[i,0]/norms
g0[i,1] = g0[i,1]/norms
g0[i,2] = g0[i,2]/norms
init_norms = np.zeros(n*(d-1))
#for i in range(n):
# for j in range(d-1):
# if j == d - 1:
# if ic_norms[i,j] >= 0:
# init_norms[i*(d-1)+j] = np.arccos(g0[i,j]/np.linalg.norm(g0[i,j:]))
# else:
# init_norms[i*(d-1)+j] = 2*np.pi - np.arccos(g0[i,j]/np.linalg.norm(g0[i,j:]))
# else:
# init_norms[i*(d-1)+j] = np.arccos(g0[i,j]/np.linalg.norm(g0[i,j:]))
for i in range(K00.shape[0]):
init_norms[i*2] = np.arctan2((g0[i,0]**2+g0[i,1]**2)**(1/2),g0[i,2])
init_norms[i*2+1] = np.arctan2(g0[i,1],g0[i,0])
return init_norms