160 likes | 216 Views
第 3 回小テスト 解説. プログラム の構成. 01: #include <stdio.h> 02: #define N 3 03: 04: void main(void){ 05: double a[N][N+1]={{6.0,7.0,6.0,5.0}, 06: {1.0,1.0,0.0,0.0}, 07: {2.0,3.0,3.0,2.0}}; 08: int i,j,k; 09: double x[N]; 10: 11: for(k=0;k<N;k++){
E N D
プログラムの構成 01: #include <stdio.h> 02: #define N 3 03: 04: void main(void){ 05: double a[N][N+1]={{6.0,7.0,6.0,5.0}, 06: {1.0,1.0,0.0,0.0}, 07: {2.0,3.0,3.0,2.0}}; 08: int i,j,k; 09: double x[N]; 10: 11: for(k=0;k<N;k++){ 12: for(j=k+1;j<N+1;j++) 13: a[k][j]=a[k][j]/a[k][k]; 14: a[k][k]=1; 15: for(i=k+1;i<N;i++){ 16: for(j=k+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][k]*a[k][j]; 18: a[i][k]=0; 19: } 20: } 21: for(i=N-1;i>=0;i--){ 22: x[i]=a[i][N]; 23: for(j=N-1;j>i;j--) 24: x[i]=x[i]-a[i][j]*x[j]; 25: } 26: } 問1 ガウスの消去法 問2 代入法により 解を求める
行列の確認 05: double a[N][N+1]={{6.0,7.0,6.0,5.0}, 06: {1.0,1.0,0.0,0.0}, 07: {2.0,3.0,3.0,2.0}}; a=
問1解説 (1) k=0 のとき 11: for(k=0;k<N;k++){ 12: for(j=k+1;j<N+1;j++) 13: a[k][j]=a[k][j]/a[k][k]; 14: a[k][k]=1; 15: for(i=k+1;i<N;i++){ 16: for(j=k+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][k]*a[k][j]; 18: a[i][k]=0; 19: } 20: } 12: for(j=0+1;j<N+1;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=0+1;i<N;i++){ 16: for(j=0+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 12: for(j=1;j<4;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=1;i<3;i++){ 16: for(j=1;j<4;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: }
問1解説 (2) k=0 のとき j=1のとき j=2のとき j=3のとき 12: for(j=0+1;j<N+1;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=0+1;i<N;i++){ 16: for(j=0+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 12: for(j=1;j<4;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=1;i<3;i++){ 16: for(j=1;j<4;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 13: a[0][2]=a[0][2]/a[0][0]; 13: a[0][3]=a[0][3]/a[0][0]; 13: a[0][1]=a[0][1]/a[0][0]; a[0][3]= 5.0 / 6.0 a[0][2]= 6.0 / 6.0 a[0][1]= 7.0 / 6.0 a= a= a= a=
問1解説 (3) k=0 のとき 12: for(j=0+1;j<N+1;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=0+1;i<N;i++){ 16: for(j=0+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 12: for(j=1;j<4;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=1;i<3;i++){ 16: for(j=1;j<4;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } a= a=
問1解説 (4) k=0 のとき i=1のとき j=1のとき j=3のとき j=2のとき 12: for(j=0+1;j<N+1;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=0+1;i<N;i++){ 16: for(j=0+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 12: for(j=1;j<4;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=1;i<3;i++){ 16: for(j=1;j<4;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 17: a[1][2]=a[1][2]-a[1][0]*a[0][2]; 17: a[1][1]=a[1][1]-a[1][0]*a[0][1]; 17: a[1][3]=a[1][3]-a[1][0]*a[0][3]; a[1][2]= 0.0 - 1.0 * 1.0 = -1 a[1][1]= 1.0 - 1.0 * 7/6 = -1/6 a[1][3]= 0.0 - 1.0 * 5/6 = -5/6 a= a= a= a=
問1解説 (5) k=0 のとき i=1のとき 12: for(j=0+1;j<N+1;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=0+1;i<N;i++){ 16: for(j=0+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 12: for(j=1;j<4;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=1;i<3;i++){ 16: for(j=1;j<4;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } a= a=
問1解説 (6) k=0 のとき i=2のとき j=1のとき j=1のとき j=3のとき j=2のとき j=2のとき 12: for(j=1;j<4;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=1;i<3;i++){ 16: for(j=1;j<4;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 12: for(j=0+1;j<N+1;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=0+1;i<N;i++){ 16: for(j=0+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 17: a[2][3]=a[2][3]-a[2][0]*a[0][3]; 17: a[2][1]=a[2][1]-a[2][0]*a[0][1]; 17: a[2][2]=a[2][2]-a[2][0]*a[0][2]; a[2][2]= 3.0 - 2.0 * 1.0 = 1.0 a[2][1]= 3.0 - 2.0 * 7/6 = 2/3 a[2][3]= 2.0 - 2.0 * 5/6 = 1/3 a= a= a=
問1解説 (7) k=0 のとき i=1のとき 12: for(j=0+1;j<N+1;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=0+1;i<N;i++){ 16: for(j=0+1;j<N+1;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } 12: for(j=1;j<4;j++) 13: a[0][j]=a[0][j]/a[0][0]; 14: a[0][0]=1; 15: for(i=1;i<3;i++){ 16: for(j=1;j<4;j++) 17: a[i][j]=a[i][j]-a[i][0]*a[0][j]; 18: a[i][0]=0; 19: } a= a=
問1解説 (8) 同様にして k=1 のとき 12: for(j=2;j<4;j++) 13: a[1][j]=a[1][j]/a[1][1]; 14: a[1][1]=1; 15: for(i=2;i<3;i++){ 16: for(j=2;j<4;j++) 17: a[i][j]=a[i][j]-a[i][1]*a[1][j]; 18: a[i][1]=0; 19: } a= a= a= a= a= k=1のときは ここ以外は無視してよい ループは1回のみ
問1解説 (9) 同様にして k=2 のとき 12: for(j=3;j<4;j++) 13: a[2][j]=a[2][j]/a[2][2]; 14: a[2][2]=1; 15: for(i=3;i<3;i++){ 16: for(j=3;j<4;j++) 17: a[i][j]=a[i][j]-a[i][2]*a[2][j]; 18: a[i][2]=0; 19: } a= a= a= k=2のときは ここ以外は無視してよい ガウス消去法 計算終了 ループなし
問2解説 (1) i=2のとき 21: for(i=3;i>=0;i--){ 22: x[i]=a[i][3]; 23: for(j=2;j>i;j--) 24: x[i]=x[i]-a[i][j]*x[j]; 25: } 22: x[2]=a[2][3]; x[2]= 1 実行されない 問1の結果より a=
問2解説 (2) i=1のとき 21: for(i=2;i>=0;i--){ 22: x[i]=a[i][3]; 23: for(j=2;j>i;j--) 24: x[i]=x[i]-a[i][j]*x[j]; 25: } 22: x[1]=a[1][3]; x[1]= 5 j=2のとき 問1の結果より 24: x[1]=x[1]-a[1][2]*x[2]; a= x[1]= 5 – 6 * 1 = -1
問2解説 (3) i=0のとき 21: for(i=2;i>=0;i--){ 22: x[i]=a[i][3]; 23: for(j=2;j>i;j--) 24: x[i]=x[i]-a[i][j]*x[j]; 25: } 22: x[0]=a[0][3]; x[0]= 5/6 j=2のとき j=1のとき 問1の結果より 24: x[0]=x[0]-a[0][2]*x[2]; 24: x[0]=x[0]-a[0][1]*x[1]; a= x[0]= 5/6 – 1 * 1 = -1/6 x[0]= -1/6 – 7/6 * -1 = 1
問2解説 (4) よって上式の解は x=1,y=-1,z=1 と求められる.