一般に 2 つのベクトルの内積は以下の式で求められます.
上記の式を C言語で実装すると以下のようになります.なお,以下はベクトルを配列で実装しています.
/**
* ベクトルの内積を計算する
* @param[in] vec1 ベクトル1
* @param[in] vec2 ベクトル2
* @param[in] n ベクトルの次元数
* @return vec1 と vec2 の内積
*/
double InnerProduct(double *vec1, double *vec2, int n) {
int i;
double s = 0.0;
for ( i = 0; i < n; i++ ) {
s += vec1[i] * vec2[i];
}
return s;
}
以下に内積を計算するサンプルプログラムを示します.
/* header files */
#include <stdio.h>
#include <stdlib.h>
/* functions */
double InnerProduct(double *, double *, int);
/* main */
int main(void) {
double inner_product;
double vec1[] = {1.0, 2.0, 3.0};
double vec2[] = {2.0, 1.0, 3.0};
/* 内積を求める */
inner_product = InnerProduct(vec1, vec2, 3);
printf("内積: %.2f\n", inner_product);
return EXIT_SUCCESS;
}
/**
* ベクトルの内積を計算する
* @param[in] vec1 ベクトル1
* @param[in] vec2 ベクトル2
* @param[in] n ベクトルの次元数
* @return vec1 と vec2 の内積
*/
double InnerProduct(double *vec1, double *vec2, int n) {
int i;
double s = 0.0;
for ( i = 0; i < n; i++ ) {
s += vec1[i] * vec2[i];
}
return s;
}
サンプルプログラムの実行結果は以下のようになります.
内積: 13.00
たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.
C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります.
オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.
ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.