六跨连续梁内力计算程序说明文档一.程序适用范围本程序用来解决六跨连续梁在荷载作用下的弯矩计算。
荷载可以是集中力Fp(作用于跨中)、分布荷载q(分布全垮)、集中力偶m(作用于结点)的任意组合情况。
端部支承可为铰支或固支。
二.程序编辑方法使用Turbo C按矩阵位移法的思路进行编辑,用Turbo C中的数组来完成矩阵的实现,关键的求解K⊿=P的步骤用高斯消元法。
三.程序使用方法运行程序后,按照提示,依次输入结点编号,单元编号,单元长度,抗弯刚度(EI的倍数),集中力,均部荷载,集中力偶,各个数据间用空格隔开,每一项输入完毕后按回车键,所有数据输入完毕后按任意键输出结果。
输出结果中包括输入的数据(以便校核),角位移的值(以1/EI为单位)以及每个单元的左右两端弯矩值。
四.程序试算1.算例1算力图示:输入数据:结点:1 2 3 4 5 6 0;单元:1 2 3 4 5 6;长度:4 6 6 8 4 6;EI:1 1.5 1 2 1 1.5;Fp:0 12 8 0 6 0;q:8 0 0 4 0 6;m:0 0 -8 0 10 0 0运行程序如下:结果为: 角位移为:1(11.383738,-1.434142,-8.980504,14.053733,-10.192107,10.048027,0)EI单元编号 1 2 3 4 5 6 左端弯矩 0.00000 -14.92439 -7.30243 -12.37565 -8.16809 -7.95197 右端弯矩 14.92439-0.6975712.3756518.168097.9519723.024012. 算例2 算例图示:6EI 8kN/m 4m 3m 2m 8m kN/m 12365474kN/m3m 3m3m 2m 6m12kN 8kN8kN.m6kN10kN.mEI EI EI 1.5EI1.52EI输入数据:结点:0 1 2 3 4 5 6; 单元:1 2 3 4 5 6; 长度:4 6 6 8 4 6; EI :1 1.5 1 2 1 1.5;Fp :0 12 8 0 6 0; q :8 0 0 4 0 6;m :0 0 -8 0 10 0 0运行程序如下:结果为: 角位移为:1(0,1.686721,-10.080218,14.871010,-12.183221,17.195206,-26.597603)EI单元编号 1 2 3 4 5 6 左端弯矩 -9.82331 -12.35339 -7.76314 -12.55393 -6.58562 -14.10360 右端弯矩 12.35339-0.2368612.5539316.5856214.103600.000003. 算例3 算例图示:6EI8kN/m 4m 3m 2m 8m kN/m1236544kN/m3m 3m3m 2m 6m12kN 8kN8kN.m6kN 10kN.mEI1.5EI EI EI 2EI 1.5输入数据:结点:0 1 2 3 4 5 0; 单元:1 2 3 4 5 6;长度:4 6 6 8 4 6;EI :1 1.5 1 2 1 1.5;Fp :0 12 8 0 6 0; q :8 0 0 4 0 6; m :0 0 -8 0 10 0 0运行程序如下:结果为: 角位移为:1(0,1.653925,-9.949034,14.264283,-10.248253,10.062063,0)EI单元编号 1 2 3 4 5 6 左端弯矩 -9.83978 -12.32059 -7.87793 -12.19318 -8.21722 -7.93794 右端弯矩 12.32059-0.1220712.1931818.217227.9379423.031034. 算例4 算例图示:6EI 8kN/m 4m 3m 2m 8m kN/m 12365474kN/m3m 3m3m 2m 6m12kN 8kN8kN.m 6kN10kN.mEI EI EI 1.5EI1.52EI输入数据:结点:1 2 3 4 5 6 7;单元:1 2 3 4 5 6;长度:4 6 6 8 4 6;EI:1 1.5 1 2 1 1.5;Fp:0 12 8 0 6 0;q:8 0 0 4 0 6;m:0 0 -8 0 10 0 0运行程序如下:结果为:角位移为:1(11.364772,-1.396211,-9.113262,14.660626,-12.126579,17.179023,-26.589511) EI单元编号123456左端弯矩-0.00000-14.25984-7.18863-12.73600-6.53707-14.11573右端弯矩14.95284-0.8113712.7360016.5370714.115730.00000五.源程序#include<stdio.h>#include<conio.h>定义变量int joint[7]; 结点编号int unit[6]; 单元编号float length[6]; 长度float EI[6]; 抗弯刚度float P[6]; 集中力float q[6]; 均部荷载float m[7]; 集中力偶double I[6]; 线刚度int number=7,i,j;double K[7][7]={0}; 整体刚度矩阵double k[6][2][2]; 单元刚度矩阵double MP[6][2],Mq[6][2],Mlast[6][2],M[7]={0},tatleM[7],mm[7],Mqueue[7]={0},antiM[7]={0};依次为:集中力、均布荷载引起的固端弯矩,最终杆端弯矩,全部荷载引起的弯矩,总的结点荷载,按结点编号排列的结点集中力偶,按结点编号排列的固端弯矩,等效结点弯矩double angle[7]={0}; 角位移void input(); 输入函数void solve(); 求解函数void output(); 输出函数void Gauss(); 高斯消元法void main(){input();solve();output();}void input(){clrscr();printf("Please input data.\n\nThe joint number:");for(i=0;i<7;i++)scanf("%d",&joint[i]);printf("\nThe unit number:");for(i=0;i<6;i++)scanf("%d",&unit[i]);printf("\nThe length:");for(i=0;i<6;i++)scanf("%f",&length[i]);printf("\nThe EI:");for(i=0;i<6;i++)scanf("%f",&EI[i]);printf("\nThe Fp:");for(i=0;i<6;i++)scanf("%f",&P[i]);printf("\nThe q:");for(i=0;i<6;i++)scanf("%f",&q[i]);printf("\nThe m:");for(i=0;i<6;i++)scanf("%f",&m[i]);}void solve(){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;else j=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();}void output(){clrscr();printf("The data you put in:\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("\nThe angle(1/EI):\n\n");for(i=0;i<number;i++){printf("%12.6f",angle[i]);}printf("\n--------------------------------------------------------------------------------");printf("\nunit number");for(i=0;i<6;i++){printf("%6d ",unit[i]);}printf("\n\nleft M \t");for(i=0;i<6;i++) printf("%12.5f",Mlast[i][0]);printf("\n\nright M\t");for(i=0;i<6;i++) printf("%12.5f",Mlast[i][1]);getch();}.void Gauss(){int l,m;double box;double BOX[7]={0};for(j=0;j<(number-1);j++){for(i=j;i<number;i++){if(K[i][j]!=0){for(m=0;m<number;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<number;m++){K[j][m]/=K[j][j];}tatleM[j]/=K[j][j];K[j][j]=1;for(l=j+1;l<number;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;i<number;i++)angle[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];}}整理文档。