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