最終更新日時(UTC):
が更新

履歴 編集

function template
<linalg>

std::linalg::scale(C++26)

namespace std::linalg {
  template<class Scalar,
           inout-object InOutObj>
  void scale(Scalar alpha,
             InOutObj x);            // (1)

  template<class ExecutionPolicy,
           class Scalar,
           inout-object InOutObj>
  void scale(ExecutionPolicy&& exec,
             Scalar alpha,
             InOutObj x);            // (2)
}

概要

以下のように、ベクトルxalpha倍したものをxに代入する。

$$ \mathbf{x}\leftarrow\alpha\mathbf{x} $$

適格要件

効果

ベクトルxalpha倍する。

  • (1): 逐次実行する。
  • (2): 指定された実行ポリシーに応じて実行する。

戻り値

なし

[注意] 処理系にあるコンパイラで確認していないため、間違っているかもしれません。

#include <cmath>
#include <execution>
#include <iostream>
#include <linalg>
#include <mdspan>
#include <vector>


template <class Vector>
void print(Vector v) {
  for (int i = 0; i < v.extent(0) - 1; ++i) {
    std::cout << v[i] << ", ";
  }
  std::cout << v[v.extent(0) - 1] << std::endl;
}


int main()
{
  constexpr size_t N = 3;

  std::vector<double> a_vec({1, 2, 3});
  std::mdspan a(a_vec.data(), N);

  double alpha = 2.0;

  // (1)
  std::linalg::scale(alpha, a);
  print(a);

  // (2)
  std::linalg::scale(std::execution::par, alpha, a);
  print(a);

  return 0;
}

出力

2, 4, 6
4, 8, 12

バージョン

言語

  • C++26

処理系

関連項目

参照