行ベクトルと列ベクトルの積演算を関数として以下のように実装する。
/* 行ベクトルと列ベクトルの積 */ void WH_Matrix__whRv_mul_whCv_OUT_s (int nColumns_a, double whRv_a[], int nRows_b, double whCv_b[], double *OUT__c) /* 入力引数: nColumns_a は行ベクトル whRv_a の列数 whRv_a は行ベクトル nRows_b は列ベクトル whCv_b の行数 whCv_b は列ベクトル 出力引数: OUT__cはスカラーで、whRv_a と whCv_b の積 */ { int i; assert(nColumns_a == nRows_b); *OUT__c = 0.0; for (i = 0; i < nColumns_a; i++) { *OUT__c += whRv_a[i] * whCv_b[i]; } }
列ベクトルの転置と列ベクトルの積演算を関数として以下のように実装する。
/* 列ベクトルの転置と列ベクトルの積 */ void WH_Matrix__whTrans_whCv_mul_whCv_OUT_s (int nRows_a, double whCv_a[], int nRows_b, double whCv_b[], double *OUT__c) /* 入力引数: nRows_a は行ベクトル whCv_a の行数 whCv_a は行ベクトル nRows_b は列ベクトル whCv_b の行数 whCv_b は列ベクトル 出力引数: OUT__cはスカラーで、whCv_a の転置と whCv_b の積 */ { int i; assert(nRows_a == nRows_b); *OUT__c = 0.0; for (i = 0; i < nRows_a; i++) { *OUT__c += whCv_a[i] * whCv_b[i]; } }