Matrices & Determinants 行列の積と行列式をc言語で計算 S. Kusafusa 行列式の計算 Determinant (3 x 3 行列式の計算) 3x 3det関数 (4x 4 行列式の計算) 4 x 4 det関数 6 EXCELによる 4 x 4 行列式の計算 A B C D 1 1 2 3 -1 2 0 1 -2 5 3 2 3 0 2 4 -2 2 4 1 = MDETERM(A1:D4) = 50 行列式をC言語で解いてみよう #include <stdio.h> int main(void) { int a[3][3],i,j; int determinant=0; printf("Enter the 9 elements of matrix: "); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); printf("\nThe First matrix is\n"); for(i=0;i<3;i++){ printf("\n"); for(j=0;j<3;j++) printf("%d\t",a[i][j]); } for(i=0;i<3;i++) determinant = determinant + (a[0][i]*(a[1][(i+1)%3]*a[2][(i+2)%3] - a[1][(i+2)%3]*a[2][(i+1)%3])); printf("\nDeterminant of matrix is: %d",determinant); return 0; } 3 x 3 Determinant 行列の積と 逆行列式の計算 行列の積をC言語で解いてみよう #include <stdio.h> main() { int i, j, matrixA[3][3], matrixB[3][3], sum[3][3]; //行列Aの入力 printf("Input of matrixA \n"); for(i=0;i<3;i++) { printf(" row %d: ",i+1); scanf("%d %d %d",&matrixA[i][0], &matrixA[i][1], &matrixA[i][2]); } //行列Bの入力 printf("Input of matrixB \n"); for(i=0;i<3;i++) { printf(" row %d: ",i+1); scanf("%d %d %d",&matrixB[i][0], &matrixB[i][1], &matrixB[i][2]); } //行列の積の計算 for(i=0;i < 3;i++) { for(j=0;j < 3;j++) sum[i][j] = matrixA[i][0]*matrixB[0][j] + matrixA[i][1]*matrixB[1][j] + matrixA[i][2]*matrixB[2][j]; } //行列の出力 printf("Product AB :\n"); for(i=0;i < 3;i++) { for(j=0;j < 3;j++) printf("%5d",sum[i][j]); printf("\n"); } } 行列の積 #include <stdio.h> #define N 3 void matrixmultiply(double a[N][N],double b[N][N],double c[N][N]); int main() { int i,j; double A[N][N],B[N][N],C[N][N]; //計算を行う行列の値を格納する。 for(i=0;i<N;i++) { for(j=0;j<N;j++) { A[i][j]=B[i][j]=i+j; C[i][j]=0.0; } } matrixmultiply(A,B,C); //関数を呼び出し行列の掛け算を行う。 //結果を表示する。 for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%f ",C[i][j]); } printf("\n"); } return 0; } //掛け算を行う行列2つと、結果を入れる行列を引数として受け取る。 void matrixmultiply(double a[N][N],double b[N][N],double c[N][N]) { int i,j,k; //受け取った2つの行列の掛け算を行う。 for(i=0;i<N;i++) { for(j=0;j<N;j++) { for(k=0;k<N;k++) { c[i][j]+=a[i][k]*b[k][j]; } } } } 結果は 5.000000 8.000000 11.000000 8.000000 14.000000 20.000000 11.000000 20.000000 29.000000 逆行列 det A = 0 を除く #include <iostream> #include <math.h> using namespace std; 逆行列式の計算 int main() { double a[4][4]={{1,2,0,-1},{-1,1,2,0},{2,0,1,1},{1,-2,-1,1}}; //入力用の配列 double inv_a[4][4]; //ここに逆行列が入る double buf; //一時的なデータを蓄える int i,j,k; //カウンタ int n=4; //配列の次数 //単位行列を作る for(i=0;i<n;i++){ for(j=0;j<n;j++){ inv_a[i][j]=(i==j)?1.0:0.0; } } //掃き出し法 for(i=0;i<n;i++){ buf=1/a[i][i]; for(j=0;j<n;j++){ a[i][j]*=buf; inv_a[i][j]*=buf; } for(j=0;j<n;j++){ if(i!=j){ buf=a[j][i]; for(k=0;k<n;k++){ a[j][k]-=a[i][k]*buf; inv_a[j][k]=inv_a[i][k]*buf; } } } } //逆行列を出力 for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf(" %f",inv_a[i][j]); } printf("\n"); } } /* 出力 2.000000 2.000000 -1.000000 3.000000 -4.000000 -5.000000 3.000000 -7.000000 3.000000 4.000000 -2.000000 5.000000 -7.000000 -8.000000 5.000000 -11.000000 */ 逆行列式の計算 数学体験塾 問い合わせ S. Kusafusa [email protected]
© Copyright 2024 ExpyDoc