#include #include #define Nmax 11 void MATINV(int n,double a[Nmax][Nmax],int *er); void MASSMAT(double am[Nmax][Nmax]); /*--------------------------------------------------------------------*/ int main() { int n=6; double a[Nmax][Nmax]; int er; int i,j,k; double b[Nmax][Nmax]; double c[Nmax][Nmax]; /* a[1][1]= 0.35355339;a[1][2]=-0.35355339;a[1][3]=0 ;a[1][4]= 0; a[2][1]=-0.35355339;a[2][2]= 1.35355339;a[2][3]=0 ;a[2][4]=-1; a[3][1]= 0 ;a[3][2]= 0 ;a[3][3]=1.35355339;a[3][4]= 0.35355339; a[4][1]= 0 ;a[4][2]=-1 ;a[4][3]=0.35355339;a[4][4]= 1.35355339; */ MASSMAT(a); /*n=6*/ for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ b[i][j]=a[i][j]; } } MATINV(n,a,&er); printf("error=%d\n",er); printf("逆行列\n"); for(i=1;i<=n;i++){ printf("%f %f %f %f %f %f\n",a[i][1],a[i][2],a[i][3],a[i][4],a[i][5],a[i][6]); } for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ c[i][j]=0.0; for(k=1;k<=n;k++){ c[i][j]=c[i][j]+a[i][k]*b[k][j]; } } } printf("検算結果\n"); for(i=1;i<=n;i++){ printf("%f %f %f %f %f %f\n",c[i][1],c[i][2],c[i][3],c[i][4],c[i][5],c[i][6]); } } //------------------------------------------------------------------------------ void MATINV(int n,double a[Nmax][Nmax],int *er) { /*****************************************/ /* 逆行列計算 */ /* 山田嘉昭著:マトリックス法材料力学 */ //****************************************/ int i,j,k,l,l1,irow=0,icol=0,jrow=0,jcol=0; double amax,s,t; double determ=1.0; double factor=1.0e-30; int ipivot[n+1]; double pivot[n+1]; int index[n+1][3]; for(j=1;j<=n;j++){ ipivot[j]=0; } for(i=1;i<=n;i++){ amax=0.0; for(j=1;j<=n;j++){ if(ipivot[j]-1!=0){ for(k=1;k<=n;k++){ if(0