matlab连续梁程序的编制与使用Word文档格式.docx
- 文档编号:16855951
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:23
- 大小:35.19KB
matlab连续梁程序的编制与使用Word文档格式.docx
《matlab连续梁程序的编制与使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《matlab连续梁程序的编制与使用Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
运用矩阵位移法解连续梁的基本原理编制的计算主程序。
基本思想:
结点(结点位移)编码默认为从左至右,从1开始顺序进行;
杆端弯矩的方向默认为逆时针。
荷载类型:
可计算结点荷载,每单元作用的跨中集中力和均布荷载。
说明:
主程序的作用是通过赋值语句、读取和写入文件、函数调用等完成算法的全过程,即实现程序流程图的程序表达。
%-----------------------------------------------------------------------------------------------------
:
1程序准备
formatshorte%设定输出类型
clearall%清除所有已定义变量
clc%清屏
formatshorte-设定计算过程中显示在屏幕上的数字类型为短格式、科学计数法;
clearall-清除所有已定义变量,目的是在本程序的运行过程中,不会发生变量名相同等可能使计算出错的情况;
clc-清屏,使屏幕在本程序运行开始时
·
2打开文件
FP1=fopen('
'
'
rt'
);
%打开输入数据文件存放初始数据
FP2=fopen('
wt'
%打开输出数据文件存放计算结果
FP1=fopen('
-打开已存在的输入数据文件,且设置其为只读格式,使程序在执行过程中不能改变输入文件中的数值,并用文件句柄FP1来
FP2=fopen('
-打开输出数据文件,该文件不存在时,通过此命令创建新文件,该文件存在时则将原有内容全部删除。
该文件设置为可写格式,可在程序执行过程中向输出文件写入数据。
,
3读入程序控制信息
NELEM=fscanf(FP1,'
%d'
1);
%单元个数(单元编码总数)
NPOIN=fscanf(FP1,'
%结点个数(结点编码总数)
NVFIX=fscanf(FP1,'
%约束个数(零位移总数)
NFPOIN=fscanf(FP1,'
%结点荷载个数(作用在结点上集中力偶总数)
NFPRES=fscanf(FP1,'
%非结点荷载数(作用在单元上分布荷载总数)
YOUNG=fscanf(FP1,'
%f'
%弹性模量
*
从输入文件FP1中读入单元个数,结点个数,约束个数,结点荷载个数,非结点荷载个数,弹性模量;
程序中弹性模量仅输入了一个值,表明本程序仅能求解一种材料构成的结构,如:
钢筋混凝土结构、钢结构,不能求解钢筋混凝土-钢组合结构。
采用了命令fscanf,其中:
’%d’表示读入整数格式;
1表示读取1个数。
%------------------------------------------------------------------------------------------
fprintf(FP2,'
\n结构初始数据\n\n'
单元总数=%d结点总数=%d约束总数=%d\n'
NELEM,NPOIN,NVFIX);
结点荷载个数=%d非结点荷载个数=%d弹性模量=%12.5g\n'
NFPOIN,NFPRES,YOUNG);
}
在输出文件FP2中显示输入的控制信息,便于程序执行完毕后,从输出文件中查找输入错误。
采用了命令fprintf,其中:
\n为换行标志,表示换一行;
%12.5g表示输出12位且有5位小数的实数。
括在引号中的信息'
为输出到FP2文件中时的格式,其后的变量表NELEM,NPOIN,NVFIX依次将其代表的数值输出到%d所对应的位置。
4调用读取初始数据函数,生成结构信息
[LNODS,COORD,FPOIN,FPRES,FIXED]=…
ele_INITIALDATA(FP1,FP2,NELEM,NPOIN,NFPOIN,NFPRES,NVFIX);
@
5调用总刚计算函数,生成单刚并集成总刚
[HK]=ele_HK(NPOIN,NELEM,LNODS,COORD,YOUNG);
6调用荷载计算函数,由结点荷载与非结点荷载生成总荷载向量列阵
[FORCE]=…
ele_FORCE(NPOIN,NFPOIN,FPOIN,NFPRES,FPRES,LNODS,COORD);
7调用边界条件处理函数,总刚、总荷载进行边界条件处理
】
[HK,FORCE]=ele_BOUNDARY(NVFIX,FIXED,HK,FORCE);
8方程求解
DISP=zeros(NPOIN,1);
%建立并初始化结构的结点位移列矩阵
DISP=HK\FORCE;
%计算出结构所有的结点位移
9调用单元杆端力计算函数,求单元杆端力
[FE]=ele_MOMENTS(FP2,NPOIN,DISP,NELEM,LNODS,…
¥
COORD,YOUNG,NFPRES,FPRES);
10关闭输出数据文件
fclose(FP2);
%读取初始数据函数ele_INITIALDATA
-
%入口参数:
FP1,FP2,NELEM,NPOIN,NFPOIN,NFPRES,NVFIX
%出口参数:
LNODS,COORD,FPOIN,FPRES,FIXED
function[LNODS,COORD,FPOIN,FPRES,FIXED]=…
ele_INITIALDATA(FP1,FP2,NELEM,NPOIN,NFPOIN,NFPRES,NVFIX)
FP1-文件句柄,指示输入数据文件;
FP2-文件句柄,指示输出数据文件;
/
%读取结构信息
LNODS=fscanf(FP1,'
[3,NELEM])'
;
建立LNODS矩阵,该矩阵指出了每一单元的连接信息和惯性矩。
矩阵的每一行针对每一单元,共计NELEM;
每一列相应为单元左结点号(编码)、(编码)、惯性矩。
命令中,[3,NELEM]表示读取NELEM行3列数据赋值给LNODS矩阵。
显然,LNODS(i,1:
3)依次表示i单元的左结点号、右结点号、惯性矩。
》
从这种定义可见,每一单元的惯性矩均为常数,均为等截面直杆。
%------------------------------------------------------------------------------------------
单元号左结点号右结点号惯性矩\n'
fori=1:
NELEM
%3d%3d%3d%\n'
i,LNODS(i,:
));
end
在输出文件FP2中显示输入的单元连接等信息。
从1单元到NELEM单元进行循环,并依次输出每一单元的连接等信息。
%----------------------------------------------------------------------------------------------------
COORD=fscanf(FP1,'
[NPOIN])'
%坐标:
x坐标(共计NPOIN组)
建立COORD矩阵,该矩阵用来存储各结点x方向的坐标值。
连续梁结构各结点均分布在x轴,以1结点为起始点顺序编码,因此表征各结点位置时仅需存储其x方向的坐标即可。
从FP1文件中读取全部结点个数NPOIN的坐标值。
COORD(i)表示第i个结点的x坐标。
、
结点定义数据:
结点号x坐标\n'
fori=1:
NPOIN
%3d%6.2f\n'
i,COORD(i));
end
在输出文件FP2中显示输入的结点坐标信息。
从1结点到NPOIN结点进行循环,并依次输出每一结点的坐标信息。
FPOIN=fscanf(FP1,'
[2,NFPOIN])'
建立FPOIN矩阵,该矩阵用来存储直接作用在结点上的荷载信息。
从FP1文件读取NFPOIN行2列数据,赋值给FPOIN矩阵。
每一行的第一列表示荷载作用的结点号;
第二列表示荷载的数值大小。
连续梁结构每一结点仅有1个转角位移,相应地直接作用在结点上的荷载为力偶,以顺时针转动为正。
FPOIN(i,1)表示第i个直接结点荷载作用的结点号,FPOIN(i,2)表示第i个直接结点荷载的数值大小。
若控制数据NFPOIN等于零,则此行命令不执行。
{
ifNFPOIN>
0
结点荷载数据:
结点号M力偶\n'
NFPOIN
%3d%3d%6.2f\n'
i,FPOIN(i,:
end
首先判断控制数据NFPOIN是否为零,若为零则不需输出数据;
若不为零,表明本算例有直接作用在结点上的荷载,需要在输出文件FP2中显示输入的结点荷载信息。
从第1到第NFPOIN个直接结点荷载进行循环,并依次输出每个直接结点荷载的顺序号、结点号和荷载大小。
FPRES=fscanf(FP1,'
[3,NFPRES])'
建立FPRES矩阵,该矩阵用来存储非结点荷载信息。
从FP1文件读取NFPRES行3列数据,赋值给FPRES矩阵。
每一行的第一列表示非结点荷载作用的单元号;
第二列表示荷载类型;
第三列表示荷载的数值大小。
连续梁结构的局部坐标系x轴以向右为正、y轴以向上为正、转动方向以顺时针为正。
FPRES(i,1)表示第i个非结点荷载作用的单元号,FPRES(i,2)表示第i个非结点荷载的类型(类型定义在函数ele_FORCE中),FPRES(i,3)表示第i个非结点荷载的数值大小。
若控制数据NFPRES等于零,则此行命令不执行。
ifNFPRES>
非结点荷载数据:
荷载号单元号荷载类型荷载大小\n'
NFPRES
%3d%3d%6.2f%6.2f\n'
i,FPRES(i,:
首先判断控制数据NFPRES是否为零,若为零则不需输出数据;
若不为零,表明本算例有非结点荷载,需要在输出文件FP2中显示输入的非结点荷载信息。
从第1到第NFPRES个非结点荷载进行循环,并依次输出每个非结点荷载作用的荷载序号、单元号、荷载类型和荷载大小。
FIXED=fscanf(FP1,'
NVFIX)'
建立FIXED矩阵,该矩阵用来存储零位移对应的位移编码信息(即有限制转动的约束使结点的转角位移为零,对应的结点位移编码。
对于连续梁结构即固定支座对应的结点编码)。
从FP1文件读取NVFIX行数据,赋值给FIXED列矩阵。
每一行表示零位移对应的结点位移编码。
FIXED(i)表示第i个零位移对应的结点位移编码。
%-----------------------------------------------------------------------------------------------
ifNVFIX>
fprintf(FP2,'
零位移约束数据:
位移编号位移编号\n'
%3d%3d\n'
FIXED(:
?
首先判断控制数据NVFIX是否为零,若为零则不需输出数据;
若不为零,表明本算例有零位移,需要在输出文件FP2中显示零位移约束数据。
从第1到第NVFIX个零位移进行循环,依次输出每个零位移对应的结点号。
return
return表明主程序终止。
%计算总刚矩阵函数ele_HK
结点数、单元数、单元信息数组、结点坐标、弹性模量
整体刚度矩阵
function[HK]=ele_HK(NPOIN,NELEM,LNODS,COORD,YOUNG)
HK=zeros(NPOIN,NPOIN);
%生成总刚矩阵并清零
%生成单刚并组成总刚
NELEM%对单元个数循环
%调用生成局部单刚(局部坐标)函数
EK=ele_EK(i,LNODS,COORD,YOUNG);
HK(i:
i+1,i:
i+1)=HK(i:
i+1)+EK;
对每一单元顺序循环,依次计算每一单元的局部单元刚度矩阵。
EK为一个临时变量,计算得到i单元的单刚EK后,通过下一条语句集成入总刚矩阵中。
在下一次循环中,则计算i+1单元的单刚,并赋值给EK,再进行集成。
显然,随着循环的不断进行,EK对应着不同单元的单刚,值不断发生改变。
单刚到总刚的集成是利用了连续梁结构的特点,以分块的形式放入总刚矩阵中。
例如:
对于第i个单元,其四个单刚元素分别放入总刚矩阵的第(i,i)、(i,i+1)、(i+1,i)、(i+1,i+1)四个位置,因此通过HK的下标(i:
i+1)来表示相应的元素位置。
由于相邻单元的单刚集成时,有元素叠加的情况,因此相应的总刚矩阵元素的叠加采用了HK(i:
i+1)+EK的表达形式。
return
%计算单元刚度矩阵函数ele_EK
单元号、单元信息、结点坐标、弹性模量
局部单元刚度矩阵
在ele_HK函数中调用本函数时,弹性模量的入口参数符号为YOUNG,而在本函数的输入参数表中,符号为E。
函数调用时可以采用此种用法。
functionEK=ele_EK(i,LNODS,COORD,E)
NL=LNODS(i,1);
%左结点号
NR=LNODS(i,2);
%右结点号
)
L=COORD(NR)-COORD(NL);
%单元长度
I=LNODS(i,3);
%惯性矩
i=E*I/L;
利用已知信息,计算每一单元的线刚度。
LNODS(i,1)为i单元左结点的结点号赋值给NL;
LNODS(i,2)为i单元右结点的结点号赋值给NR。
COORD(NR)为第NR个结点的x坐标;
COORD(NL)为第NL个结点的x坐标;
二者的差为单元的长度。
LNODS(i,1)为i单元的惯性矩。
:
%----------------------------------------------------------------------------------------------
%生成单刚(局部坐标)右手坐标系
EK=[4*i2*i;
2*i4*i];
%-------------------------------------------------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 连续 程序 编制 使用