|
7 | 7 | B = rng.random((dim, dim)) |
8 | 8 | B = (B + B.T) * 0.5 + np.diag(10.0 + rng.random(dim)) |
9 | 9 |
|
10 | | -ges = nanoeigenpy.GeneralizedEigenSolver() |
11 | | -ges_size = nanoeigenpy.GeneralizedEigenSolver(dim) |
12 | 10 | ges_matrices = nanoeigenpy.GeneralizedEigenSolver(A, B) |
13 | 11 | assert ges_matrices.info() == nanoeigenpy.ComputationInfo.Success |
14 | 12 |
|
15 | | -ges_with_vectors = nanoeigenpy.GeneralizedEigenSolver(A, B, True) |
16 | | -assert ges_with_vectors.info() == nanoeigenpy.ComputationInfo.Success |
17 | | - |
18 | | -ges_without_vectors = nanoeigenpy.GeneralizedEigenSolver(A, B, False) |
19 | | -assert ges_without_vectors.info() == nanoeigenpy.ComputationInfo.Success |
20 | | - |
21 | 13 | alphas = ges_matrices.alphas() |
22 | 14 | betas = ges_matrices.betas() |
23 | 15 | eigenvectors = ges_matrices.eigenvectors() |
24 | 16 | eigenvalues = ges_matrices.eigenvalues() |
25 | 17 |
|
26 | | -assert alphas.shape == (dim,) |
27 | | -assert betas.shape == (dim,) |
28 | | -assert eigenvectors.shape == (dim, dim) |
29 | | -assert eigenvalues.shape == (dim,) |
30 | | - |
31 | 18 | for k in range(dim): |
32 | 19 | v = eigenvectors[:, k] |
33 | 20 | lambda_k = eigenvalues[k] |
|
51 | 38 | if abs(betas[k]) > 1e-12: |
52 | 39 | expected_eigenvalue = alphas[k] / betas[k] |
53 | 40 | assert abs(eigenvalues[k] - expected_eigenvalue) < 1e-12 |
54 | | - |
55 | | -ges_compute = nanoeigenpy.GeneralizedEigenSolver() |
56 | | -result = ges_compute.compute(A, B, False) |
57 | | -assert result.info() == nanoeigenpy.ComputationInfo.Success |
58 | | -alphas_only = ges_compute.alphas() |
59 | | -betas_only = ges_compute.betas() |
60 | | -eigenvalues_only = ges_compute.eigenvalues() |
61 | | - |
62 | | -result_with_vectors = ges_compute.compute(A, B, True) |
63 | | -assert result_with_vectors.info() == nanoeigenpy.ComputationInfo.Success |
64 | | -eigenvectors_computed = ges_compute.eigenvectors() |
65 | | - |
66 | | -ges_default = nanoeigenpy.GeneralizedEigenSolver() |
67 | | -result_default = ges_default.compute(A, B) |
68 | | -assert result_default.info() == nanoeigenpy.ComputationInfo.Success |
69 | | - |
70 | | -ges_iter = nanoeigenpy.GeneralizedEigenSolver(A, B) |
71 | | -ges_iter.setMaxIterations(100) |
72 | | -ges_iter.setMaxIterations(200) |
73 | | - |
74 | | -A1 = rng.random((dim, dim)) |
75 | | -B1 = rng.random((dim, dim)) |
76 | | -spdA = A.T @ A + A1.T @ A1 |
77 | | -spdB = B.T @ B + B1.T @ B1 |
78 | | - |
79 | | -ges_spd = nanoeigenpy.GeneralizedEigenSolver(spdA, spdB) |
80 | | -assert ges_spd.info() == nanoeigenpy.ComputationInfo.Success |
81 | | - |
82 | | -spd_eigenvalues = ges_spd.eigenvalues() |
83 | | -max_imag = np.max(np.abs(spd_eigenvalues.imag)) |
84 | | -assert max_imag < 1e-10 |
85 | | - |
86 | | -ges1 = nanoeigenpy.GeneralizedEigenSolver() |
87 | | -ges2 = nanoeigenpy.GeneralizedEigenSolver() |
88 | | -id1 = ges1.id() |
89 | | -id2 = ges2.id() |
90 | | -assert id1 != id2 |
91 | | -assert id1 == ges1.id() |
92 | | -assert id2 == ges2.id() |
93 | | - |
94 | | -ges3 = nanoeigenpy.GeneralizedEigenSolver(dim) |
95 | | -ges4 = nanoeigenpy.GeneralizedEigenSolver(dim) |
96 | | -id3 = ges3.id() |
97 | | -id4 = ges4.id() |
98 | | -assert id3 != id4 |
99 | | -assert id3 == ges3.id() |
100 | | -assert id4 == ges4.id() |
101 | | - |
102 | | -ges5 = nanoeigenpy.GeneralizedEigenSolver(A, B) |
103 | | -ges6 = nanoeigenpy.GeneralizedEigenSolver(A, B) |
104 | | -id5 = ges5.id() |
105 | | -id6 = ges6.id() |
106 | | -assert id5 != id6 |
107 | | -assert id5 == ges5.id() |
108 | | -assert id6 == ges6.id() |
109 | | - |
110 | | -ges7 = nanoeigenpy.GeneralizedEigenSolver(A, B, True) |
111 | | -ges8 = nanoeigenpy.GeneralizedEigenSolver(A, B, False) |
112 | | -id7 = ges7.id() |
113 | | -id8 = ges8.id() |
114 | | -assert id7 != id8 |
115 | | -assert id7 == ges7.id() |
116 | | -assert id8 == ges8.id() |
0 commit comments