六跨连续梁内力计算程序程序.docx
《六跨连续梁内力计算程序程序.docx》由会员分享,可在线阅读,更多相关《六跨连续梁内力计算程序程序.docx(15页珍藏版)》请在冰豆网上搜索。
六跨连续梁内力计算程序程序
六跨连续梁内力计算程序
说明文档
一.程序适用范围
本程序用来解决六跨连续梁在荷载作用下的弯矩计算。
荷载可以是集中力Fp(作用于跨中)、分布荷载q(分布全垮)、集中力偶m(作用于结点)的任意组合情况。
端部支承可为铰支或固支。
二.程序编辑方法
使用TurboC按矩阵位移法的思路进行编辑,用TurboC中的数组来完成矩阵的实现,关键的求解K⊿=P的步骤用高斯消元法。
三.程序使用方法
运行程序后,按照提示,依次输入结点编号,单元编号,单元长度,抗弯刚度(EI的倍数),集中力,均部荷载,集中力偶,各个数据间用空格隔开,每一项输入完毕后按回车键,所有数据输入完毕后按任意键输出结果。
输出结果中包括输入的数据(以便校核),角位移的值(以1/EI为单位)以及每个单元的左右两端弯矩值。
四.程序试算
1.算例1
算力图示:
输入数据:
结点:
1234560;单元:
123456;长度:
466846;EI:
11.51211.5;
Fp:
0128060;q:
800406;m:
00-801000
运行程序如下:
结果为:
角位移为:
单元编号
1
2
3
4
5
6
左端弯矩
0.00000
-14.92439
-7.30243
-12.37565
-8.16809
-7.95197
右端弯矩
14.92439
-0.69757
12.37565
18.16809
7.95197
23.02401
弯矩图如下:
2.算例2
算例图示:
输入数据:
结点:
0123456;单元:
123456;长度:
466846;EI:
11.51211.5;
Fp:
0128060;q:
800406;m:
00-801000
运行程序如下:
结果为:
角位移为:
单元编号
1
2
3
4
5
6
左端弯矩
-9.82331
-12.35339
-7.76314
-12.55393
-6.58562
-14.10360
右端弯矩
12.35339
-0.23686
12.55393
16.58562
14.10360
0.00000
弯矩图如下:
3.算例3
算例图示:
输入数据:
结点:
0123450;单元:
123456;长度:
466846;EI:
11.51211.5;
Fp:
0128060;q:
800406;m:
00-801000
运行程序如下:
结果为:
角位移为:
单元编号
1
2
3
4
5
6
左端弯矩
-9.83978
-12.32059
-7.87793
-12.19318
-8.21722
-7.93794
右端弯矩
12.32059
-0.12207
12.19318
18.21722
7.93794
23.03103
弯矩图如下:
4.算例4
算例图示:
输入数据:
结点:
1234567;单元:
123456;长度:
466846;EI:
11.51211.5;
Fp:
0128060;q:
800406;m:
00-801000
运行程序如下:
结果为:
角位移为:
单元编号
1
2
3
4
5
6
左端弯矩
-0.00000
-14.25984
-7.18863
-12.73600
-6.53707
-14.11573
右端弯矩
14.95284
-0.81137
12.73600
16.53707
14.11573
0.00000
弯矩图如下:
五.源程序
#include
#include
定义变量
intjoint[7];结点编号
intunit[6];单元编号
floatlength[6];长度
floatEI[6];抗弯刚度
floatP[6];集中力
floatq[6];均部荷载
floatm[7];集中力偶
doubleI[6];线刚度
intnumber=7,i,j;
doubleK[7][7]={0};整体刚度矩阵
doublek[6][2][2];单元刚度矩阵
doubleMP[6][2],Mq[6][2],Mlast[6][2],M[7]={0},tatleM[7],mm[7],Mqueue[7]={0},antiM[7]={0};
依次为:
集中力、均布荷载引起的固端弯矩,最终杆端弯矩,全部荷载引起的弯矩,总的结点荷载,按结点编号排列的结点集中力偶,按结点编号排列的固端弯矩,等效结点弯矩
doubleangle[7]={0};角位移
voidinput();输入函数
voidsolve();求解函数
voidoutput();输出函数
voidGauss();高斯消元法
voidmain()
{
input();
solve();
output();
}
voidinput()
{
clrscr();
printf("Pleaseinputdata.\n\nThejointnumber:
");
for(i=0;i<7;i++)
scanf("%d",&joint[i]);
printf("\nTheunitnumber:
");
for(i=0;i<6;i++)
scanf("%d",&unit[i]);
printf("\nThelength:
");
for(i=0;i<6;i++)
scanf("%f",&length[i]);
printf("\nTheEI:
");
for(i=0;i<6;i++)
scanf("%f",&EI[i]);
printf("\nTheFp:
");
for(i=0;i<6;i++)
scanf("%f",&P[i]);
printf("\nTheq:
");
for(i=0;i<6;i++)
scanf("%f",&q[i]);
printf("\nThem:
");
for(i=0;i<6;i++)
scanf("%f",&m[i]);
}
voidsolve()
{
for(i=0;i<7;i++){if(joint[i]==0)number-=1;}
for(i=0;i<6;i++)
{
MP[i][0]=-P[i]*length[i]/8;MP[i][1]=P[i]*length[i]/8;
}
for(i=0;i<6;i++)
{
Mq[i][0]=-q[i]*length[i]*length[i]/12;Mq[i][1]=q[i]*length[i]*length[i]/12;
}
for(i=1;i<6;i++)
{
M[i]=MP[i-1][1]+MP[i][0]+Mq[i-1][1]+Mq[i][0];
}
M[0]=MP[0][0]+Mq[0][0];
M[6]=MP[5][1]+Mq[5][1];
if(joint[0]==0)j=1;elsej=0;
for(i=j;i<7&&joint[i]>=1;i++)
{
Mqueue[joint[i]-1]=M[i];
mm[joint[i]-1]=m[i];
}
for(i=0;i<7;i++)
antiM[i]=-Mqueue[i];
for(i=0;i<7;i++)
tatleM[i]=antiM[i]+mm[i];
for(i=0;i<6;i++)
I[i]=(EI[i]/length[i]);
if(joint[0]==0)K[joint[1]-1][joint[1]-1]+=4*I[0];
if(joint[6]==0)K[joint[5]-1][joint[5]-1]+=4*I[5];
for(i=0;i<6;i++)
{
k[i][0][0]=4*I[i],k[i][0][1]=2*I[i],k[i][1][0]=2*I[i],k[i][1][1]=4*I[i];
}
for(i=j;joint[i]>=1&&joint[i+1]>=1&&i<6;i++)
{
K[joint[i]-1][joint[i]-1]+=k[i][0][0];
K[joint[i]-1][joint[i+1]-1]+=k[i][0][1];
K[joint[i+1]-1][joint[i]-1]+=k[i][1][0];
K[joint[i+1]-1][joint[i+1]-1]+=k[i][1][1];
}
getch();
}
voidoutput()
{
clrscr();
printf("Thedatayouputin:
\n\tjoint:
");
for(i=0;i<7;i++)
{
printf("\t");
printf("%d",joint[i]);
}
printf("\n\n\tunit:
");
for(i=0;i<6;i++)
{
printf("\t");
printf("%d",unit[i]);
}
printf("\n\n\tlength:
");
for(i=0;i<6;i++)
{
printf("\t");
printf("%1.0f",length[i]);
}
printf("\n\n\tEI:
");
for(i=0;i<6;i++)
{
printf("\t");
printf("%1.1f",EI[i]);
}
printf("\n\n\tFp:
");
for(i=0;i<6;i++)
{
printf("\t");
printf("%1.0f",P[i]);
}
printf("\n\n\tq:
");
for(i=0;i<6;i++)
{
printf("\t");
printf("%1.0f",q[i]);
}
printf("\n\n\tm:
");
for(i=0;i<6;i++)
{
printf("\t");
printf("%1.0f",m[i]);
}
Gauss();
for(i=0;i<6;i++)
{
Mlast[i][0]=k[i][0][0]*angle[joint[i]-1]+k[i][0][1]*angle[joint[i+1]-1]+MP[i][0]+Mq[i][0];
Mlast[i][1]=k[i][1][0]*angle[joint[i]-1]+k[i][1][1]*angle[joint[i+1]-1]+MP[i][1]+Mq[i][1];
}
printf("\n--------------------------------------------------------------------------------");
printf("\nTheangle(1/EI):
\n\n");
for(i=0;i{
printf("%12.6f",angle[i]);
}
printf("\n--------------------------------------------------------------------------------");
printf("\nunitnumber");
for(i=0;i<6;i++)
{
printf("%6d",unit[i]);
}
printf("\n\nleftM\t");
for(i=0;i<6;i++)printf("%12.5f",Mlast[i][0]);
printf("\n\nrightM\t");
for(i=0;i<6;i++)printf("%12.5f",Mlast[i][1]);
getch();
}
voidGauss()
{
intl,m;doublebox;
doubleBOX[7]={0};
for(j=0;j<(number-1);j++)
{
for(i=j;i{
if(K[i][j]!
=0)
{
for(m=0;m{
BOX[m]=K[i][m];K[i][m]=K[j][m];K[j][m]=BOX[m];
}
box=tatleM[i];tatleM[i]=tatleM[j];tatleM[j]=box;
break;
}
}
for(m=j+1;m{
K[j][m]/=K[j][j];
}
tatleM[j]/=K[j][j];
K[j][j]=1;
for(l=j+1;l{
tatleM[l]+=-tatleM[j]*K[l][j];
for(m=number-1;m>=j;m--)
{
K[l][m]+=-K[j][m]*K[l][j];
}
}
}
tatleM[number-1]/=K[number-1][number-1];
K[number-1][number-1]=1;
for(i=0;iangle[i]=tatleM[i];
for(i=number-2;i>=0;i--)
{
for(j=number-1;j>i;j--)
angle[i]=angle[i]-K[i][j]*angle[j];
}
}