C言語関係掲示板

過去ログ

No.497.行列 N乗の掛け算

[戻る] [ホームページ]
No.3680

行列 N乗の掛け算
投稿者---ジャン(2002/12/02 16:44:58)


このプログラムを少し変えて
Nをキーボードから入力して、N乗の掛け算ができるようにしたいのですが・・・
自分で考えてもまったくわかりませんでした・・・教えてください。
#include <stdio.h>
#include <math.h>

void printC(int d);
void multiAB(int d);

int matA[2][2]={0,1,1,1};
int matB[2][2]={0,1,1,1};
int matC[2][2];
void main(void)
{
int dim=2,


multiAB(dim);
printC(dim);
}
void multiAB(int d)
{
int i,j,k;

for(i=0;i<d;i++)
{
for(j=0;j<d;j++)
{
matC[i][j]=0;
for(k=0;k<d;k++)
{
matC[i][j] += matA[i][k]*matB[k][j];
}
}
}
}
void printC(int d)
{
int i,j;
for(i=0;i<d;i++)
{
for(j=0;j<d;j++)
{
printf("%8d",matC[i][j]);
}
printf("\n");
}
printf("\n");
}

No.3682

Re:行列 N乗の掛け算
投稿者---こん!(2002/12/02 18:00:08)


>このプログラムを少し変えて
>Nをキーボードから入力して、N乗の掛け算ができるようにしたいのですが・・・
>自分で考えてもまったくわかりませんでした・・・教えてください。

http://www9.plala.or.jp/sgwr-t/c/sec05.html#s5-3

せっかくこんなに恵まれたHPにいるのに・・・

こん!<=^・^=>

No.3683

Re:行列 N乗の掛け算
投稿者---ジャン(2002/12/02 18:08:03)


scanfを使って入力するのは理解できるのですが
入力したnの数をどうやって行列に結びつけるかがわかりません・・・
駄文ですいません

No.3684

Re:行列 N乗の掛け算
投稿者---こん!(2002/12/02 19:44:07)


>scanfを使って入力するのは理解できるのですが
>入力したnの数をどうやって行列に結びつけるかがわかりません・・・

 数学苦手だからパスしたいところだけれど((((((^_^;)入力されたnの値で配列
のサイズを計算してその分mallocかけるってのは?intの配列を作りたいなら
n*n*sizeof(int)って感じ。確保出来たエリアにテーブル値をセットしてから後
は上げられれている函数をそのまま実行すればいいのでは?

当然free()もお忘れなく・・・

しかしn乗ってなんか函数なかったっけ?

ん?pow()じゃ駄目?

はずしたらごめん。m(__)m

こん!<=^・^=>

No.3693

Re:行列 N乗の掛け算
投稿者---ともじ(2002/12/02 21:34:32)


こんばんは。
このプログラムは、multiABでmatA×matBで
[0 1]    [0 1]    [1 1]
|   |  × |   | = |   |
[1 1]      [1 1]    [1 2]
の計算をし、これをmatCに代入していますね。
つまり、matCは
[0 1]
|   | の2乗ですね。
[1 1] 

3乗ですと、
[1 1]    [0 1]    [1 2]
|   |  × |   | = |   |
[1 2]      [1 1]    [2 3]
これは、matC×matBですね。

これをmultiABで行わせるには、matCをmatAにコピーしてから
matA×matBを計算すればよいですね。

まとめると、n乗の計算は、ループでmultiABを繰返し呼び、
呼ぶたびにmatCをmatAにコピーすればよいことになります。