列ベクトルの各種演算を関数として以下のように実装する。
/* スカラーの列ベクトルへの代入(初期化) */ 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; } }