|
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": [], "page_id": ["reference", "linalg", "apply_givens_rotation"]}"> |
| 87 | +<header data-kunai-mdinfo="{"meta": {"header": ["linalg"], "id-type": ["function template"], "namespace": ["std::linalg"], "cpp": ["cpp26"]}, "sources": [{"id": "3302ca2002f03d960c6db34a0383400b7354a4b2", "source": "#include <cmath>\n#include <complex>\n#include <initializer_list>\n#include <execution>\n#include <iostream>\n#include <linalg>\n#include <mdspan>\n#include <vector>\n\ntemplate <class Vector>\nvoid print(Vector v) {\n for (int i = 0; i < v.extent(0) - 1; ++i) {\n std::cout << v[i] << \", \";\n }\n std::cout << v[v.extent(0) - 1] << std::endl;\n}\n\nint main()\n{\n constexpr size_t N = 2;\n\n using Complex = std::complex<double>;\n\n {\n std::initializer_list<double> a_coeff = {1, std::sqrt(3.0)};\n std::initializer_list<double> b_coeff = {std::sqrt(3.0), -0.5};\n\n std::vector<double> a_vec(a_coeff);\n std::mdspan a(a_vec.data(), N);\n\n std::vector<double> b_vec(b_coeff);\n std::mdspan b(b_vec.data(), N);\n\n double c = 0.5;\n double s = -std::sqrt(3.0) / 2;\n\n // (1)\n std::linalg::apply_givens_rotation(a, b, c, s);\n print(a);\n print(b);\n\n // (2)\n // a\u3068b\u3092\u521d\u671f\u5316\n a_vec = a_coeff;\n b_vec = b_coeff;\n std::linalg::apply_givens_rotation(std::execution::par, a, b, c, s);\n print(a);\n print(b);\n }\n\n {\n std::initializer_list<Complex> a_coeff = {Complex{1, 0}, Complex{std::sqrt(3.0), 0}};\n std::initializer_list<Complex> b_coeff = {Complex{0, std::sqrt(3.0)}, Complex{0, -0.5}};\n\n std::vector<Complex> a_vec(a_coeff);\n std::mdspan a(a_vec.data(), N);\n\n std::vector<Complex> b_vec(b_coeff);\n std::mdspan b(b_vec.data(), N);\n\n double c = 0.5;\n Complex s = Complex{0, -std::sqrt(3.0) / 2};\n\n // (3)\n std::linalg::apply_givens_rotation(a, b, c, s);\n print(a);\n print(b);\n\n // (4)\n // a\u3068b\u3092\u521d\u671f\u5316\n a_vec = a_coeff;\n b_vec = b_coeff;\n std::linalg::apply_givens_rotation(std::execution::par, a, b, c, s);\n print(a);\n print(b);\n }\n\n return 0;\n}\n"}], "page_id": ["reference", "linalg", "apply_givens_rotation"]}"> |
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-11T10:10:41"> |
208 |
| - 2024年07月11日 10時10分41秒 |
| 207 | + <span itemprop="datePublished" content="2024-07-25T12:07:33"> |
| 208 | + 2024年07月25日 12時07分33秒 |
209 | 209 | </span>
|
210 | 210 | <br/>
|
211 | 211 | <span itemprop="author" itemscope itemtype="http://schema.org/Person">
|
212 |
| - <span itemprop="name">yoh</span> |
| 212 | + <span itemprop="name">Yuya Asano</span> |
213 | 213 | </span>
|
214 | 214 | が更新
|
215 | 215 | </small></p>
|
@@ -314,7 +314,102 @@ <h2>効果</h2>
|
314 | 314 | <h2>戻り値</h2>
|
315 | 315 | <p>なし</p>
|
316 | 316 | <h2>例</h2>
|
| 317 | +<p><strong>[注意] 処理系にあるコンパイラで確認していないため、間違っているかもしれません。</strong></p> |
| 318 | +<p><div class="yata" id="3302ca2002f03d960c6db34a0383400b7354a4b2"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../cmath.html"><cmath></a></span><span class="cp"></span> |
| 319 | +<span class="cp">#include</span> <span class="cpf"><a href="../complex.html"><complex></a></span><span class="cp"></span> |
| 320 | +<span class="cp">#include</span> <span class="cpf"><a href="../initializer_list.html"><initializer_list></a></span><span class="cp"></span> |
| 321 | +<span class="cp">#include</span> <span class="cpf"><a href="../execution.html"><execution></a></span><span class="cp"></span> |
| 322 | +<span class="cp">#include</span> <span class="cpf"><a href="../iostream.html"><iostream></a></span><span class="cp"></span> |
| 323 | +<span class="cp">#include</span> <span class="cpf"><a href="../linalg.html"><linalg></a></span><span class="cp"></span> |
| 324 | +<span class="cp">#include</span> <span class="cpf"><a href="../mdspan.html"><mdspan></a></span><span class="cp"></span> |
| 325 | +<span class="cp">#include</span> <span class="cpf"><a href="../vector.html"><vector></a></span><span class="cp"></span> |
| 326 | + |
| 327 | +<span class="k">template</span> <span class="o"><</span><span class="k">class</span> <span class="nc">Vector</span><span class="o">></span> |
| 328 | +<span class="kt">void</span> <span class="n">print</span><span class="p">(</span><span class="n">Vector</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span> |
| 329 | + <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">v</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="mi">1</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span> |
| 330 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="n">v</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span> |
| 331 | + <span class="p">}</span> |
| 332 | + <span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o"><<</span> <span class="n">v</span><span class="p">[</span><span class="n">v</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="mi">1</span><span class="p">]</span> <span class="o"><<</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span> |
| 333 | +<span class="p">}</span> |
| 334 | + |
| 335 | +<span class="kt">int</span> <span class="n">main</span><span class="p">()</span> |
| 336 | +<span class="p">{</span> |
| 337 | + <span class="k">constexpr</span> <span class="kt">size_t</span> <span class="n">N</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span> |
| 338 | + |
| 339 | + <span class="k">using</span> <span class="n">Complex</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">complex</span><span class="o"><</span><span class="kt">double</span><span class="o">></span><span class="p">;</span> |
| 340 | + |
| 341 | + <span class="p">{</span> |
| 342 | + <span class="n"><a href="../initializer_list/initializer_list.html">std::initializer_list</a></span><span class="o"><</span><span class="kt">double</span><span class="o">></span> <span class="n">a_coeff</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">sqrt</span><span class="p">(</span><span class="mf">3.0</span><span class="p">)};</span> |
| 343 | + <span class="n"><a href="../initializer_list/initializer_list.html">std::initializer_list</a></span><span class="o"><</span><span class="kt">double</span><span class="o">></span> <span class="n">b_coeff</span> <span class="o">=</span> <span class="p">{</span><span class="n">std</span><span class="o">::</span><span class="n">sqrt</span><span class="p">(</span><span class="mf">3.0</span><span class="p">),</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">};</span> |
| 344 | + |
| 345 | + <span class="n"><a href="../vector/vector.html">std::vector</a></span><span class="o"><</span><span class="kt">double</span><span class="o">></span> <span class="n">a_vec</span><span class="p">(</span><span class="n">a_coeff</span><span class="p">);</span> |
| 346 | + <span class="n"><a href="../mdspan/mdspan.html">std::mdspan</a></span> <span class="nf">a</span><span class="p">(</span><span class="n">a_vec</span><span class="p">.</span><span class="n">data</span><span class="p">(),</span> <span class="n">N</span><span class="p">);</span> |
| 347 | + |
| 348 | + <span class="n"><a href="../vector/vector.html">std::vector</a></span><span class="o"><</span><span class="kt">double</span><span class="o">></span> <span class="n">b_vec</span><span class="p">(</span><span class="n">b_coeff</span><span class="p">);</span> |
| 349 | + <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> |
| 350 | + |
| 351 | + <span class="kt">double</span> <span class="n">c</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">;</span> |
| 352 | + <span class="kt">double</span> <span class="n">s</span> <span class="o">=</span> <span class="o">-</span><span class="n">std</span><span class="o">::</span><span class="n">sqrt</span><span class="p">(</span><span class="mf">3.0</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">;</span> |
| 353 | + |
| 354 | + <span class="c1">// (1)</span> |
| 355 | + <span class="n"><span style="color:#ff0000">std::linalg::apply_givens_rotation</span></span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">s</span><span class="p">);</span> |
| 356 | + <span class="n">print</span><span class="p">(</span><span class="n">a</span><span class="p">);</span> |
| 357 | + <span class="n">print</span><span class="p">(</span><span class="n">b</span><span class="p">);</span> |
| 358 | + |
| 359 | + <span class="c1">// (2)</span> |
| 360 | + <span class="c1">// aとbを初期化</span> |
| 361 | + <span class="n">a_vec</span> <span class="o">=</span> <span class="n">a_coeff</span><span class="p">;</span> |
| 362 | + <span class="n">b_vec</span> <span class="o">=</span> <span class="n">b_coeff</span><span class="p">;</span> |
| 363 | + <span class="n"><span style="color:#ff0000">std::linalg::apply_givens_rotation</span></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">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">s</span><span class="p">);</span> |
| 364 | + <span class="n">print</span><span class="p">(</span><span class="n">a</span><span class="p">);</span> |
| 365 | + <span class="n">print</span><span class="p">(</span><span class="n">b</span><span class="p">);</span> |
| 366 | + <span class="p">}</span> |
| 367 | + |
| 368 | + <span class="p">{</span> |
| 369 | + <span class="n"><a href="../initializer_list/initializer_list.html">std::initializer_list</a></span><span class="o"><</span><span class="n">Complex</span><span class="o">></span> <span class="n">a_coeff</span> <span class="o">=</span> <span class="p">{</span><span class="n">Complex</span><span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">},</span> <span class="n">Complex</span><span class="p">{</span><span class="n">std</span><span class="o">::</span><span class="n">sqrt</span><span class="p">(</span><span class="mf">3.0</span><span class="p">),</span> <span class="mi">0</span><span class="p">}};</span> |
| 370 | + <span class="n"><a href="../initializer_list/initializer_list.html">std::initializer_list</a></span><span class="o"><</span><span class="n">Complex</span><span class="o">></span> <span class="n">b_coeff</span> <span class="o">=</span> <span class="p">{</span><span class="n">Complex</span><span class="p">{</span><span class="mi">0</span><span class="p">,</span> <span class="n">std</span><span class="o">::</span><span class="n">sqrt</span><span class="p">(</span><span class="mf">3.0</span><span class="p">)},</span> <span class="n">Complex</span><span class="p">{</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">}};</span> |
| 371 | + |
| 372 | + <span class="n"><a href="../vector/vector.html">std::vector</a></span><span class="o"><</span><span class="n">Complex</span><span class="o">></span> <span class="n">a_vec</span><span class="p">(</span><span class="n">a_coeff</span><span class="p">);</span> |
| 373 | + <span class="n"><a href="../mdspan/mdspan.html">std::mdspan</a></span> <span class="nf">a</span><span class="p">(</span><span class="n">a_vec</span><span class="p">.</span><span class="n">data</span><span class="p">(),</span> <span class="n">N</span><span class="p">);</span> |
| 374 | + |
| 375 | + <span class="n"><a href="../vector/vector.html">std::vector</a></span><span class="o"><</span><span class="n">Complex</span><span class="o">></span> <span class="n">b_vec</span><span class="p">(</span><span class="n">b_coeff</span><span class="p">);</span> |
| 376 | + <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> |
| 377 | + |
| 378 | + <span class="kt">double</span> <span class="n">c</span> <span class="o">=</span> <span class="mf">0.5</span><span class="p">;</span> |
| 379 | + <span class="n">Complex</span> <span class="n">s</span> <span class="o">=</span> <span class="n">Complex</span><span class="p">{</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="n">std</span><span class="o">::</span><span class="n">sqrt</span><span class="p">(</span><span class="mf">3.0</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">};</span> |
| 380 | + |
| 381 | + <span class="c1">// (3)</span> |
| 382 | + <span class="n"><span style="color:#ff0000">std::linalg::apply_givens_rotation</span></span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">s</span><span class="p">);</span> |
| 383 | + <span class="n">print</span><span class="p">(</span><span class="n">a</span><span class="p">);</span> |
| 384 | + <span class="n">print</span><span class="p">(</span><span class="n">b</span><span class="p">);</span> |
| 385 | + |
| 386 | + <span class="c1">// (4)</span> |
| 387 | + <span class="c1">// aとbを初期化</span> |
| 388 | + <span class="n">a_vec</span> <span class="o">=</span> <span class="n">a_coeff</span><span class="p">;</span> |
| 389 | + <span class="n">b_vec</span> <span class="o">=</span> <span class="n">b_coeff</span><span class="p">;</span> |
| 390 | + <span class="n"><span style="color:#ff0000">std::linalg::apply_givens_rotation</span></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">b</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">s</span><span class="p">);</span> |
| 391 | + <span class="n">print</span><span class="p">(</span><span class="n">a</span><span class="p">);</span> |
| 392 | + <span class="n">print</span><span class="p">(</span><span class="n">b</span><span class="p">);</span> |
| 393 | + <span class="p">}</span> |
| 394 | + |
| 395 | + <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> |
| 396 | +<span class="p">}</span> |
| 397 | +</code></pre></div> |
| 398 | +</div></p> |
317 | 399 | <h3>出力</h3>
|
| 400 | +<p><pre><code>(1) |
| 401 | +1, 0 |
| 402 | +0, -1 |
| 403 | +(2) |
| 404 | +1, 0 |
| 405 | +0, -1 |
| 406 | +(3) |
| 407 | +(1,0), (0,0) |
| 408 | +(0,0), (0,-1) |
| 409 | +(4) |
| 410 | +(1,0), (0,0) |
| 411 | +(0,0), (0,-1) |
| 412 | +</code></pre></p> |
318 | 413 | <h2>バージョン</h2>
|
319 | 414 | <h3>言語</h3>
|
320 | 415 | <ul>
|
|
0 commit comments