结构力学中的矩阵位移法是随着电子计算机进 入 结构力学领域中而产生的一种方法,而 Matlab 语言正是进行矩阵运算的强大工具,因此,用 Matlab
语言编写结构力学程序有更大的优越性。本 章将详细
介绍如何利用 Matlab语言编制连续梁结 构的计算程
序。
矩阵位移法的解题思路是将结构离散为单元
(杆件),建立单元杆端力与杆端位移之间的关系 -
第三章连续梁程序的编制与使用
输入初始数据
形成原始总刚
单元刚度方程;再将各单元集成为原结构,在满 足变
形连续条件和平■衡条件时,建立整体刚度方 程;在
边界条件处理完毕后,由整体刚度方程解出 节点位移,
进而求出结构内力。 用矩阵位移法计算连续梁的步骤如下: 1) 整理原始数据,如材料性质、荷载条件、约 束
条件等,并进行编码:单兀编码、结点编 码、
结点位移编码、选取坐标系。
2) 建立局部坐标系下的单元刚度矩阵。
形成综合结点荷载
边界处理
解方程
3) 建立整体坐标系下的单元刚度矩阵。 4) 集成总刚。
5) 建立整体结构的等效节点荷载和总荷载矩 阵 6) 边界条件处理。
7) 解方程,求出节点位移。
8) 求出各单元的杆端内力。
实际上,上述步骤也是编制Matlab程序的基本
步骤,在求出计算结果后,还可以利用 Matlab的绘图功能绘制结构图、内力图、 变
求杆端力并输出
结束
形图等等。
图3-1程序流程图
-82 -
3.1程序说明
%*******************************************************************
% 矩阵位移法解连续梁主程序
%*******************************************************************
功能:运用矩阵位移法解连续梁的基本原理编制的计算主程序。
基本思想:结点(结点位移)编码默认为从左至右,从 1开始顺序进行;杆 端弯矩的方向默认为逆时针。
荷载类型:可计算结点荷载,每单元作用的跨中集中力和均布荷载。
说明:主程序的作用是通过赋值语句、读取和写入文件、函数调用等完成算 法的全过程,即实现程序流程图的程序表达。
% --------------------------------------------------------------------------------------- 1程序准备
format short e clear all clc
%设定输出类型 %活除所有已定义变量 %活屏
说明:
format short e -设定计算过程中显示在屏幕上的数字类型为短格式、科 学计数
法;
clear all -活除所有已定义变量,目的是在本程序的运行过程中,不会 发生变量名
相同等可能使计算出错的情况;
clc -活屏,使屏幕在本程序运行开始时
% --------------------------------------------------------------------------------------- 2打开文件
FP1=fopen('input.txt','rt'); FP2=fopen('output.txt','wt');
%打开输入数据文件 %打开输出数据文件
存放初始数据 存放计算结果
说明:
FP1=fopen('input.txt','rt');—打开已存在的输入数据文件
-83 -
input.txt,且设置其
为只读格式,使程序在执行过程中不能改变输入文件中的数值,并用文件句柄 FP1来
FP2=fopen('output.txt','wt');一打开输出数据文件,该文件不存在时,通过此 命令
创建新文件,该文件存在时则将原有内容全部删除。该文件设置为可写格式, 可在程序执行过程中向输出文件写入数据。
% --------------------------------------------------------------------------------------- 3读入程序控制信息
NELEM =fscanf(FP1,'%d',1); %^元个数(单元编码总数) NPOIN =fscanf(FP1,'%d',1); %吉点个数(结点编码总数) NVFIX =fscanf(FP1,'%d',1); %约束个数(零位移总数)
NFPOIN=fscanf(FP1,'%d',1); %结点荷载个数(作用在结点上集中力偶总数) NFPRES=fscanf(FP1,'%d',1); %非结点荷载数(作用在单元上分布荷载总数) YOUNG=fscanf(FP1,'%f,1); %弹性模量
说明:
从输入文件FP1中读入单元个数,结点个数,约束个数,结点荷载个数,非 结点荷载个数,弹性模量;
程序中弹性模量仅输入了一个值,表明本程序仅能求解一种材料构成的结 构,如:钢筋混凝土结构、钢结构,不能求解钢筋混凝土-钢组合结构。
采用了命令fscanf,其中:’%d'表示读入整数格式;1表示读取1个数。
% ------------------------------------------------------------------------------ fprintf(FP2,'\\n
结构初始数据 \\n\\n');
fprintf(FP2,'单元总数=%d 结点 总数=%d 约束总数=%d \\n',NELEM,NPOIN,NVFIX); fprintf(FP2,'结点荷载个数=%d =%12.5g \\n',NFPOIN,NFPRES,YOUNG);
非结点荷载个数 =%d 弹性模量
说明:
在输出文件FP2中显示输入的控制信息,便于程序执行完毕后,从输出文件 中查找输入错误。
采用了命令fprintf,其中:\\n为换行标志,表示换一行;%12.5g表示输出 12位且有5位小数的实数。
括在引号中的信息’单元总数=%d
结点总数=%d 约束总数=%d \\n'为
-84 -
输出到FP2文件中时的格式,其后的变量表 NELEM,NPOIN,NVFIX 依次将其代 表的数值输出到%d所对应的位置。 % -----------------------------------------------------
4调用读取初始数据函数,生成结构信息
[LNODS,COORD,FPOIN,FPRES,FIXED]=…
ele_INITIALDATA (FP1,FP2,NELEM,NPOIN,NFPOIN,NFPRES,NVFIX);
-85 -
% --------------------------------------------------------------------------------------- 5调用 总刚计算 函数,生成单刚并集成总刚
[HK] = ele_HK(NPOIN,NELEM,LNODS,COORD,YOUNG);
% --------------------------------------------------------------------------------------- 6调用荷载计算函数,由结点荷载与非结点荷载生成总荷载向量歹U阵
[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)
说明:
FP2一 FP1-文件句柄,指示输入数据文件;
文件句柄,指示输出数据文件;
% -----------------------------------------------------------------------------
%读取结构信息
-86 -
LNODS=fscanf(FP1,'%f,[3,NELEM])';
说明:
建立LNODS矩阵,该矩阵指出了每一单元的连接信息和惯性矩。
矩阵的每一行针对每一单元,共计NELEM;每一列相应为单元左结点号 (编码)、(编码)、惯性矩。
命令中,[3,NELEM]表示读取NELEM行3列数据赋值给LNODS矩阵。 显然,LNODS(i,1:3)依次表示i单元的左结点号、右结点号、惯性矩。 从这种定义可见,每一单元的惯性矩均为常数,均为等截面直杆。
% ----------------------------------------------------------------------------- fprintf(FP2,'单元号左结点号右结点号 for i=1:NELEM fprintf(FP2,' %3d end
%3d
%3d
%10.2e \\n',i,LNODS(i,:));
惯性矩\\n');
说明:
在输出文件FP2中显示输入的单元连接等信息。
从1单元到NELEM单元进行循环,并依次输出每一单元的连接等信息。
% --------------------------------------------------------------------------------------
COORD=fscanf(FP1,'%f,[NPOIN])';
% 坐标:x 坐标(共计 NPOIN 组)
说明:
建立COORD矩阵,该矩阵用来存储各结点x方向的坐标值。
连续梁结构各结点均分布在x轴,以1结点为起始点顺序编码,因此表征各 结点位置时仅需存储其x方向的坐标即可。
从FP1文件中读取全部结点个数 NPOIN的坐标值。
COORD(i)表示第i个结点的x坐标。
% ----------------------------------------------------------------------------- fprintf(FP2,'结点定义数据:结点号 x坐标\\n'); for i=1:NPOIN
fprintf(FP2,'
end
%3d
%6.2f\\n',i,COORD(i));
说明:
在输出文件FP2中显示输入的结点坐标信息。
从1结点到NPOIN结点进行循环,并依次输出每一结点的坐标信息。
% ---------------------------------------------------------------------------------------
-87 -
FPOIN=fscanf(FP1,'%f,[2,NFPOIN])';
说明:
建立FPOIN矩阵,该矩阵用来存储直接作用在结点上的荷载信息。 从FP1文件读取NFPOIN行2列数据,赋值给FPOIN矩阵。
每一行的第一列表示荷载作用的结点号; 第二列表示荷载的数值大小。连续 梁结构每一结点仅有1个转角位移,相应地直接作用在结点上的荷载为力偶, 以 顺时针转动为正。
FPOIN(i,1)表示第i
个直接结点荷载作用的结点号,FPOIN(i,2)表示第i个直 接结
点荷载的数值大小。
若控制数据NFPOIN等于零,则此行命令不执行。
% ----------------------------------------------------------------------------- if NFPOIN>0
fprintf(FP2,'结点荷载数据:结点号 for i=1:NFPOIN
fprintf(FP2,' end end
%3d
%3d
%6.2f\\n',i, FPOIN(i,:));
M力偶\\n');
说明:
首先判断控制数据NFPOIN是否为零,若为零则不需输出数据;若不为零, 表明本算例有直接作用在结点上的荷载,需要在输出文件 点荷载信息。
从第1到第NFPOIN个直接结点荷载进行循环,并依次输出每个直接结点 荷载的顺序号、结点号和荷载大小。 % ----------------------------------------------------
FPRES=fscanf(FP1,'%f,[3,NFPRES])';
FP2中显示输入的结
说明:
建立FPRES矩阵,该矩阵用来存储非结点荷载信息。 从FP1文件读取NFPRES行3列数据,赋值给FPRES矩阵。
每一行的第一列表示非结点荷载作用的单元号; 第二列表示荷载类型;第三 列表示荷载的数值大小。连续梁结构的局部坐标系 x轴以向右为正、y轴以向上 为正、转动方向以顺时针为正。
FPRES(i,1)表示第i个非结点荷载作用的单元号,FPRES(i,2)表示第i个非结 点荷
载的类型(类型定义在函数 ele_FORCE中),FPRES(i,3)表示第i个非结点
-88 -
因篇幅问题不能全部显示,请点此查看更多更全内容