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": "e5dceb7854fc465479014a43480d83085c109a07", "source": "#include <array>\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 < i; ++j) {\n std::cout << A[j, i] << ' ';\n }\n for(int j = i; 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 Vector>\nvoid init_vec(Vector& v) {\n for (int i = 0; i < v.extent(0); ++i) {\n v[i] = i;\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 = i; j < A.extent(1); ++j) {\n A[i,j] = A.extent(1) * i + 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 std::array<double, N> y_vec;\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 std::mdspan y(y_vec.data(), N);\n\n init_mat(A);\n init_vec(x);\n init_vec(y);\n\n // (1)\n std::cout << \"(1)\\n\";\n std::linalg::matrix_rank_1_update(\n x,\n A,\n std::linalg::upper_triangle);\n print_mat(A);\n\n // (2)\n init_mat(A);\n std::cout << \"(2)\\n\";\n std::linalg::matrix_rank_1_update(\n std::execution::par,\n x,\n A,\n std::linalg::upper_triangle);\n print_mat(A);\n\n // (3)\n init_mat(A);\n std::cout << \"(3)\\n\";\n std::linalg::matrix_rank_1_update(\n -1.0,\n x,\n A,\n std::linalg::upper_triangle);\n print_mat(A);\n\n // (4)\n init_mat(A);\n std::cout << \"(4)\\n\";\n std::linalg::matrix_rank_1_update(\n std::execution::par,\n -1.0,\n x,\n A,\n std::linalg::upper_triangle);\n print_mat(A);\n\n return 0;\n}\n"}], "page_id": ["reference", "linalg", "symmetric_matrix_rank_1_update"]} ">
87
+ < header data-kunai-mdinfo ="{"meta": {"header": ["linalg"], "id-type": ["function template"], "namespace": ["std::linalg"], "cpp": ["cpp26"]}, "sources": [{"id": "508f88a8df4a6def86481e0ff6af73ff9c0d5e0d", "source": "#include <array>\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 < i; ++j) {\n std::cout << A[j, i] << ' ';\n }\n for(int j = i; 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 Vector>\nvoid init_vec(Vector& v) {\n for (int i = 0; i < v.extent(0); ++i) {\n v[i] = i;\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 = i; j < A.extent(1); ++j) {\n A[i,j] = A.extent(1) * i + 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 std::array<double, N> y_vec;\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 std::mdspan y(y_vec.data(), N);\n\n init_mat(A);\n init_vec(x);\n init_vec(y);\n\n // (1)\n std::cout << \"(1)\\n\";\n std::linalg::symmetric_matrix_rank_1_update(\n x,\n A,\n std::linalg::upper_triangle);\n print_mat(A);\n\n // (2)\n init_mat(A);\n std::cout << \"(2)\\n\";\n std::linalg::symmetric_matrix_rank_1_update(\n std::execution::par,\n x,\n A,\n std::linalg::upper_triangle);\n print_mat(A);\n\n // (3)\n init_mat(A);\n std::cout << \"(3)\\n\";\n std::linalg::symmetric_matrix_rank_1_update(\n -1.0,\n x,\n A,\n std::linalg::upper_triangle);\n print_mat(A);\n\n // (4)\n init_mat(A);\n std::cout << \"(4)\\n\";\n std::linalg::symmetric_matrix_rank_1_update(\n std::execution::par,\n -1.0,\n x,\n A,\n std::linalg::upper_triangle);\n print_mat(A);\n\n return 0;\n}\n"}], "page_id": ["reference", "linalg", "symmetric_matrix_rank_1_update"]} ">
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-03T07:08:27 ">
208
- 2024年07月03日 07時08分27秒
207
+ < span itemprop ="datePublished " content ="2024-07-04T09:27:59 ">
208
+ 2024年07月04日 09時27分59秒
209
209
</ span >
210
210
< br />
211
211
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -306,7 +306,7 @@ <h2>備考</h2>
306
306
< p > (3), (4)は$A \leftarrow A - xx^T$を行うために用意された。</ p >
307
307
< h2 > 例</ h2 >
308
308
< p > < strong > [注意] 処理系にあるコンパイラで確認していないため、間違っているかもしれません。</ strong > </ p >
309
- < p > < div class ="yata " id ="e5dceb7854fc465479014a43480d83085c109a07 "> < 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 >
309
+ < p > < div class ="yata " id ="508f88a8df4a6def86481e0ff6af73ff9c0d5e0d "> < 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 >
310
310
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
311
311
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../linalg.html "> <linalg></ a > </ span > < span class ="cp "> </ span >
312
312
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../mdspan.html "> <mdspan></ a > </ span > < span class ="cp "> </ span >
@@ -365,7 +365,7 @@ <h2>例</h2>
365
365
366
366
< span class ="c1 "> // (1)</ span >
367
367
< span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "(1)</ span > < span class ="se "> \n</ span > < span class ="s "> "</ span > < span class ="p "> ;</ span >
368
- < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> matrix_rank_1_update </ span > < span class ="p "> (</ span >
368
+ < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> symmetric_matrix_rank_1_update </ span > < span class ="p "> (</ span >
369
369
< span class ="n "> x</ span > < span class ="p "> ,</ span >
370
370
< span class ="n "> A</ span > < span class ="p "> ,</ span >
371
371
< span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> upper_triangle</ span > < span class ="p "> );</ span >
@@ -374,7 +374,7 @@ <h2>例</h2>
374
374
< span class ="c1 "> // (2)</ span >
375
375
< span class ="n "> init_mat</ span > < span class ="p "> (</ span > < span class ="n "> A</ span > < span class ="p "> );</ span >
376
376
< span class ="n "> < a href ="../iostream/cout.html "> std::cout</ a > </ span > < span class ="o "> <<</ span > < span class ="s "> "(2)</ span > < span class ="se "> \n</ span > < span class ="s "> "</ span > < span class ="p "> ;</ span >
377
- < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> matrix_rank_1_update </ span > < span class ="p "> (</ span >
377
+ < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> symmetric_matrix_rank_1_update </ span > < span class ="p "> (</ span >
378
378
< span class ="n "> < a href ="../execution/execution/execution_policy.html "> std::execution::par</ a > </ span > < span class ="p "> ,</ span >
379
379
< span class ="n "> x</ span > < span class ="p "> ,</ span >
380
380
< span class ="n "> A</ span > < span class ="p "> ,</ span >
@@ -384,7 +384,7 @@ <h2>例</h2>
384
384
< span class ="c1 "> // (3)</ span >
385
385
< span class ="n "> init_mat</ span > < span class ="p "> (</ span > < span class ="n "> A</ span > < span class ="p "> );</ span >
386
386
< 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 >
387
- < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> matrix_rank_1_update </ span > < span class ="p "> (</ span >
387
+ < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> symmetric_matrix_rank_1_update </ span > < span class ="p "> (</ span >
388
388
< span class ="o "> -</ span > < span class ="mf "> 1.0</ span > < span class ="p "> ,</ span >
389
389
< span class ="n "> x</ span > < span class ="p "> ,</ span >
390
390
< span class ="n "> A</ span > < span class ="p "> ,</ span >
@@ -394,7 +394,7 @@ <h2>例</h2>
394
394
< span class ="c1 "> // (4)</ span >
395
395
< span class ="n "> init_mat</ span > < span class ="p "> (</ span > < span class ="n "> A</ span > < span class ="p "> );</ span >
396
396
< 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 >
397
- < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> matrix_rank_1_update </ span > < span class ="p "> (</ span >
397
+ < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> symmetric_matrix_rank_1_update </ span > < span class ="p "> (</ span >
398
398
< span class ="n "> < a href ="../execution/execution/execution_policy.html "> std::execution::par</ a > </ span > < span class ="p "> ,</ span >
399
399
< span class ="o "> -</ span > < span class ="mf "> 1.0</ span > < span class ="p "> ,</ span >
400
400
< span class ="n "> x</ span > < span class ="p "> ,</ span >
0 commit comments