c言語で行列を使って2元一次方程式を解く問題をやっていて、a=2,b=3,c=5,d=1,e=1,f=3を代入しました。
ところが計算結果が合わず、原因を追求すると、a[0][0]=2を代入しているはずなのに、最終的にはa[0][0]=3に変わってしまっていることが分かりました。どうやら/2×1行列に代入/の部分で変わってしまっているようなのですが、原因は分かりますか?
c
1#include<stdio.h> 2 3int main(void) { 4int i,j; 5int a[2][2], b[2][1]; 6double ai[2][2], ans[2][1]; 7 8/*2×2行列に代入*/ 9for(i=0; i<2; i++) { 10 for(j=0; j<2; j++) { 11 if(i==0 && j==0) { 12 printf("a="); 13 } else if(i==0 && j==1) { 14 printf("b="); 15 } else if(i==1 && j==0) { 16 printf("c="); 17 } else { 18 printf("d="); 19 } 20 scanf("%d", &a[i][j]); 21 } 22} 23/*2x1行列に代入*/ 24for(i=0; i<2; i++) { 25 if(i==0) { 26 printf("e="); 27 } else { 28 printf("f="); 29 } 30 scanf("%d", &b[i][1]); 31} 32printf("a[0][0]=%d\n", a[0][0]); 33/*逆行列を求める*/ 34double s=1.0/(a[0][0]*a[1][1]-a[0][1]*a[1][0]); 35ai[0][0] = s*a[1][1]; 36ai[0][1] = -s*a[0][1]; 37ai[1][0] = -s*a[1][0]; 38ai[1][1] = s*a[0][0]; 39/*答え*/ 40ans[0][0] = ai[0][0]*b[0][0]+ai[0][1]*b[1][0]; 41ans[1][0] = ai[1][0]*b[0][0]+ai[1][1]+b[1][0]; 42 43printf("x=%f , y=%f\n", ans[0][0], ans[1][0]); 44 return 0; 45}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。