matlab 桁架结构
![matlab 桁架结构](https://img.360docs.net/img4d/02c2io8xklcqkg6mvj0m-d1.webp)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
% NPOIN NELEM NVFIX NFPOIN NFPRES
% 总结点数,单元数, 约束个数, 受力结点数, 非结点力数
% COORD LNODS YOUNG
% 结构节点坐标数组, 单元定义数组, 弹性模量
% FPOIN FPRES FORCE FIXED
% 结点力数组,非结点力数组,总体荷载向量, 约束信息数组
% HK DISP
% 总体刚度矩阵,结点位移向量
%************************************************** format short e %设定输出类型
clear %清除内存变量
FP1=fopen('6-6.txt','rt') %打开初始数据文件
%读入控制数据
NELEM=fscanf(FP1,'%d',1); %单元数
NPOIN=fscanf(FP1,'%d',1); %结点数
NVFIX=fscanf(FP1,'%d',1); %约束数
NFPOIN=fscanf(FP1,'%d',1); %荷载结点数
YOUNG=fscanf(FP1,'%f',1); %弹性模量
% 读取结构信息
LNODS=fscanf(FP1,'%f',[3,NELEM])'
% 单元定义:左、右结点号,面积(共计NELEM组)COORD=fscanf(FP1,'%f',[2,NPOIN])'
% 坐标:x,y坐标(共计NPOIN 组)
FPOIN=fscanf(FP1,'%f',[3,NFPOIN])'
% 节点力(共计NFPOIN 组):结点号、X方向力(向右正),
Y方向力(向上正),
FIXED=fscanf(FP1,'%f',NVFIX)'
% 约束信息:约束对应的位移编码(共计NVFIX 组)
%---------------------------------------------------------
HK=zeros(2*NPOIN,2*NPOIN); % 张成总刚矩阵并清零FORCE=zeros(2*NPOIN,1); % 张成总荷载向量并清零
%形成总刚
for i=1:NELEM % 对单元个数循环
% 生成局部单刚(局部坐标) 右手坐标系
EK=ele_EK(i,LNODS,COORD,YOUNG);
T=zbzh(i,LNODS,COORD); % 坐标转换矩阵
EKT=T'*EK*T; % 生成整体单刚(整体坐标系)
% 组成总刚按2*2子块加入总刚中(共计4块)
for j=1:2 %对行进行循环---按结点号循环
N1=LNODS(i,j)*2; % j结点第2个位移的整体编码
for k=1:2 %对列进行循环---按结点号循环
N2=LNODS(i,k)*2; % k结点第2个位移的整体编码
HK((N1-1):N1,(N2-1):N2)=HK((N1-1):N1,(N2-1):N2)... +EKT(j*2-1:j*2,k*2-1:k*2);
end
end
end
% 由结点力生成总荷载向量列阵
for i=1:NFPOIN % 对结点荷载个数进行循环
N1=FPOIN(i,1); % 作用荷载的结点号
N1=N1*2-2; % 该结点号对应第一个位移编码- 1
for j=1:2
FORCE(N1+j)=FORCE(N1+j)+FPOIN(i,j+1);%取结点荷载end
end
% 总刚、总荷载进行边界条件处理
for j=1:NVFIX % 对约束个数进行循环
N1=FIXED(j);
HK(1:2*NPOIN,N1)=0; HK(N1,1:2*NPOIN)=0; HK(N1,N1)=1;
% 将零位移约束对应的行、列变成零,主元变成1
FORCE(N1)=0;
end
%---------------------------------------------------------
DISP=HK\FORCE % 方程求解,HK先求逆再与力向量左乘
%---------------------------------------------------------
% 求结构各个单元内力
EDISP=zeros(4,1); % 单元位移列向量清零
for i=1:NELEM % 对单元个数进行循环
for j=1:2 %对杆端循环
% i单元左右端结点号*2 = 该结点的最后一个位移编码
N1=LNODS(i,j)*2;
% 取一端的单元位移列向量
EDISP(2*j-1:2*j)=DISP(N1-1:N1);
end
% 生成局部单刚(局部坐标) 右手坐标系
EK=ele_EK(i,LNODS,COORD,YOUNG);
T=zbzh(i,LNODS,COORD); % 坐标转换矩阵
FE=EK*T*EDISP; %计算局部坐标杆端力(由结点位移产生)
FE % 打印杆端力
end%------------------------------------------------------------------------------- ele_EK.m % 计算单元刚度矩阵函数EK
% 入口参数:单元号、单元信息数组、结点坐标、弹性模量
% 出口参数:局部单元刚度矩阵EK
function EK=ele_EK(i,LNODS,COORD,E)