Nums of M | 質量の数(自由度の数)(1〜10の整数) |
Nums of S | ばねの数(1〜10の整数) |
Nums of D | 減衰(速度に比例)の数(ばねと並列に接続し1〜10の整数) |
Mass (M0,M1,...M9) | 質量(kg) |
Force | 質量に作用する周期的な外力を Fsin(2πft) とする、振幅 F(N) |
Stiff.(K0,K1,...K9) | ばね定数(N/m) |
Damp. (D0,D1,...D9) | 速度に比例する減衰(N*sec/m) |
Connect to | ばねが接続される質量の番号(0 〜 質量の数−1 の整数)
固定端の場合は −1とする |
Display M# | 計算結果を表示する質量の番号(0 〜 質量の数−1 の整数) |
for (i=0; i<nd; i++){
e1=(int)(stiff[i][1]);/* connected
end to mass #e1 */
e2=(int)(stiff[i][2]);/* connected
end to mass #e2 */
if (e1==-1)
c0[e2][e2]=c0[e2][e2]+damp[i][0];
else if (e2==-1)
c0[e1][e1]=c0[e1][e1]+damp[i][0];
else{
c0[e1][e2]=c0[e1][e2]-damp[i][0];
c0[e2][e1]=c0[e2][e1]-damp[i][0];
c0[e1][e1]=c0[e1][e1]+damp[i][0];
c0[e2][e2]=c0[e2][e2]+damp[i][0];
}
連立1次方程式を [ A + jB ]{ x }={ P }
ここで、
[ A ] ばねによる係数マトリックス
[ B ] 速度に比例する減衰による係数マトリックス
{ x } 質量の変位ベクトル
{ P } 質量に働く外力ベクトル
とすると変位ベクトルは、
{ x }=[ C + jD ]{ P }=[ E + jF ]
[ C + jD ]を求めるために、マトリックス[ A ]及び[ B ]を以下のように配置
し、逆マトリックスを計算
[A - B I 0 ]
[B A 0 I ]
ここで、
[ I ]は単位マトリックス
以下のプログラムでは、m1[][]に[ A ]、[ B ]及び[ I ]を配置し、
逆マトリックスをガウスの消去法により計算
for (j=0; j<nm; j++){
for (i=0; i<2*nm; i++){
i0[ i ][ j ]=0;
i0[ j ][ j ]=1;
}
}
for (i=0; i<nm; i++){
for (j=0; j<nm;
j++){
if (i==j) //
w1=2πf
m1[i][i]=k0[i][i]-w1*w1*mass[i];//
system matrix [ A ]
else{
m1[i][j]=k0[i][j];
m1[i][i]=k0[i][i]-w1*w1*mass[i];//
system matrix [ A ]
}
}
for (k=0; k<nm; k++){
m1[nm+i][k]=w1*c0[i][k];// system
matrix [ B ]
}
}
for (i=0; i<nm; i++){
for (j=0; j<nm; j++){
m1[i][nm+j]= -m1[nm+i][j];
m1[nm+i][nm+j]= m1[i][j];
}
}
for (i=0; i<2*nm; i++){
nj= 2*nm;
for (j=nj; j<4*nm; j++){
m1[i][j]=0;
}
m1[i][2*nm+i]=1;
}
for (k=0; k<2*nm; k++){
pivi=m1[k][k];
k1=k+1;
for (j=k1; j<4*nm; j++){
m1[k][j]=(m1[k][j])/pivi;
}
for (i=0; i<2*nm; i++){
if(i !=k){
w=m1[i][k];
for (j=k1; j<4*nm; j++){
m1[i][j]=m1[i][j]-w*m1[k][j];
}
}
}
}
// end of inversion
以下省略