#include<stdio.h>
/* 行列とベクトルの掛け算 */
main()
{
double a[2][2],x[2],y[2]; 実数配列を宣言
int i,j;
/* 行列に値をいれる(値自身は意味なし) */
a[0][0]=0.5;
a[0][1]=1.0;
a[1][0]=0.8;
a[1][1]=2.0;
/* ベクトルに値をいれる(これも意味のない値) */
x[0]=1.0;
x[1]=2.0;
/* ベクトルyを初期化(値を0に) */
for( i=0; i<=1; ++i){ 配列のすべての要素を0にする
y[i]=0;
}
/* a*xによりyを求める */
for( i=0; i<1; ++i){ 二次元配列なので要素を指定するために
i,jのふたつの変数を使う。
ループも二重になる。
for( j=0; j<=1; ++j){
y[i] += a[i][j]*x[j]; 行列とベクトルの積の計算はいつもこれ。
a[i][j]とx[j]の積をy[i]に足している。
}
}
/* 出力 */
printf("matrix a:\n");
for( i=0; i<=1; ++i){
for( j=0; j<=1; ++j){ 二次元配列を出力したいので二重ループ
printf(" %f",a[i][j]);
}
printf("\n"); 一行出力したら改行
}
printf("vector x:\n");
for( i=0; i<=1; ++i){ こちらは一次元配列なので一重ループ
printf(" %f\n",x[i]);
}
printf("vector y=a*x:\n");
for( i=0; i<=1; ++i){
printf(" %f\n",y[i]);
}
}
|