
1 2 -1
D= 3 0 -2
-1 1 2
の3次正方行列のn乗を計算するプログラムを作成しています。
いろいろと試してみましたがうまくいきません。
どなたか教えていただけるとうれしいです。
よろしくおねがいします。
#include <stdio.h>
int main(void)
{
int a[3][3]={ {-1,2,-1},{3,0,-2},{-1,1,2} };
int b[3][3]={ {-1,2,-1},{3,0,-2},{-1,1,2} };
int s[3][3];
int m,n;
int i,j,k;
printf("[A]^n;n = ");scanf("%d",&n);
for (m=2;m <= n;m++){
for (i=0;i<3;i++){
for (j=0;j<3;j++){
s[i][j] = 0;
for(k=0;k<3;k++){
s[i][j] =s[i][j] + a[i][k] * b[k][j];
}
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
b[i][j]=s[i][j];
}
}
printf("%3d",s[i][j]);
putchar('\n');
}
return (0);
}
No.2ベストアンサー
- 回答日時:
計算方法はあってます。
違っているのは次の2箇所です。
(1) 行列a, bの値設定
(2) 計算結果の表示
> int a[3][3]={ {-1,2,-1},{3,0,-2},{-1,1,2} };
> int b[3][3]={ {-1,2,-1},{3,0,-2},{-1,1,2} };
1行1列目の要素(つまりa[0][0]とb[0][0]の値)が-1になっています。
行列Dの1行1列目の要素は1ですよね。
> printf("%3d",s[i][j]);
> putchar('\n');
この2行だけだとs[3][3]だけを表示して終わってしまいます。
また、この位置で出力してしまうと2乗 ~ n乗の結果が全部表示されてしまいます。
n乗の結果のみを出力したいなら、
この2行を消してreturn文の直前に
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
printf("%3d",s[i][j]);
}
putchar('\n');
}
と打ち込んでみましょう
(ちなみに上のコードは全角空白を含んでいるので、
回答文からこのコードをコピー&ペーストしてしまうと
コンパイルエラーが起きるので注意してください)。
No.4
- 回答日時:
printf("%3d",s[i][j]);
ここ,上の i,j の for 文抜けた後だから,
i=3, j=3 の s[3][3] つまり,
行列の 4,4 成分を表示している.
コンパイルエラーか segmentation faults か意味のない数を表示するか
のどれか
printf("%3d",s[i][j]);
putchar('\n');
の2行を
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%3d",s[i][j]);
}
putchar('\n');
}
に置き換える.
No.3
- 回答日時:
カテゴリー違いです。
そのプログラムでは、n が 2 以上であれば、
return の直前の時点で、s[][] の中に
a[][] の n 乗が正しく求められています。
デバッガ上で s の値を確認すれば判ことです。
表示が上手くいかないとすれば、
数学以外の点に誤りがあります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
行列をべき乗させるプログラム
C言語・C++・C#
-
2の累乗を計算するプログラムを作ったのですが・・・
C言語・C++・C#
-
C言語、行列の積を求めるプログラムについて
C言語・C++・C#
-
4
<math.h>があるのにsqrtが・・・
C言語・C++・C#
-
5
定K形帯域フィルタ
物理学
-
6
尖鋭度とは回路の何の良さですか?
物理学
-
7
C言語でセルオートマトンを作成したい
C言語・C++・C#
-
8
「ユークリッド内積」とは?
数学
-
9
Cで3乗根を求める方法
C言語・C++・C#
-
10
10個出力で改行したいのですが・・・
C言語・C++・C#
-
11
2入力1出力の論理回路は全部で16通り存在する。これらを全てNAND回
数学
-
12
数字の位ごとの値を表示するプログラム
C言語・C++・C#
-
13
init関数の意味
C言語・C++・C#
-
14
任意の4次関数の極大値、極小値を求めるプログラムを書きたい
数学
-
15
雨滴の運動質量が変化する落体の運動で次の問題の式の解き方がわかりません。はじめ静止していた質量
物理学
-
16
強連結判定を行うプログラムについて(C言語)
C言語・C++・C#
-
17
3行3列の行列の和と積の計算方法を教えて下さい。
数学
-
18
セグメントエラー
C言語・C++・C#
-
19
行列の積を関数を使って求める・・?
C言語・C++・C#
-
20
面積
数学
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
「Aに対するBの割合」と「Aに対...
-
5
マイナスからプラスへ転じた時...
-
6
変数とパラメータとは違うもの...
-
7
値差の%計算方法について
-
8
数学のデータの相関の散布図で...
-
9
勾配曲線とは何ですか?
-
10
Wavelet解析におけるGaborのマ...
-
11
20'(角度)の計算がわかりま...
-
12
分散分析における誤差項が負値...
-
13
量化子の入れ子について
-
14
√864/nが自然数になるような自...
-
15
中学生で数学です。 √84nが自然...
-
16
√2の値はなぜ1.414…になるんで...
-
17
「n進法から10進法への変換」
-
18
正弦定理と余弦定理で答が違う?
-
19
数字について
-
20
必要十分条件の求め方
おすすめ情報
公式facebook
公式twitter