行ベクトルの各種演算を関数として以下のように実装する。
/* スカラーの行ベクトルへの代入(初期化) */ void WH_Matrix__assign_s_OUT_whRv (double a, int nColumns_b, double OUT__whRv_b[]) /* 入力引数: a はスカラー nColumns_b は行ベクトル OUT__whRv_b の列数 出力引数: OUT__whRv_b は行ベクトル */ { int i; for (i = 0; i < nColumns_b; i++) { OUT__whRv_b[i] = a; } } /* 行ベクトルの行ベクトルへの代入 */ void WH_Matrix__assign_whRv_OUT_whRv (int nColumns_a, double whRv_a[], int nColumns_b, double OUT__whRv_b[]) /* 入力引数: nColumns_a は行ベクトル whRv_a の列数 whRv_a は行ベクトル nColumns_b は行ベクトル OUT__whRv_b の列数 出力引数: OUT__whRv_b は行ベクトルで、whRv_a と同じもの */ { int i; assert(nColumns_a == nColumns_b); for (i = 0; i < nColumns_b; i++) { OUT__whRv_b[i] = whRv_a[i]; } } /* 行ベクトルと行ベクトルとの和 */ void WH_Matrix__whRv_add_whRv_OUT_whRv (int nColumns_a, double whRv_a[], int nColumns_b, double whRv_b[], int nColumns_c, double OUT__whRv_c[]) /* 入力引数: nColumns_a は行ベクトル whRv_a の列数 whRv_a は行ベクトル nColumns_b は行ベクトル whRv_b の列数 whRv_b は行ベクトル nColumns_c は行ベクトル OUT__whRv_c の列数 出力引数: OUT__whRv_c は行ベクトルで、whRv_a + whRv_b */ { int i; assert(nColumns_a == nColumns_c); assert(nColumns_b == nColumns_c); for (i = 0; i < nColumns_c; i++) { OUT__whRv_c[i] = whRv_a[i] + whRv_b[i]; } } /* 行ベクトルと行ベクトルとの差 */ void WH_Matrix__whRv_sub_whRv_OUT_whRv (int nColumns_a, double whRv_a[], int nColumns_b, double whRv_b[], int nColumns_c, double OUT__whRv_c[]) /* 入力引数: nColumns_a は行ベクトル whRv_a の列数 whRv_a は行ベクトル nColumns_b は行ベクトル whRv_b の列数 whRv_b は行ベクトル nColumns_c は行ベクトル OUT__whRv_c の列数 出力引数: OUT__whRv_c は行ベクトルで、whRv_a - whRv_b */ { int i; assert(nColumns_a == nColumns_c); assert(nColumns_b == nColumns_c); for (i = 0; i < nColumns_c; i++) { OUT__whRv_c[i] = whRv_a[i] - whRv_b[i]; } } /* 行ベクトルとスカラーとの積 */ void WH_Matrix__whRv_mul_s_OUT_whRv (int nColumns_a, double whRv_a[], double b, int nColumns_c, double OUT__whRv_c[]) /* 入力引数: nColumns_a は行ベクトル whRv_a の列数 whRv_a は行ベクトル b はスカラー nColumns_c は行ベクトル OUT__whRv_c の列数 出力引数: OUT__whRv_c は行ベクトルで、whRv_a * b */ { int i; assert(nColumns_a == nColumns_c); for (i = 0; i < nColumns_c; i++) { OUT__whRv_c[i] = whRv_a[i] * b; } } /* スカラーと行ベクトルとの積 */ void WH_Matrix__s_mul_whRv_OUT_whRv (double a, int nColumns_b, double whRv_b[], int nColumns_c, double OUT__whRv_c[]) /* 入力引数: a はスカラー nColumns_b は行ベクトル whRv_b の列数 whRv_b は行ベクトル nColumns_c は行ベクトル OUT__whRv_c の列数 出力引数: OUT__whRv_c は行ベクトルで、a * whRv_b */ { int i; assert(nColumns_b == nColumns_c); for (i = 0; i < nColumns_c; i++) { OUT__whRv_c[i] = a * whRv_b[i]; } } /* 行ベクトルをスカラーで割る */ void WH_Matrix__whRv_div_s_OUT_whRv (int nColumns_a, double whRv_a[], double b, int nColumns_c, double OUT__whRv_c[]) /* 入力引数: nColumns_a は行ベクトル whRv_a の列数 whRv_a は行ベクトル b はスカラーで、0であってはならない nColumns_c は行ベクトル OUT__whRv_c の列数 出力引数: OUT__whRv_c は行ベクトルで、whRv_a / b */ { int i; assert(nColumns_a == nColumns_c); for (i = 0; i < nColumns_c; i++) { OUT__whRv_c[i] = whRv_a[i] / b; } }