next up previous contents
: 行列の基本演算 : 列ベクトルの基本演算 : 列ベクトルの基本演算   目次

実装

列ベクトルの各種演算を関数として以下のように実装する。

/* スカラーの列ベクトルへの代入(初期化) */
void WH_Matrix__assign_s_OUT_whCv
(double a,
 int nRows_b, double OUT__whCv_b[])
/*
  入力引数:
    a はスカラー
    nRows_b は列ベクトル OUT__whCv_b の行数
  出力引数:
    OUT__whCv_b は列ベクトル
*/
{
  int i;

  for (i = 0; i < nRows_b; i++) {
    OUT__whCv_b[i] = a;
  }
}

/* 列ベクトルの列ベクトルへの代入 */
void WH_Matrix__assign_whCv_OUT_whCv
(int nRows_a, double whCv_a[],
 int nRows_b, double OUT__whCv_b[])
/*
  入力引数:
    nRows_a は列ベクトル whCv_a の行数
    whCv_a は列ベクトル
    nRows_b は列ベクトル OUT__whCv_b の行数
  出力引数:
    OUT__whCv_b は列ベクトルで、whCv_a と同じもの
*/
{
  int i;

  assert(nRows_a == nRows_b);

  for (i = 0; i < nRows_b; i++) {
    OUT__whCv_b[i] = whCv_a[i];
  }
}

/* 列ベクトルと列ベクトルとの和 */
void WH_Matrix__whCv_add_whCv_OUT_whCv
(int nRows_a, double whCv_a[],
 int nRows_b, double whCv_b[],
 int nRows_c, double OUT__whCv_c[])
/*
  入力引数:
    nRows_a は列ベクトル whCv_a の行数
    whCv_a は列ベクトル
    nRows_b は列ベクトル whCv_b の行数
    whCv_b は列ベクトル
    nRows_c は列ベクトル OUT__whCv_c の行数
  出力引数:
    OUT__whCv_c は列ベクトルで、whCv_a + whCv_b
*/
{
  int i;

  assert(nRows_a == nRows_c);
  assert(nRows_b == nRows_c);

  for (i = 0; i < nRows_c; i++) {
    OUT__whCv_c[i] = whCv_a[i] + whCv_b[i];
  }
}

/* 列ベクトルと列ベクトルとの差 */
void WH_Matrix__whCv_sub_whCv_OUT_whCv
(int nRows_a, double whCv_a[],
 int nRows_b, double whCv_b[],
 int nRows_c, double OUT__whCv_c[])
/*
  入力引数:
    nRows_a は列ベクトル whCv_a の行数
    whCv_a は列ベクトル
    nRows_b は列ベクトル whCv_b の行数
    whCv_b は列ベクトル
    nRows_c は列ベクトル OUT__whCv_c の行数
  出力引数:
    OUT__whCv_c は列ベクトルで、whCv_a - whCv_b
*/
{
  int i;

  assert(nRows_a == nRows_c);
  assert(nRows_b == nRows_c);

  for (i = 0; i < nRows_c; i++) {
    OUT__whCv_c[i] = whCv_a[i] - whCv_b[i];
  }
}

/* 列ベクトルとスカラーとの積 */
void WH_Matrix__whCv_mul_s_OUT_whCv
(int nRows_a, double whCv_a[],
 double b,
 int nRows_c, double OUT__whCv_c[])
/*
  入力引数:
    nRows_a は列ベクトル whCv_a の行数
    whCv_a は列ベクトル
    b はスカラー
    nRows_c は列ベクトル OUT__whCv_c の行数
  出力引数:
    OUT__whCv_c は列ベクトルで、whCv_a * b
*/
{
  int i;

  assert(nRows_a == nRows_c);

  for (i = 0; i < nRows_c; i++) {
    OUT__whCv_c[i] = whCv_a[i] * b;
  }
}

/* スカラーと列ベクトルとの積 */
void WH_Matrix__s_mul_whCv_OUT_whCv
(double a,
 int nRows_b, double whCv_b[],
 int nRows_c, double OUT__whCv_c[])
/*
  入力引数:
    a はスカラー
    nRows_b は列ベクトル whCv_b の行数
    whCv_b は列ベクトル
    nRows_c は列ベクトル OUT__whCv_c の行数
  出力引数:
    OUT__whCv_c は列ベクトルで、a * whCv_b
*/
{
  int i;

  assert(nRows_b == nRows_c);

  for (i = 0; i < nRows_c; i++) {
    OUT__whCv_c[i] = a * whCv_b[i];
  }
}

/* 列ベクトルをスカラーで割る */
void WH_Matrix__whCv_div_s_OUT_whCv
(int nRows_a, double whCv_a[],
 double b,
 int nRows_c, double OUT__whCv_c[])
/*
  入力引数:
    nRows_a は列ベクトル whCv_a の行数
    whCv_a は列ベクトル
    b はスカラーで、0であってはならない
    nRows_c は列ベクトル OUT__whCv_c の行数
  出力引数:
    OUT__whCv_c は列ベクトルで、whCv_a / b
*/
{
  int i;

  assert(nRows_a == nRows_c);

  for (i = 0; i < nRows_c; i++) {
    OUT__whCv_c[i] = whCv_a[i] / b;
  }
}



Hiroshi KAWAI 平成15年8月11日