📄 1.c
字号:
/*二质量浮筏振动频率计算(98.6),以及对于不同质量比,阻尼比
和干扰激励频率时的隔振效果计算,有数据压缩防溢出功能(98.4)
对每个弹性支承均求旋转变换矩阵,可用于辐射式布置(98.4)*/
/*矩阵相加*/
void MATADD(double A[][6],double B[][6],double (*C)[6],int M,int N)
{ int I,J;
for(I=0;I<M;I++)
for(J=0;J<N;J++)
*(*(C+I)+J)=A[I][J]+B[I][J];
}
void MATMPY(double A[][6],double B[][6],double (*C)[6],int M,int N,int R8) /*矩阵相乘*/
{ int I,J,K;
for(I=0;I<M;I++)
for(J=0;J<R8;J++)
{
**C=0;
for(K=0;K<N;K++)
*(*(C+I)+J)=*(*(C+I)+J)+A[I][K]*B[K][J];
}
}
void ZMATX(double (*A)[6],int N) /*矩阵转置*/
{ int I,J,L,KU1;
double W1;
KU1=N-1;
for(I=0;I<KU1;I++)
{
L=I+1;
for(J=L;J<N;J++)
{
W1=*(*(A+I)+J);
*(*(A+I)+J)=*(*(A+J)+I);
*(*(A+J)+I)=W1;
}
}
}
void DA(double (*A)[6],double B[][6],int M,int N) /*将矩阵B赋值给矩阵A*/
{
int I,J;
for(I=0;I<M;I++)
for(J=0;J<N;J++)
*(*(A+I)+J)=B[I][J];
}
/*求坐标变换矩阵D和T,总坐标系下的子刚度矩阵K1*/
void DTMATX(double (*K1)[6],double K0[][6],double A[],double B[],double C[],int N,double R[][6])
{
int Z,I,J,L;
double T[6][6],F[3][3],D[3][3],T1[6][6],T2[6][6];
for(I=0;I<3;I++)
for(J=0;J<3;J++)
if(I==J)F[I][J]=1.0;
else F[I][J]=0.0;
D[0][0]=0.0;
D[1][1]=0.0;
D[2][2]=0.0;
D[0][1]=-C[N-1];
D[0][2]=B[N-1];
D[1][0]=C[N-1];
D[1][2]=-A[N-1];
D[2][0]=-B[N-1];
D[2][1]=A[N-1];
for(I=0;I<3;I++)
for(J=0;J<3;J++)
T[I][J]=F[I][J];
for(I=3;I<6;I++)
for(J=3;J<6;J++)
{L=I-3;
Z=J-3;
T[I][J]=F[L][Z];
}
for(I=3;I<6;I++)
for(J=0;J<3;J++)
{L=I-3;
T[I][J]=D[L][J];
}
for(I=0;I<3;I++)
for(J=3;J<6;J++)
T[I][J]=0.0;
MATMPY(T,R,T1,6,6,6);
MATMPY(T1,K0,T2,6,6,6);
ZMATX(T1,6);
MATMPY(T2,T1,K1,6,6,6);
}
#include<stdio.h>
#include<math.h>
main()
{
int NG,NG1,NK,NJ,NK1,NK2,N,H,Z,I,J,J1,L,L1,L2,JJ;
double AA1[3],BB1[3],C1[3],C2[3],CC[3],CC1[3],CC2[3],CC3[3],DD3[3],DD1[3];
double DD2[3],Y1,Y2,Y3,Y4,R1[3][3],S5[6][6],W5[6][6],M[12][12],M01[6][6];
double M02[6][6],KB[6],KC[6],KK[6][6],T[3],I1[3],I2[3],K11[6][6],K22[6][6];
double M11[6][6],M22[6][6],GX,GY,GZ,K[12][12],M1,M2,A[40],B[40],C[40],ALF[120];
double BET[120],GAM[120],K01[6][6],K02[6][6],WW,WW1,WW2,D1,D2,DD,WN[12],PACE;
double K1[3],K2[3],F0,S,U,W,W1,TA[7],R[6][6],SJ[6][6],WJ[6][6],F;
printf("输入上层柴油机质量M2:\n");
scanf("%f",&M2);
printf("输入筏体质量M1:\n");
scanf("%f",&M1);
printf("输入筏体转动惯量I1[3]:\n");
for(I=0;I<3;I++)
scanf("%f",&I1[I]);
printf("输入上层柴油机转动惯量I2[3]:\n");
for(I=0;I<3;I++)
scanf("%f",&I2[I]);
printf("输入筏体下弹簧总数NJ:\n");
scanf("%d",&NJ);
printf("输入弹簧总数NK:\n");
scanf("%d",&NK);
printf("输入弹簧总数+质量总数 NG:\n");
scanf("%d",&NG);
printf("输入弹簧和质量X坐标值A[NG]:\n");
for(I=0;I<NG;I++)
scanf("%f",&A[I]);
printf("输入弹簧和质量Y坐标值B[NG]:\n");
for(I=0;I<NG;I++)
scanf("%f",&B[I]);
printf("输入弹簧和质量Z坐标值C[NG]:\n");
for(I=0;I<NG;I++)
scanf("%f",&C[I]);
printf("输入上层弹簧刚度KB[6]:\n");
for(I=0;I<6;I++)
scanf("%f",&KB[I]);
printf("输入下层弹簧刚度KC[6]:\n");
for(I=0;I<6;I++)
scanf("%f",&KC[I]);
NG1=2*NG;
printf("输入每个弹簧刚性主轴及质量惯性轴与总坐标的夹角(度)ALF[NG1]:\n");
for(I=0;I<NG1;I++)
scanf("%f",&ALF[I]);
printf("输入每个弹簧刚性主轴及质量惯性轴与总坐标的夹角(度)BET[NG1]:\n");
for(I=0;I<NG1;I++)
scanf("%f",&BET[I]);
printf("输入每个弹簧刚性主轴及质量惯性轴与总坐标的夹角(度)GAM[NG1]:\n");
for(I=0;I<NG1;I++)
scanf("%f",&GAM[I]);
U=M1/M2;
for(I=0;I<3;I++)
I1[I]=I1[I]*U/1.0682;
for(L=0;L<3;L++)
{K1[L]=NJ*KC[L];
K2[L]=(NK-NJ)*KB[L];
}
for(N=0;N<NG1;N++)
{ALF[N]=ALF[N]*3.1415926/180;
BET[N]=BET[N]*3.1415926/180;
GAM[N]=GAM[N]*3.1415926/180;
}
for(L=0;L<6;L++) /*求K01[6],K02[6]*/
for(J=0;J<6;J++)
if(L==J)
{K01[L][J]=KC[L];
K02[L][J]=KB[L];
}
else
{K01[L][J]=0.0;
K02[L][J]=0.0;
}
for(L=0;L<6;L++) /*求S5[6],W5[6]*/
for(J=0;J<6;J++)
{S5[L][J]=0.0;
W5[L][J]=0.0;
}
for(N=0;N<NJ;N++)
{ for(L=0;L<3;L++)
for(J=0;J<3;J++)
R1[L][J]=0.0;
L1=3*(N-1);
R1[0][0]=(double)cos(ALF[L1+0]);
R1[1][0]=(double)cos(ALF[L1+1]);
R1[2][0]=(double)cos(ALF[L1+2]);
R1[0][1]=(double)cos(BET[L1+0]);
R1[1][1]=(double)cos(BET[L1+1]);
R1[2][1]=(double)cos(BET[L1+2]);
R1[0][2]=(double)cos(GAM[L1+0]);
R1[1][2]=(double)cos(GAM[L1+1]);
R1[2][2]=(double)cos(GAM[L1+2]);
for(L=0;L<3;L++)
for(J=0;J<3;J++)
R[L][J]=R1[L][J];
for(H=3;H<6;H++)
for(J=3;J<6;J++)
{L=H-3;
Z=J-3;
R[H][J]=R1[L][Z];
}
for(L=0;L<3;L++)
for(J=3;J<6;J++)
R[L][J]=0.0;
for(L=3;L<6;L++)
for(J=0;J<3;J++)
R[L][J]=0.0;
DTMATX(KK,K01,A,B,C,N,R); /*得到子刚度矩阵KK[6][6]*/
MATADD(S5,KK,SJ,6,6);
DA(S5,SJ,6,6); /*将SJ[6][6]赋值给S5[6][6]*/
}
H=NJ;
for(N=H;N<NK;N++)
{ for(L=0;L<3;L++)
for(J=0;J<3;J++)
R1[L][J]=0.0;
L2=3*(N-1);
R1[0][0]=(double)cos(ALF[L2+0]);
R1[1][0]=(double)cos(ALF[L2+1]);
R1[2][0]=(double)cos(ALF[L2+2]);
R1[0][1]=(double)cos(BET[L2+0]);
R1[1][1]=(double)cos(BET[L2+1]);
R1[2][1]=(double)cos(BET[L2+2]);
R1[0][2]=(double)cos(GAM[L2+0]);
R1[1][2]=(double)cos(GAM[L2+1]);
R1[2][2]=(double)cos(GAM[L2+2]);
for(L=0;L<3;L++)
for(J=0;J<3;J++)
R[L][J]=R1[L][J];
for(H=3;H<6;H++)
for(J=3;J<6;J++)
{L=H-3;
Z=J-3;
R[H][J]=R1[L][Z];
}
for(L=0;L<3;L++)
for(J=3;J<6;J++)
R[L][J]=0.0;
for(L=3;L<6;L++)
for(J=0;J<3;J++)
R[L][J]=0.0;
DTMATX(KK,K02,A,B,C,N,R); /*得到子刚度矩阵KK[6][6]*/
MATADD(W5,KK,WJ,6,6);
DA(W5,WJ,6,6); /*将WJ[6][6]赋值给W5[6][6]*/
}
MATADD(S5,W5,K11,6,6); /*得到刚度子矩阵K11[6][6]*/
printf("刚度子矩阵K11[6][6]:\n");
for(L=0;L<6;L++)
{for(J=0;J<6;J++)
printf("%f ",K11[L][J]);
printf("\n");
}
DA(K22,W5,6,6); /*将W5[6][6]赋值给K22[6][6]*/
printf("刚度子矩阵K22[6][6]:\n"); /*输出刚度子矩阵K22[6][6]*/
for(L=0;L<6;L++)
{for(J=0;J<6;J++)
printf("%f ",K22[L][J]);
printf("\n");
}
for(L=0;L<6;L++)
for(J=0;J<6;J++)
K[L][J]=K11[L][J];
for(L=0;L<6;L++)
for(J=6;J<12;J++)
{Z=J-6;
K[L][J]=-K22[L][Z];
}
for(H=6;H<12;H++)
for(J=6;J<12;J++)
{L=H-6;
Z=J-6;
K[H][J]=K22[L][Z];
}
for(H=6;H<12;H++)
for(J=0;J<6;J++)
{L=H-6;
K[H][J]=-K22[L][J];
} /*得到总刚度矩阵K[12][12]*/
printf("总刚度矩阵K[12][12]:\n");
for(L=0;L<12;L++)
{for(J=0;J<12;J++)
printf("%f ",K[L][J]);
printf("\n");
}
for(L=0;L<3;L++)
for(J=0;J<3;J++)
{M01[L][J]=0.0;
M02[L][J]=0.0;
}
M01[0][0]=M1;
M01[1][1]=M1;
M01[2][2]=M1;
M02[0][0]=M2;
M02[1][1]=M2;
M02[2][2]=M2;
for(H=3;H<6;H++)
for(J=3;J<6;J++)
{ L=H-3;
if(H==J){M01[H][J]=I1[L];M02[H][J]=I2[L];}
else {M01[H][J]=0.0;M02[H][J]=0.0;}
} /*得到M01[6][6],M02[6][6]*/
NK1=NK+1;
NK2=NK+2;
L1=3*(NK1-1); /*以下求中间筏体子矩阵*/
L2=3*(NK2-1);
for(L=0;L<3;L++)
for(J=0;J<3;J++)
R1[L][J]=0.0;
R1[0][0]=cos(ALF[L2+0]);
R1[1][0]=cos(ALF[L2+1]);
R1[2][0]=cos(ALF[L2+2]);
R1[0][1]=cos(BET[L2+0]);
R1[1][1]=cos(BET[L2+1]);
R1[2][1]=cos(BET[L2+2]);
R1[0][2]=cos(GAM[L2+0]);
R1[1][2]=cos(GAM[L2+1]);
R1[2][2]=cos(GAM[L2+2]); /*得到R1[3][3]*/
for(L=0;L<3;L++)
for(J=0;J<3;J++)
R[L][J]=R1[L][J];
for(H=3;H<6;H++)
for(J=3;J<6;J++)
{L=H-3;
Z=J-3;
R[H][J]=R1[L][Z];
}
for(L=0;L<3;L++)
for(J=3;J<6;J++)
R[L][J]=0.0;
for(L=3;L<6;L++)
for(J=0;J<3;J++)
R[L][J]=0.0; /*得到R[6][6]*/
DTMATX(M11,M01,A,B,C,NK2,R); /*得到质量子矩阵M11[6][6]*/
printf("质量子矩阵M11[6][6]:\n");
for(L=0;L<6;L++)
{for(J=0;J<6;J++)
printf("%f ",M11[L][J]);
printf("\n");
}
for(L=0;L<3;L++)
for(J=0;J<3;J++)
R1[L][J]=0.0;
R1[0][0]=cos(ALF[L1+0]);
R1[1][0]=cos(ALF[L1+1]);
R1[2][0]=cos(ALF[L1+2]);
R1[0][1]=cos(BET[L1+0]);
R1[1][1]=cos(BET[L1+1]);
R1[2][1]=cos(BET[L1+2]);
R1[0][2]=cos(GAM[L1+0]);
R1[1][2]=cos(GAM[L1+1]);
R1[2][2]=cos(GAM[L1+2]);
for(L=0;L<3;L++)
for(J=0;J<3;J++)
R[L][J]=R1[L][J];
for(H=3;H<6;H++)
for(J=3;J<6;J++)
{L=H-3;
Z=J-3;
R[H][J]=R1[L][Z];
}
for(L=0;L<3;L++)
for(J=3;J<6;J++)
R[L][J]=0.0;
for(L=3;L<6;L++)
for(J=0;J<3;J++)
R[L][J]=0.0; /*得到R[6][6]*/
DTMATX(M22,M02,A,B,C,NK1,R); /*得到质量子矩阵M22[6][6]*/
printf("质量子矩阵M22[6][6]:\n");
for(I=0;I<6;I++)
{for(J=0;J<6;J++)
printf("%f ",M22[L][J]);
printf("\n");
}
for(L=0;L<12;L++)
for(J=0;J<12;J++)
M[L][J]=0.0;
for(L=0;L<6;L++)
for(J=0;J<6;J++)
M[L][J]=M11[L][J];
for(H=6;H<12;H++)
for(J=6;J<12;J++)
{L=H-6;
Z=J-6;
M[H][J]=M22[L][Z];
} /*得到总质量矩阵M[12][12]*/
printf("总质量矩阵M[12][12]:\n");
for(I=0;I<12;I++)
{for(J=0;J<12;J++)
printf("%f ",M[L][J]);
printf("\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -