Open MargaretDuff opened 8 months ago
Discussed with @zeljkozeljko
Example
m, n = 900, 1000
A = np.random.normal(0, 1, (m, n))
U, S, VT = np.linalg.svd(A, full_matrices=False)
smallest_eigenval = 1e-2
largest_eigenval = 1.
Anew = U @ np.diag([(smallest_eigenval + (largest_eigenval-smallest_eigenval)*(1-j/(len(S)-1))) for j in range(len(S))]) @ VT
Aop = MatrixOperator(Anew)
print('cil norm {}, numpy norm {}'.format(Aop.norm()**2 ,np.linalg.norm(Anew, ord=2) ** 2))
Suggestion: Perhaps when calculating the Lipschitz constant of least squares, we could use a larger iteration number for the power method?
When we use step_size=1/Lipschitz constant, and the CIL norm underestimates the norm, this leads to a larger step size and could cause issues with convergence.
Something to discuss with @epapoutsellis, @jakobsj and @paskino