@@ -147,4 +147,44 @@ namespace xt
147147 EXPECT_EQ (expected3, res3);
148148 }
149149
150+ TEST (xlapack, solveCholesky) {
151+
152+ xarray<double > A =
153+ {{ 1 . , 0 . , 0 . , 0 . , 0 . },
154+ { 0.44615865 , 0.89495389 , 0 . , 0 . , 0 . },
155+ { 0.39541532 , 0.24253783 , 0.88590187 , 0 . , 0 . },
156+ {-0.36681098 , -0.26249522 , 0.0338034 , 0.89185386 , 0 . },
157+ { 0.0881614 , 0.12356345 , 0.19887529 , -0.35996807 , 0.89879433 }};
158+
159+ xarray<double > b = {1 , 1 , 1 , -1 , -1 };
160+ auto x = linalg::solve_cholesky (A, b);
161+
162+ const xarray<double > x_expected = { 0.13757507429403265 , 0.26609253571318064 , 1.03715526610177222 ,
163+ -1.3449222878385465 , -1.81183493755905478 };
164+
165+ for (int i = 0 ; i < x_expected.shape ()[0 ]; ++i) {
166+ EXPECT_DOUBLE_EQ (x_expected[i], x[i]);
167+ }
168+ }
169+
170+ TEST (xlapack, solveTriangular) {
171+
172+ const xt::xtensor<double , 2 > A =
173+ {{ 1 . , 0 . , 0 . , 0 . , 0 . },
174+ { 0.44615865 , 0.89495389 , 0 . , 0 . , 0 . },
175+ { 0.39541532 , 0.24253783 , 0.88590187 , 0 . , 0 . },
176+ {-0.36681098 , -0.26249522 , 0.0338034 , 0.89185386 , 0 . },
177+ { 0.0881614 , 0.12356345 , 0.19887529 , -0.35996807 , 0.89879433 }};
178+
179+ const xt::xtensor<double , 1 > b = {0.38867999 , 0.46467046 , 0.39042938 , -0.2736973 , 0.20813322 };
180+ auto x = linalg::solve_triangular (A, b);
181+
182+ const xarray<double > x_expected = { 0.38867998999999998 , 0.32544416381003327 , 0.17813128230545805 ,
183+ -0.05799057434472885 , 0.08606304705465571 };
184+
185+ for (int i = 0 ; i < x_expected.shape ()[0 ]; ++i) {
186+ EXPECT_DOUBLE_EQ (x_expected[i], x[i]);
187+ }
188+ }
189+
150190}
0 commit comments