84
84
85
85
</ head >
86
86
< body >
87
- < header data-kunai-mdinfo ="{"meta": {"header": ["linalg"], "id-type": ["function template"], "namespace": ["std::linalg"], "cpp": ["cpp26"]}, "sources": [{"id": "c9133e6d175ee7e771e17c12de2d702c3657bfbf", "source": "#include <array>\n#include <functional>\n#include <iostream>\n#include <linalg>\n#include <mdspan>\n#include <vector>\n\ntemplate <class Matrix>\nvoid print_mat(const Matrix& A) {\n for(int i = 0; i < A.extent(0); ++i) {\n for(int j = 0; j < A.extent(1) - 1; ++j) {\n std::cout << A[i, j] << ' ';\n }\n std::cout << A[i, A.extent(1) - 1] << '\\n';\n }\n}\n\ntemplate <class Matrix>\nvoid init_mat(Matrix& A, typename Matrix::value_type geta = 1) {\n for(int i = 0; i < A.extent(0); ++i) {\n for(int j = 0; j < A.extent(1); ++j) {\n A[i, j] = i * A.extent(1) + j + geta;\n }\n }\n}\n\ntemplate <class Matrix>\nvoid init_tria_mat(Matrix& A) {\n for(int i = 0; i < A.extent(0); ++i) {\n for(int j = i + 1; j < A.extent(1); ++j) {\n A[i, j] = i * A.extent(1) + j;\n }\n }\n}\n\nint main()\n{\n constexpr size_t N = 4;\n\n std::vector<double> A_vec(N * N);\n std::vector<double> X_vec(N * N);\n std::vector<double> B_vec(N * N);\n\n std::mdspan<\n double,\n std::extents<size_t, N, N>,\n std::linalg::layout_blas_packed<\n std::linalg::upper_triangle_t,\n std::linalg::row_major_t>\n > A(A_vec.data());\n std::mdspan X(X_vec.data(), N, N);\n std::mdspan B(B_vec.data(), N, N);\n\n init_mat(A)\n init_mat(B);\n\n // (1)\n std::cout << \"(1)\\n\";\n std::linalg::triangular_matrix_matrix_left_solve(\n A,\n std::linalg::upper_triangle,\n std::linalg::implicit_unit_diagonal,\n B,\n X,\n std::divides<void>{});\n print_mat(X);\n\n // (2)\n std::cout << \"(2)\\n\";\n std::linalg::triangular_matrix_matrix_left_solve(\n std::execution::par,\n A,\n std::linalg::upper_triangle,\n std::linalg::implicit_unit_diagonal,\n B,\n X,\n std::divides<void>{});\n print(X);\n\n // (3)\n std::cout << \"(3)\\n\";\n std::linalg::triangular_matrix_matrix_left_solve(\n A,\n std::linalg::upper_triangle,\n std::linalg::implicit_unit_diagonal,\n B,\n X);\n print(X);\n\n // (4)\n std::cout << \"(4)\\n\";\n std::linalg::triangular_matrix_matrix_left_solve(\n std::execution::par,\n A,\n std::linalg::upper_triangle,\n std::linalg::implicit_unit_diagonal,\n B,\n X);\n print(X);\n\n return 0;\n}\n"}], "page_id": ["reference", "linalg", "triangular_matrix_matrix_left_solve"]} ">
87
+ < header data-kunai-mdinfo ="{"meta": {"header": ["linalg"], "id-type": ["function template"], "namespace": ["std::linalg"], "cpp": ["cpp26"]}, "sources": [{"id": "39e216170f05a708b8a7f31ad41c94d27029c2f9", "source": "#include <array>\n#include <functional>\n#include <iostream>\n#include <linalg>\n#include <mdspan>\n#include <vector>\n\ntemplate <class Matrix>\nvoid print_mat(const Matrix& A) {\n for(int i = 0; i < A.extent(0); ++i) {\n for(int j = 0; j < A.extent(1) - 1; ++j) {\n std::cout << A[i, j] << ' ';\n }\n std::cout << A[i, A.extent(1) - 1] << '\\n';\n }\n}\n\ntemplate <class Matrix>\nvoid init_mat(Matrix& A) {\n for(int i = 0; i < A.extent(0); ++i) {\n for(int j = 0; j < A.extent(1); ++j) {\n A[i, j] = i * A.extent(1) + j;\n }\n }\n}\n\ntemplate <class Matrix>\nvoid init_tria_mat(Matrix& A) {\n for(int i = 0; i < A.extent(0); ++i) {\n for(int j = i + 1; j < A.extent(1); ++j) {\n A[i, j] = i * A.extent(1) + j;\n }\n }\n}\n\nint main()\n{\n constexpr size_t N = 4;\n\n std::vector<double> A_vec(N * N);\n std::vector<double> X_vec(N * N);\n std::vector<double> B_vec(N * N);\n\n std::mdspan<\n double,\n std::extents<size_t, N, N>,\n std::linalg::layout_blas_packed<\n std::linalg::upper_triangle_t,\n std::linalg::row_major_t>\n > A(A_vec.data());\n std::mdspan X(X_vec.data(), N, N);\n std::mdspan B(B_vec.data(), N, N);\n\n init_tria_mat(A);\n init_mat(B);\n\n // (1)\n std::cout << \"(1)\\n\";\n std::linalg::triangular_matrix_matrix_left_solve(\n A,\n std::linalg::upper_triangle,\n std::linalg::implicit_unit_diagonal,\n B,\n X,\n std::divides<void>{});\n print_mat(X);\n\n // (2)\n std::cout << \"(2)\\n\";\n std::linalg::triangular_matrix_matrix_left_solve(\n std::execution::par,\n A,\n std::linalg::upper_triangle,\n std::linalg::implicit_unit_diagonal,\n B,\n X,\n std::divides<void>{});\n print_mat(X);\n\n // (3)\n std::cout << \"(3)\\n\";\n std::linalg::triangular_matrix_matrix_left_solve(\n A,\n std::linalg::upper_triangle,\n std::linalg::implicit_unit_diagonal,\n B,\n X);\n print_mat(X);\n\n // (4)\n std::cout << \"(4)\\n\";\n std::linalg::triangular_matrix_matrix_left_solve(\n std::execution::par,\n A,\n std::linalg::upper_triangle,\n std::linalg::implicit_unit_diagonal,\n B,\n X);\n print_mat(X);\n\n return 0;\n}\n"}], "page_id": ["reference", "linalg", "triangular_matrix_matrix_left_solve"]} ">
88
88
< nav class ="navbar navbar-default " role ="navigation ">
89
89
< div class ="container-fluid ">
90
90
< div class ="navbar-header ">
204
204
205
205
< p class ="text-right "> < small >
206
206
最終更新日時(UTC):
207
- < span itemprop ="datePublished " content ="2024-07-17T05:31:13 ">
208
- 2024年07月17日 05時31分13秒
207
+ < span itemprop ="datePublished " content ="2024-07-17T05:39:35 ">
208
+ 2024年07月17日 05時39分35秒
209
209
</ span >
210
210
< br />
211
211
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -333,7 +333,7 @@ <h2>備考</h2>
333
333
</ ul >
334
334
< h2 > 例</ h2 >
335
335
< p > < strong > [注意] 処理系にあるコンパイラで確認していないため、間違っているかもしれません。</ strong > </ p >
336
- < p > < div class ="yata " id ="c9133e6d175ee7e771e17c12de2d702c3657bfbf "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../array.html "> <array></ a > </ span > < span class ="cp "> </ span >
336
+ < p > < div class ="yata " id ="39e216170f05a708b8a7f31ad41c94d27029c2f9 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../array.html "> <array></ a > </ span > < span class ="cp "> </ span >
337
337
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../functional.html "> <functional></ a > </ span > < span class ="cp "> </ span >
338
338
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
339
339
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../linalg.html "> <linalg></ a > </ span > < span class ="cp "> </ span >
@@ -351,10 +351,10 @@ <h2>例</h2>
351
351
< span class ="p "> }</ span >
352
352
353
353
< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> Matrix</ span > < span class ="o "> ></ span >
354
- < span class ="kt "> void</ span > < span class ="n "> init_mat</ span > < span class ="p "> (</ span > < span class ="n "> Matrix</ span > < span class ="o "> &</ span > < span class ="n "> A</ span > < span class ="p "> , </ span > < span class =" k " > typename </ span > < span class =" n " > Matrix </ span > < span class =" o " > :: </ span > < span class =" n " > value_type </ span > < span class =" n " > geta </ span > < span class =" o " > = </ span > < span class =" mi " > 1 </ span > < span class =" p " > )</ span > < span class ="p "> {</ span >
354
+ < span class ="kt "> void</ span > < span class ="n "> init_mat</ span > < span class ="p "> (</ span > < span class ="n "> Matrix</ span > < span class ="o "> &</ span > < span class ="n "> A</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
355
355
< span class ="k "> for</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> i</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span > < span class ="p "> ;</ span > < span class ="n "> i</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../mdspan/extents/extent.html "> A.extent</ a > </ span > < span class ="p "> (</ span > < span class ="mi "> 0</ span > < span class ="p "> );</ span > < span class ="o "> ++</ span > < span class ="n "> i</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
356
356
< span class ="k "> for</ span > < span class ="p "> (</ span > < span class ="kt "> int</ span > < span class ="n "> j</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span > < span class ="p "> ;</ span > < span class ="n "> j</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../mdspan/extents/extent.html "> A.extent</ a > </ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> );</ span > < span class ="o "> ++</ span > < span class ="n "> j</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
357
- < span class ="n "> A</ span > < span class ="p "> [</ span > < span class ="n "> i</ span > < span class ="p "> ,</ span > < span class ="n "> j</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> i</ span > < span class ="o "> *</ span > < span class ="n "> < a href ="../mdspan/extents/extent.html "> A.extent</ a > </ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span > < span class ="o "> +</ span > < span class ="n "> j</ span > < span class =" o " > + </ span > < span class =" n " > geta </ span > < span class ="p "> ;</ span >
357
+ < span class ="n "> A</ span > < span class ="p "> [</ span > < span class ="n "> i</ span > < span class ="p "> ,</ span > < span class ="n "> j</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> i</ span > < span class ="o "> *</ span > < span class ="n "> < a href ="../mdspan/extents/extent.html "> A.extent</ a > </ span > < span class ="p "> (</ span > < span class ="mi "> 1</ span > < span class ="p "> )</ span > < span class ="o "> +</ span > < span class ="n "> j</ span > < span class ="p "> ;</ span >
358
358
< span class ="p "> }</ span >
359
359
< span class ="p "> }</ span >
360
360
< span class ="p "> }</ span >
@@ -386,7 +386,7 @@ <h2>例</h2>
386
386
< span class ="n "> < a href ="../mdspan/mdspan.html "> std::mdspan</ a > </ span > < span class ="nf "> X</ span > < span class ="p "> (</ span > < span class ="n "> X_vec</ span > < span class ="p "> .</ span > < span class ="n "> data</ span > < span class ="p "> (),</ span > < span class ="n "> N</ span > < span class ="p "> ,</ span > < span class ="n "> N</ span > < span class ="p "> );</ span >
387
387
< span class ="n "> < a href ="../mdspan/mdspan.html "> std::mdspan</ a > </ span > < span class ="nf "> B</ span > < span class ="p "> (</ span > < span class ="n "> B_vec</ span > < span class ="p "> .</ span > < span class ="n "> data</ span > < span class ="p "> (),</ span > < span class ="n "> N</ span > < span class ="p "> ,</ span > < span class ="n "> N</ span > < span class ="p "> );</ span >
388
388
389
- < span class ="n "> init_mat </ span > < span class ="p "> (</ span > < span class ="n "> A</ span > < span class ="p "> )</ span >
389
+ < span class ="n "> init_tria_mat </ span > < span class ="p "> (</ span > < span class ="n "> A</ span > < span class ="p "> ); </ span >
390
390
< span class ="n "> init_mat</ span > < span class ="p "> (</ span > < span class ="n "> B</ span > < span class ="p "> );</ span >
391
391
392
392
< span class ="c1 "> // (1)</ span >
@@ -410,7 +410,7 @@ <h2>例</h2>
410
410
< span class ="n "> B</ span > < span class ="p "> ,</ span >
411
411
< span class ="n "> X</ span > < span class ="p "> ,</ span >
412
412
< span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> divides</ span > < span class ="o "> <</ span > < span class ="kt "> void</ span > < span class ="o "> ></ span > < span class ="p "> {});</ span >
413
- < span class ="n "> print </ span > < span class ="p "> (</ span > < span class ="n "> X</ span > < span class ="p "> );</ span >
413
+ < span class ="n "> print_mat </ span > < span class ="p "> (</ span > < span class ="n "> X</ span > < span class ="p "> );</ span >
414
414
415
415
< span class ="c1 "> // (3)</ span >
416
416
< span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "(3)</ span > < span class ="se "> \n</ span > < span class ="s "> "</ span > < span class ="p "> ;</ span >
@@ -420,7 +420,7 @@ <h2>例</h2>
420
420
< span class ="n "> < a href ="implicit_unit_diagonal_t.html "> std::linalg::implicit_unit_diagonal</ a > </ span > < span class ="p "> ,</ span >
421
421
< span class ="n "> B</ span > < span class ="p "> ,</ span >
422
422
< span class ="n "> X</ span > < span class ="p "> );</ span >
423
- < span class ="n "> print </ span > < span class ="p "> (</ span > < span class ="n "> X</ span > < span class ="p "> );</ span >
423
+ < span class ="n "> print_mat </ span > < span class ="p "> (</ span > < span class ="n "> X</ span > < span class ="p "> );</ span >
424
424
425
425
< span class ="c1 "> // (4)</ span >
426
426
< span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "(4)</ span > < span class ="se "> \n</ span > < span class ="s "> "</ span > < span class ="p "> ;</ span >
@@ -431,7 +431,7 @@ <h2>例</h2>
431
431
< span class ="n "> < a href ="implicit_unit_diagonal_t.html "> std::linalg::implicit_unit_diagonal</ a > </ span > < span class ="p "> ,</ span >
432
432
< span class ="n "> B</ span > < span class ="p "> ,</ span >
433
433
< span class ="n "> X</ span > < span class ="p "> );</ span >
434
- < span class ="n "> print </ span > < span class ="p "> (</ span > < span class ="n "> X</ span > < span class ="p "> );</ span >
434
+ < span class ="n "> print_mat </ span > < span class ="p "> (</ span > < span class ="n "> X</ span > < span class ="p "> );</ span >
435
435
436
436
< span class ="k "> return</ span > < span class ="mi "> 0</ span > < span class ="p "> ;</ span >
437
437
< span class ="p "> }</ span >
0 commit comments