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