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": "63f86644e441c968dc932c2ab9fc8f48c2914ad8", "source": "#include <array>\n#include <iostream>\n#include <linalg>\n#include <mdspan>\n#include <vector>\n\ntemplate <class Vector>\nvoid print(const Vector& v, const std::string& name) {\n for (int i = 0; i < v.extent(0); ++i) {\n std::cout << name << \"[\" << i << \"]\" << \" = \" << v[i] << '\\n';\n }\n}\n\nint main()\n{\n constexpr size_t N = 4;\n constexpr size_t M = 4;\n\n std::vector<double> A_vec(N*M);\n std::vector<double> x_vec(M);\n std::array<double, N> y_vec, z_vec;\n\n std::mdspan<\n double,\n std::extents<size_t, N, M>,\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(), M);\n std::mdspan y(y_vec.data(), N);\n std::mdspan z(z_vec.data(), N);\n\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 for(int j = 0; j < x.extent(0); ++j) {\n x[j] = j;\n }\n for(int i = 0; i < y.extent(0); ++i) {\n y[i] = -i;\n }\n\n // (1)\n std::cout << \"(1)\\n\";\n std::linalg::symmetric_matrix_vector_product(A, std::linalg::upper_triangle, x, y);\n print(y, \"y\");\n\n // (2)\n std::cout << \"(2)\\n\";\n std::linalg::symmetric_matrix_vector_product(std::execution::par, A, std::linalg::upper_triangle, x, y);\n print(y, \"y\");\n\n // (3)\n std::cout << \"(3)\\n\";\n std::linalg::symmetric_matrix_vector_product(A, std::linalg::upper_triangle, x, y, z);\n print(z, \"z\");\n\n // (4)\n std::cout << \"(4)\\n\";\n std::linalg::symmetric_matrix_vector_product(std::execution::par, A, std::linalg::upper_triangle, x, y, z);\n print(z, \"z\");\n\n return 0;\n}\n"}], "page_id": ["reference", "linalg", "symmetric_matrix_vector_product"]} ">
87
+ < header data-kunai-mdinfo ="{"meta": {"header": ["linalg"], "id-type": ["function template"], "namespace": ["std::linalg"], "cpp": ["cpp26"]}, "sources": [{"id": "75595f54e5e933827f01db3a2603e0409fa9e2d0", "source": "#include <array>\n#include <iostream>\n#include <linalg>\n#include <mdspan>\n#include <vector>\n\ntemplate <class Vector>\nvoid print(const Vector& v, const std::string& name) {\n for (int i = 0; i < v.extent(0); ++i) {\n std::cout << name << \"[\" << i << \"]\" << \" = \" << v[i] << '\\n';\n }\n}\n\nint main()\n{\n constexpr size_t N = 4;\n constexpr size_t M = 4;\n\n std::vector<double> A_vec(N*M);\n std::vector<double> x_vec(M);\n std::array<double, N> y_vec, z_vec;\n\n std::mdspan<\n double,\n std::extents<size_t, N, M>,\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(), M);\n std::mdspan y(y_vec.data(), N);\n std::mdspan z(z_vec.data(), N);\n\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 for(int j = 0; j < x.extent(0); ++j) {\n x[j] = j;\n }\n\n // (1)\n std::cout << \"(1)\\n\";\n std::linalg::symmetric_matrix_vector_product(A, std::linalg::upper_triangle, x, y);\n print(y, \"y\");\n\n // (2)\n std::cout << \"(2)\\n\";\n std::linalg::symmetric_matrix_vector_product(std::execution::par, A, std::linalg::upper_triangle, x, y);\n print(y, \"y\");\n\n for(int i = 0; i < y.extent(0); ++i) {\n y[i] = -i;\n }\n\n // (3)\n std::cout << \"(3)\\n\";\n std::linalg::symmetric_matrix_vector_product(A, std::linalg::upper_triangle, x, y, z);\n print(z, \"z\");\n\n // (4)\n std::cout << \"(4)\\n\";\n std::linalg::symmetric_matrix_vector_product(std::execution::par, A, std::linalg::upper_triangle, x, y, z);\n print(z, \"z\");\n\n return 0;\n}\n"}], "page_id": ["reference", "linalg", "symmetric_matrix_vector_product"]} ">
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-06-25T07:19:32 ">
208
- 2024年06月25日 07時19分32秒
207
+ < span itemprop ="datePublished " content ="2024-06-26T02:42:24 ">
208
+ 2024年06月26日 02時42分24秒
209
209
</ span >
210
210
< br />
211
211
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -316,7 +316,7 @@ <h2>備考</h2>
316
316
</ ul >
317
317
< h2 > 例</ h2 >
318
318
< p > < strong > [注意] 処理系にあるコンパイラで確認していないため、間違っているかもしれません。</ strong > </ p >
319
- < p > < div class ="yata " id ="63f86644e441c968dc932c2ab9fc8f48c2914ad8 "> < 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 >
319
+ < p > < div class ="yata " id ="75595f54e5e933827f01db3a2603e0409fa9e2d0 "> < 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 >
320
320
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../iostream.html "> <iostream></ a > </ span > < span class ="cp "> </ span >
321
321
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../linalg.html "> <linalg></ a > </ span > < span class ="cp "> </ span >
322
322
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../mdspan.html "> <mdspan></ a > </ span > < span class ="cp "> </ span >
@@ -358,9 +358,6 @@ <h2>例</h2>
358
358
< 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 "> x</ span > < span class ="p "> .</ span > < span class ="n "> extent</ span > < span class ="p "> (</ span > < span class ="mi "> 0</ span > < span class ="p "> );</ span > < span class ="o "> ++</ span > < span class ="n "> j</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
359
359
< span class ="n "> x</ span > < span class ="p "> [</ span > < span class ="n "> j</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> j</ span > < span class ="p "> ;</ span >
360
360
< span class ="p "> }</ span >
361
- < 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 "> y</ span > < span class ="p "> .</ span > < span class ="n "> extent</ 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 >
362
- < span class ="n "> y</ span > < span class ="p "> [</ span > < span class ="n "> i</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="o "> -</ span > < span class ="n "> i</ span > < span class ="p "> ;</ span >
363
- < span class ="p "> }</ span >
364
361
365
362
< span class ="c1 "> // (1)</ span >
366
363
< 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 >
@@ -372,6 +369,10 @@ <h2>例</h2>
372
369
< span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> symmetric_matrix_vector_product</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../execution/execution/execution_policy.html "> std::execution::par</ a > </ span > < span class ="p "> ,</ span > < span class ="n "> A</ span > < span class ="p "> ,</ span > < 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 > < span class ="n "> x</ span > < span class ="p "> ,</ span > < span class ="n "> y</ span > < span class ="p "> );</ span >
373
370
< span class ="n "> print</ span > < span class ="p "> (</ span > < span class ="n "> y</ span > < span class ="p "> ,</ span > < span class ="s "> "y"</ span > < span class ="p "> );</ span >
374
371
372
+ < 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 "> y</ span > < span class ="p "> .</ span > < span class ="n "> extent</ 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 >
373
+ < span class ="n "> y</ span > < span class ="p "> [</ span > < span class ="n "> i</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="o "> -</ span > < span class ="n "> i</ span > < span class ="p "> ;</ span >
374
+ < span class ="p "> }</ span >
375
+
375
376
< span class ="c1 "> // (3)</ span >
376
377
< 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 >
377
378
< span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> linalg</ span > < span class ="o "> ::</ span > < span class ="n "> symmetric_matrix_vector_product</ span > < span class ="p "> (</ span > < span class ="n "> A</ span > < span class ="p "> ,</ span > < 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 > < span class ="n "> x</ span > < span class ="p "> ,</ span > < span class ="n "> y</ span > < span class ="p "> ,</ span > < span class ="n "> z</ span > < span class ="p "> );</ span >
@@ -398,15 +399,15 @@ <h3>出力</h3>
398
399
y[2] = 59
399
400
y[3] = 74
400
401
(3)
401
- z[0] = 28
402
- z[1] = 76
403
- z[2] = 118
404
- z[3] = 148
402
+ z[0] = 14
403
+ z[1] = 37
404
+ z[2] = 57
405
+ z[3] = 71
405
406
(4)
406
- z[0] = 28
407
- z[1] = 76
408
- z[2] = 118
409
- z[3] = 148
407
+ z[0] = 14
408
+ z[1] = 37
409
+ z[2] = 57
410
+ z[3] = 71
410
411
</ code > </ pre > </ p >
411
412
< h2 > バージョン</ h2 >
412
413
< h3 > 言語</ h3 >
0 commit comments