11import numpy as np
2- def lanczos (A : np .ndarray ) -> ([ float ], [float ]) :
2+ def lanczos (a : np .ndarray ) -> tuple [ list [ float ], list [float ]] :
33 """
44 Implements the Lanczos algorithm for a symmetric matrix.
55
@@ -15,20 +15,21 @@ def lanczos(A: np.ndarray) -> ([float], [float]):
1515 beta : [float]
1616 List of off-diagonal elements of the resulting tridiagonal matrix.
1717 """
18- n = A .shape [0 ]
19- V = np .zeros ((n , n ))
20- V [:, 0 ] = np .random .randn (n )
21- V [:, 0 ] /= np .linalg .norm (V [:, 0 ])
22- alpha = []
23- beta = []
18+ n = a .shape [0 ]
19+ v = np .zeros ((n , n ))
20+ rng = np .random .default_rng ()
21+ v [:, 0 ] = rng .standard_normal (n )
22+ v [:, 0 ] /= np .linalg .norm (v [:, 0 ])
23+ alpha : list [float ] = []
24+ beta : list [float ] = []
2425 for j in range (n ):
25- w = np .dot (A , V [:, j ])
26- alpha .append (np .dot (w , V [:, j ]))
26+ w = np .dot (a , v [:, j ])
27+ alpha .append (np .dot (w , v [:, j ]))
2728 if j == n - 1 :
2829 break
29- w -= alpha [j ] * V [:, j ]
30+ w -= alpha [j ] * v [:, j ]
3031 if j > 0 :
31- w -= beta [j - 1 ] * V [:, j - 1 ]
32+ w -= beta [j - 1 ] * v [:, j - 1 ]
3233 beta .append (np .linalg .norm (w ))
33- V [:, j + 1 ] = w / beta [j ]
34+ v [:, j + 1 ] = w / beta [j ]
3435 return alpha , beta
0 commit comments