MATLAB计算平面桁架体系的程序
桁架优化matlab算法
桁架优化matlab算法
桁架优化Matlab 算法
【引言】
桁架是一种常见的结构体系,它由连接节点的杆件构成。桁架通常在工程设计中用于支撑、加固或分散载荷。优化桁架结构对于减少材料使用、提高结构强度和降低成本非常重要。Matlab 是一种功能强大的计算软件,它提供了许多优化算法和工具。本文将介绍如何使用Matlab 进行桁架优化的算法实现。
【第一步- 建立力学模型】
桁架的力学模型是优化过程的基础。在Matlab 中,可以使用矩阵表示力学模型。首先,我们需要定义桁架的节点和杆件。节点用坐标表示,杆件用节点之间的连接关系表示。根据节点和杆件的定义,可以构建节点坐标矩阵和链接关系矩阵。
【第二步- 约束条件和目标函数】
在进行桁架优化时,通常会遇到一些约束条件和目标函数。典型的约束条件可能包括杆件的最大和最小尺寸限制、节点的最大和最小高度限制等。目标函数可以是桁架的重量、刚度或模态频率等。根据具体问题,我们需要定义合适的约束条件和目标函数。
【第三步- 优化算法】
Matlab 提供了许多优化算法,如遗传算法、粒子群优化算法等。我们需要选择合适的算法来解决桁架优化问题。对于离散变量的优化,可以使用遗传算法。对于连续变量的优化,可以使用粒子群优化算法。选择合适的算法后,可以将约束条件和目标函数输入优化算法,得到优化结果。
【第四步- 结果分析】
优化算法完成后,我们需要对结果进行分析。可以通过绘制优化后的桁架结构来比较与原始结构的差异。此外,还可以从目标函数的值来评估优化结果。如果目标函数的值较小,则说明优化结果较优。
matlab桁架结构有限元计算
matlab桁架结构有限元计算
摘要:
一、引言
- 介绍MATLAB在桁架结构有限元计算中的应用
- 说明本文的主要内容和结构
二、有限元计算原理
- 有限元方法的背景和基本原理
- 有限元方法在桁架结构分析中的应用
三、MATLAB实现桁架结构有限元计算
- MATLAB的基本操作和编程基础
- 使用MATLAB进行桁架结构有限元计算的步骤和示例
四、MATLAB桁架结构有限元计算的应用
- 分析不同桁架结构的特点和计算结果
- 探讨MATLAB在桁架结构有限元计算中的优势和局限
五、结论
- 总结MATLAB在桁架结构有限元计算中的应用和优势
- 展望MATLAB在桁架结构分析中的未来发展方向
正文:
一、引言
随着计算机技术的不断发展,有限元方法已经成为工程界解决复杂问题的重要手段。MATLAB作为一款功能强大的数学软件,可以方便地实现桁架结构
的有限元计算。本文将介绍MATLAB在桁架结构有限元计算中的应用,并详细阐述其操作方法和计算原理。
二、有限元计算原理
1.有限元方法的背景和基本原理
有限元法是一种数值分析方法,通过将连续的求解域离散为离散的单元,将复杂的问题转化为求解单元的线性或非线性方程组。有限元方法具有适应性强、精度高、计算效率高等优点,广泛应用于固体力学、流体力学、传热等领域。
2.有限元方法在桁架结构分析中的应用
桁架结构是一种由杆件组成的结构,其节点只有三个自由度。有限元方法可以有效地分析桁架结构的强度、刚度和稳定性,为工程设计提供理论依据。
三、MATLAB实现桁架结构有限元计算
1.MATLAB的基本操作和编程基础
《有限元基础教程》_【MATLAB算例】3.2.5(2)四杆桁架结构的有限元分析(Bar2D2Nod
【MA ■[:■】■■ 四杆桁架结构的有限元分析但ar2D2Node )
如图3-8所示的结构,各个杆的弹性模量和横截面积都为
2
A = 100mm 。试基于MATLA
B 平台求解该结构的节点位移、单元应力以及支反力。
解答:对该问题进行有限元分析的过程如下。 (1)结构的离散化与编号
对该结构进行自然离散, 节点编号和单元编号如图 3-8所示,有关节点和单元的信息见
表 3-1~ 表 3-3。
(2 )计算各单元的刚度矩阵(基于国际标准单位) 建立一个工作目录,将所编制的用于平面桁架单元分析的
4个MATLAB 函数放置于该
工作目录中,分别以各自函数的名称给出文件名,即:Bar2D2Node_Stiffness ,
Bar2D2Node_Assembly , Bar2D2Node_Stress , Bar2D2Node_Forces 。然后启动 MATLAB ,将 工作目录设置到已建立的目录中,在
MATLAB 环境中,输入弹性模量 E 、横截面积A ,各
点坐标 x1,y1,x2,y2,x3,y3,x4,y4,角度 alpha 1, alpha 2 和 alpha 3,然后分别针对单元 1,2, 3 和 4,调用4次Bar2D2Node_Stiffness ,就可以得到单元的刚度矩阵。相关的计算流程如下。
>>E=2.95e11; >>A=0.0001; >>x 1=0; >>y1=0; >>x2=0.4; >>y2=0; >>x3=0.4; >>y3=0.3; >>x4=0; >>y4=0.3; >> alpha1=0; >> alpha2=90;
桁架结构的有限元分析MATLAB
2.目前问题的研究现状
目前在普遍刚桁架的结构设计中,工程中普遍采用的发放时按理想铰接模型进行计算,并很据计算出的杆件界面应力选择合适的杆件型号。计算桁架结构内力时,一般采用如下基本假定:(1)接单均为铰接;(2)杆件轴线平直相交于节点中心;(3)荷载作用线通过桁架的节点。对于平面桁架还要求所有杆件轴线及荷载作用线在同一平面内。
对于桁架结构的应力分析,在方法上,结构力学中有结点法和截面法,另外还有有限元法。
3.本文如何进行研究
本文运用有限元的分析方法,通过MATLAB软件,对5杆桁架结构进行了内力分析。先对整体结构进行分析,确定节点编号及杆件编号。然后写出每个杆的单元刚度矩阵,根据角度,写出变换矩阵并得到整体坐标下的刚度矩阵。再根据节点编号对单刚进行叠加得到整个桁架的刚度矩阵。写出位移向量后对总刚划行划列,得到所有节点的位移后就可求得每根杆的受力状态。
将图中施加的20kn的力改为10kn和30kn后可得到力矩阵分别为25996625996677628987762898三结论由所求结果可知12两杆的受力较小从节约材料的角度考虑可以适当减小界面尺寸这不影响结构的可靠程度而且尽可能的做到了等强度
桁架计算(TRUSS)
桁架内力计算程序(TRUSS)
一、程序功能及编制方法
桁架内力计算程序(TRUSS),能计算任意平面和空间桁架(包括网架)在结点荷载作用下各结点的位移和各杆的轴力。程序采用变带宽一维数组存储总刚度矩阵,先处理法引进支座条件。计算结果输出各结点的位移和各杆的轴力。
二、程序使用方法
使用方法与“APF”程序相同。用文件编辑编辑器建立数据文件后即可运行。计算结果将写在结果文件中。
三、数据文件填写格式
数据文件填写格式大致与APF程序相似。
1.总信息:T,NJ,NE,NR,NB,NP,EO,DS
其中:T——桁架类型,平面桁架 T=2,空间桁架 T=3。
NR——支座约束数。
其他变量与APF程序相同。
2.结点坐标数组XYZ(NJ, 3)
每个结点填一行,每行三个数分别填写结点的x,y,z三个坐标数值,平面桁架只填x,y 值(单位:m)。
3.单元信息数组G(NE)
采用紧缩存储方式,每个单元填一个数。把单元的左端、右端结点号和杆的类型号三个数紧缩为一个数。例如某单元左端结点号为15,在端结点号为8,类型号为3,则写成0.15083,一般格式为0.×××××。
4.单元截面信息数组AI(NB)
填写各类单元的杆截面面积(m2)。
5.约束信息数组R(NR)
采用紧缩存储方式,每个约束(支座链杆)填一个数。把约束作用的作用点写在该数的整数部分,约束的方向写在小数部分。x方向的约束为“l”,y方向的约束为“2”。例如某支座链杆作用在 17号结点上,方向沿整体坐标 y方向,则写为 17.2,一般格式为××.×。
6.结点荷载信息数组F(NP,2)
matlab平面铰结桁架的总刚度矩阵
一、简介
Matlab是一种用于数学计算、数据分析和可视化的强大工具,它在工程领域得到广泛应用。在结构工程中,铰结桁架是常见的结构形式,其总刚度矩阵是描述铰结桁架结构刚度的重要参数。本文将讨论使用Matlab计算铰结桁架的总刚度矩阵的方法和步骤。
二、铰结桁架的总刚度矩阵
铰结桁架是由多个铰接连接的杆件组成的结构系统,其中铰接是指
连接处可以进行旋转而不受外力的约束。铰结桁架的总刚度矩阵是描
述整个结构系统的刚度性能的矩阵,它可以通过对结构进行离散化分
析得到。总刚度矩阵的构造依赖于结构的几何形状、材料特性和边界
条件等因素,因此需要进行复杂的计算。
三、 Matlab计算总刚度矩阵的方法
在Matlab中,可以使用矩阵运算和函数编程来计算铰结桁架的总
刚度矩阵。首先需要定义结构的几何形状和材料特性,然后建立结构
的节点和单元信息。接着可以利用有限元分析等数值方法来进行总刚
度矩阵的计算,最终得到描述结构刚度的矩阵。
四、 Matlab计算总刚度矩阵的步骤
1. 定义结构的几何形状和材料特性:在Matlab中,可以通过定义
结构的节点坐标、单元连接关系和材料参数等来描述结构的几何形状
和材料特性。
2. 建立结构的节点和单元信息:根据结构的几何形状和材料特性,可以建立结构的节点和单元信息,以便进行后续的计算和分析。
3. 利用有限元分析进行计算:可以利用Matlab中的有限元分析函数来对结构进行离散化分析,并获取结构的总刚度矩阵。
4. 输出总刚度矩阵:最终可以通过Matlab的矩阵操作来输出铰结桁架的总刚度矩阵,用于后续的结构分析和设计工作。
2D四杆桁架结构的有限元分析实例
实例:2D四杆桁架结构的有限元分析
学习有限元方法的一个最佳途径,就是在充分掌握基本概念的基础上亲自编写有限元分析程序,这就需要一个良好的编程环境或平台。MATLAB软件就是这样一个平台,它以功能强大、编程逻辑直观、使用方便见长。将提供有限元分析中主要单元完整的MATLAB程序,并给出详细的说明。
1D杆单元的有限元分析MATLAB程序(Bar1D2Node)
最简单的线性杆单元的程序应该包括单元刚度矩阵、单元组装、单元应力等几个基本计算程序。下面给出编写的线性杆单元的四个MATLAB函数。
Bar1D2Node _Stiffness(E,A,L)
该函数计算单元的刚度矩阵,输入弹性模量E,横截面积A和长度L,输出单元刚度矩阵k(2×2)。
Bar1D2Node _Assembly(KK,k,i,j)
该函数进行单元刚度矩阵的组装,输入单元刚度矩阵k,单元的节点编号i、j,输出整体刚度矩阵KK。
Bar1D2Node _Stress(k,u,A)
该函数计算单元的应力,输入单元刚度矩阵k、单元的位移列阵u(2×1)以及横截面积A计算单元应力矢量,输出单元应力stress。
Bar1D2Node_Force(k,u)
该函数计算单元节点力矢量,输入单元刚度矩阵k和单元的位移列阵u(2×1),输出2×1的单元节点力矢量forces。
基于1D杆单元的有限元分析的基本公式,写出具体实现以上每个函数的MATLAB程序如下。
%%%%%%%%%%% Bar1D2Node %% begin %%%%%%%%%
function k=Bar1D2Node_Stiffness(E, A, L)
MATLAB平面桁架算例
陈继乐专业:工程力学学号:1120150528
Summary
In this term, I have learned professional English class of Mr. Sun. There are five students in this class. Each of us would make a presentation in class. I have learned a lot. Here is the main content of my presentations.
1. The Introduction of mechanics of materials
The research object of mechanics of materials is structure member. Structure members include bar,rod,plate,shell and clump body. Bar and rod are the main objects of mechanic of material. The task of mechanics of materials is as following. Under the request that the strength, rigidity, stability is satisfied, offering the necessary theoretical foundation and calculation method for determining reasonable shapes and dimensions, choosing proper materials for the components at the most economic price. There are four assumptions of the solid deformable bodies including continuity, homogeneity, isotropy and small deformations. Basic types of the deformation of rods are axial tension, shear, torsion and bending.2.Statically determinate problems
有限元方法与MATLAB程序设计 第3章 桁架和刚架
Ue
ui
u
j
另一种推导方法 N [1 x]A11 形函数矩阵 u(x) [1 x]a [1 x]A11Ue NUe
a
0 1
u(0) [1 0]a ui u(l) [1 l]a u j
1 0
A1 1
l
a A11Ue A1a Ue
4
§3.1.1 位移模式
u(x) [N1 N2 ]Ue
显示结果 [ c^2, c*s, -c^2, -c*s] [ c*s, s^2, -c*s, -s^2] [ -c^2, -c*s, c^2, c*s] [ -c*s, -s^2, c*s, s^2]
T = [T0,zeros(2,2); zeros(2,2),T0];
disp(T'*k0*T)
10
Fyi
Fxj Fyj
EA l
0
1
0
0 0 0
0 1 0
0
vi
0 0
u v
j j
单元坐标系下的 1 0 1 0
单元刚度矩阵
ke
EA l
0
1
0 0
0 1
0 0
0
0
0
0
7
§3.1.3 整体坐标系下的单元刚度方程
Fxi Fxi cos Fyi sin Fyi Fxi sin Fyi cos Fxj Fxj cos Fyj sin
桁架结构MATLAB编程
桁架结构
% 变量说明
% 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); %结点荷载数
NFPRES=fscanf(FP1,'%d',1); %非结点荷载数
YOUNG=fscanf(FP1,'%f',1); %弹性模量
% 读取结构信息
LNODS=fscanf(FP1,'%f',[4,NELEM])'
% 单元定义:左、右结点号,面积,惯性矩(共计 NELEM组)COORD=fscanf(FP1,'%f',[2,NPOIN])'
% 坐标: x,y坐标(共计 NPOIN 组)
FPOIN=fscanf(FP1,'%f',[3,NFPOIN])'
matlab桁架结构有限元计算
matlab桁架结构有限元计算
摘要
本文介绍了使用M ATL A B进行桁架结构有限元计算的方法。首先,我
们将讨论桁架结构的基本概念和有限元分析的原理。然后,我们将详细介
绍如何使用MA TL AB建立桁架结构的有限元模型,并进行力学分析。最后,我们将通过一个案例演示如何使用MA TL AB进行桁架结构的有限元计算,
以及如何分析结果。
1.引言
桁架结构是一种由杆件和节点组成的空间结构。它具有轻巧、刚性和
稳定等特点,在工程领域中得到了广泛应用。有限元方法是一种常用的工
程分析方法,可以用于求解桁架结构的应力、变形等问题。MA T LA B是一
个功能强大的计算软件,具有丰富的工具箱和便于使用的界面,可以用于
桁架结构的有限元分析。
2.桁架结构的基本概念
桁架结构由若干杆件和节点组成,杆件可以看作是刚性杆,节点是杆
件的连接点。桁架结构常用于承受桥梁、建筑物等结构的荷载。桁架结构
的节点可以是固定支撑、铰支撑或滑动支撑等。杆件可以是直杆、曲杆或
弯曲杆等。桁架结构的力学行为可以通过有限元方法进行分析。
3.有限元分析的原理
有限元分析是一种将复杂结构离散化为单元,通过对单元的力学计算
得到整体结构的力学行为的方法。有限元分析的基本步骤包括离散化、建
立单元模型、求解节点位移和计算单元力等。在桁架结构的有限元分析中,常用的单元类型有一维梁单元和杆单元。
4.使用MAT LAB进行桁架结构有限元分析
使用MA TL AB进行桁架结构有限元分析的步骤如下:
4.1建立有限元模型
首先,需要根据实际情况确定桁架结构的几何尺寸和材料属性,然后使用MA TL AB的有限元建模工具箱创建桁架结构的有限元模型。模型的建立包括定义节点、杆件和单元,设置边界条件和加载。
matlab桁架结构有限元计算
matlab桁架结构有限元计算
在MATLAB中,进行桁架结构的有限元计算可以按照以下步
骤进行:
1. 定义节点和单元:根据实际问题的几何形状和拓扑关系,定义桁架结构的节点和单元。节点是桁架结构的连接点,单元是连接节点的构件。
2. 定义材料属性和截面属性:根据实际问题的材料和截面要求,定义桁架结构的材料属性和截面属性。材料属性包括弹性模量和泊松比等,截面属性包括截面面积和惯性矩等。
3. 组装刚度矩阵:根据节点和单元的几何形状和材料属性,计算每个单元的局部刚度矩阵,然后根据单元和节点的连接关系,将局部刚度矩阵组装成整体刚度矩阵。
4. 施加边界条件:根据实际问题的边界条件,将边界节点的位移固定为零,或施加位移或力的约束条件。
5. 求解位移和反力:使用求解线性方程组的方法,求解位移和反力。可以使用MATLAB中的线性方程组求解函数(如'\''运
算符)来计算。
6. 计算应力和应变:根据位移和节点的几何形状,计算节点上的应变,然后根据材料属性,计算节点上的应力。
以上步骤涵盖了桁架结构的有限元计算的基本流程,具体实现时需要根据实际问题进行适当的调整和扩展。
平面桁架静力分析
实验二:平面桁架的静力分析
一、平面桁架静力分析程序框图
平面桁架静力分析程序名为PTSAP(Plane Truss Structural Analysis Program)。其主要表示符说明如下:
TL(20)——算例标题。实型数组,输入参数。
NJ——结点总数。整型变量,输入参数。
N——结构的自由度,即整体刚度矩阵阶数。整型变量,输入参数。
NNE——单元总数。整型变量,输入参数。
NMT——单元类型总数。同类型单元E、A 相同。整型变量,输入参数。
NPJ——结点荷载总数。整型变量,输入参数。
JE——(2,100)——单元两端结点号数组。整型变量,输入参数。
JN(2,100)——结点位移号数组。整型变量,输入参数。
X(100)、Y(100)——结点坐标数组,X(I)、Y(I)分别为I 号结点的x 坐标、y 坐标。
JEA(100)——单元类型信息数组。JEA(I)为第 I 单元的类型号,同类型的单元弹性模量横截面积相同。整型变量,输入参数。
EA(2,25)——各类型单元的物理、几何性质数组。EA(1,I)、EA(2,I)分别为第 I 类型单元的弹性模量、截面面积。输入参数,实型数组。
JPJ(50)——结点荷载的位移号数组。JPJ(I)为与第 I 个结点荷载相应位移分量的位移号。整数数组,输入参数。
PJ(50)——结点荷载的位移号数组。PJ(I)为与第I 个结点荷载的数值。实型数组,输入参数。
M(4)——单元定位数组,及单元两端的位移号数组。整型变量,输入参数。
AK(200,200)——存结构整体刚度矩阵的上半带元素。
matlab中关于桁架问题的程序
clear; %清除内存变量
ss1=input('give a data filename:','s');
fp1=fopen(ss1,'r');
ss2=input('give a result filename:','s');
fp2=fopen(ss2,'w');
%1.读入结构数据、建立累积约束表向量、建立结构刚度矩阵
%1.1.结构参数和弹性模量
[m,c]=fscanf(fp1,'%u',[1]); %杆件数
[nj,c]=fscanf(fp1,'%u',[1]); %节点数
[nrj,c]=fscanf(fp1,'%u',[1]); %约束节点
[e,c]=fscanf(fp1,'%e',[1]); %弹性模量
fprintf(fp2,'(1)结构参数和弹性模量\n');
fprintf(fp2,'杆件数节点数约束节点数弹性模量\n');
fprintf(fp2,'%3u %8u %8u %13.3e\n',m,nj,nrj,e);
fprintf(fp2,'\n');
%1.2. 节点坐标
pc(1:2,1:nj)=0
for jx=1:nj
[k,c]=fscanf(fp1,'%u',[1]); %节点号
[pc(:,k),c]=fscanf(fp1,'%f',[2]); %x坐标、y坐标
end
fprintf(fp2,'(2)节点坐标\n');
fprintf(fp2,'节点号x坐标y坐标\n');
fprintf(fp2,'%3u %13.3e %13.3e\n',[1:nj;pc(:,1:nj)]);
2D四杆桁架结构的有限元分析实例学习资料
2D四杆桁架结构的有限元分析实例
实例:2D四杆桁架结构的有限元分析
学习有限元方法的一个最佳途径,就是在充分掌握基本概念的基础上亲自编写有限元分析程序,这就需要一个良好的编程环境或平台。MATLAB软件就是这样一个平台,它以功能强大、编程逻辑直观、使用方便见长。将提供有限元分析中主要单元完整的MATLAB程序,并给出详细的说明。
1D杆单元的有限元分析MATLAB程序(Bar1D2Node)
最简单的线性杆单元的程序应该包括单元刚度矩阵、单元组装、单元应力等几个基本计算程序。下面给出编写的线性杆单元的四个MATLAB函数。
Bar1D2Node _Stiffness(E,A,L)
该函数计算单元的刚度矩阵,输入弹性模量E,横截面积A和长度L,输出单元刚度矩阵k(2×2)。
Bar1D2Node _Assembly(KK,k,i,j)
该函数进行单元刚度矩阵的组装,输入单元刚度矩阵k,单元的节点编号i、j,输出整体刚度矩阵KK。
Bar1D2Node _Stress(k,u,A)
该函数计算单元的应力,输入单元刚度矩阵k、单元的位移列阵u(2×1)以及横截面积A计算单元应力矢量,输出单元应力stress。
Bar1D2Node_Force(k,u)
收集于网络,如有侵权请联系管理员删除
该函数计算单元节点力矢量,输入单元刚度矩阵k和单元的位移列阵u(2×1),输出2×1的单元节点力矢量forces。
基于1D杆单元的有限元分析的基本公式,写出具体实现以上每个函数的MATLAB程序如下。
%%%%%%%%%%% Bar1D2Node %% begin %%%%%%%%%
Matlab求解理论力学问题系列(一)刚体系统及桁架受力问题
第43卷第2期力学与实践2021年4月
M a tla b 求解理论力学问题系列(_)
刚体系统及桁架受力问题
高云峰〇
(清华大学航天航空学院,北京100084)
如果在理论力学教学中引入M a t l a b ,根据经验, 只需要三次课,就可以让学生掌握代数方程和微分 方程的数值求解、符号推导、动画演示等,让学生对 理论力学问题的理解有飞跃式的提升;而教学中某 些解题技巧性的内容则可以压缩,保持总学时不变。 具体来说:
(1)
在静力学中,以往对于复杂系统的受力分析
通常要适当取分离体,有时需要高度的技巧W ;同时 由于传统计算能力的限制,往往只要求解出某些部 件的受力;如果采用M a t l a b 处理,可以采用统一的 处理方式,把系统全部拆开,快速求出所有部件的受 力,对系统的整体和各部件受力有更全面的了解。
(2)
在运动学中,以往分析系统运动时,强调求 特定时刻或特定位置某点或刚体的速度和加速度,而 系统的整体运动特点、某些点的运动轨迹有时难以想 象;而采用M a t l a b 处理,可以求出系统任意点或刚 体在任意时刻的速度和加速度等运动量,特别是其 画图和动画演示功能,可以快速直观地显示系统的 整个运动过程、给出任意点的运动轨迹。
(3)
在动力学中,以往绝大部分问题都只能列写 动力学方程,通常没有解析解,传统数学分析的方法 也用不上,系统丰富复杂的动力学现象很难从方程 中看出;而采用M a t l a b 处理,可以获得系统整个运 动过程中的受力、速度和加速度等量,还可以快速直 观地演示系统的运动过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%用于计算平面桁架结构体系,2013年3月16日10:49
function mainprogram
%输入结构信息,包括GEOArray,ID-Array,IEN-Array,ndofs,MAT,FORCE。
%GEOArray为节点几何参数
%IDArray为节点自由度表
%IENArray为单元的节点参数及单元特性(MAT)号
%ndofs为自由度个度
%MAT为材料矩阵
%FORCE为力矩阵,列向量
%LMArray为单元对应的自由度,行:[单元号 ix iy jx jy]...
%ix,iy,jx,jy对应单元i,j节点四个自由度,数值表示相应的结构自由度。
%KGlobal为整体刚度矩阵
%DISPLACEMET为位移矩阵
%ELEMENTDIS为单元节点力矩阵,行:[单元号 Uix Uiy Ujx Uiy]
%ELEMENTFORCE为单元节点力矩阵,行:[单元号 Fix Fiy Fjx Fiy]
clc;
global GEOArray IENArray ndofs MAT FORCE LMArray KGlobal DISPLACEMET ELEMENTDIS ELEMENTFORCE
%---------------------------------------------------------------------
%输入格式说明
%GEOArray行:[节点号 x y],节点号为1,2,3...
%IDArray行:[节点号 DOFx DOFy],节点号为1,2,3...
%IENArra行:[单元号 jointi jointj 材料号],单元号为1,2,3...
%MAT行:[材料号 E A],材料号为1,2,3...
%FORCE为列向量
%---------------------------------------------------------------------
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GEOArray=[1 2 3 4;
0 10 20 10;
0 10 0 0]';
IDArray=[1 0 0;
2 1 2;
3 0 0;
4 3 4];
IENArray=[1 2 3 4 5;
1 1 4 3 4;
2 4 2 2 3;
1 1 1 1 1]' ;
ndofs=4;
MAT=[1 210e9 0.025];
FORCE=[40e6 -30e6 0 0]';
%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%---------------------------------------------------------------------
GENLMA(IDArray);%生成单元-自由度矩阵
KGlobal=zeros(ndofs,ndofs);
DISPLACEMET=zeros(ndofs);
[m,n]=size(IENArray);%获取单元个数
%---------------------------------------------------------------------
%绘制结点图形
jointx=GEOArray(:,2);%取出节点坐标
jointy=GEOArray(:,3);
[mn,mm]=max(jointx);%确定节点坐标范围
xmax=jointx(mm);
[mn,mm]=min(jointx);
xmin=jointx(mm);
[mn,mm]=max(jointy);
ymax=jointy(mm);
[mn,mm]=min(jointy);
ymin=jointy(mm);
plot(jointx,jointy,'ro');%绘制节点
hold on;
grid on;
axis equal;%锁定纵横比
axis([xmin-0.1*xmin xmax+0.1*xmax ymin-0.1*ymin ymax+0.1*ymax]);%设定显示坐标范围
%---------------------------------------------------------------------
%生成单元刚度矩阵并集成
for idm=1:m
ke=ESTIFFNESS(idm);%生成第idm个单元的单元刚度矩阵
ASSEMBLAGEke(idm,ke);%将生成的单元刚度矩阵集成到整体刚度矩上三角元素中
GetKGlobal;%生成完整的整体刚度矩阵
end
%求解位移
FindDis;
%计算单元节点位移
findELEMENTDIS;
%计算单元节点力
findELEMENTFORCE;
%打印结果
printfRESULT;
return;
function GENLMA(IDArray)
%生成单元-自由度矩阵
global LMArray IENArray
LMArray(:,1)=IENArray(:,1);
L=length(LMArray)
;
for i=1:L
LMArray(i,2)=IDArray(IENArray(i,2),2);
LMArray(i,3)=IDArray(IENArray(i,2),3);
LMArray(i,4)=IDArray(IENArray(i,3),2);
LMArray(i,5)=IDArray(IENArray(i,3),3);
end
return;
function ke=ESTIFFNESS(idm)
%提取单元节点及节点坐标
global IENArray MAT GEOArray
jointi=IENArray(idm,2);
jointj=IENArray(idm,3);
x1=GEOArray(jointi,2);
y1=GEOArray(jointi,3);
x2=GEOArray(jointj,2);
y2=GEOArray(jointj,3);
%------------------------------------------------------------------
%绘制单元
jointx=[x1 x2];
jointy=[y1 y2];
plot(jointx,jointy,'k-','LineWidth',2);
hold on;
%------------------------------------------------------------------
%得到单元倾角和整体坐标系下单元刚度矩阵
xy=[x2-x1 y2-y1];%生成单元向量
length=sqrt((xy(1))^2+(xy(2))^2);%单元长度
sinfi=xy(2)/length;
cosfi=xy(1)/length;
%不考虑材料特性的单元刚度举证
ke=[cosfi^2 cosfi*sinfi -cosfi^2 -cosfi*sinfi
cosfi*sinfi sinfi^2 -cosfi*sinfi -sinfi^2
-cosfi^2 -cosfi*sinfi cosfi^2 cosfi*sinfi
-cosfi*sinfi -sinfi^2 cosfi*sinfi sinfi^2];
%提取材料特性
E=MAT(IENArray(idm,4),2);
A=MAT(IENArray(idm,4),3);
%生成整体坐标系下单元刚度矩阵
ke=E*A/length*ke;
return;
function ASSEMBLAGEke(idm,ke)
global KGlobal LMArray
%将单元对非0的自由度贡献的刚度集成到整体刚度矩阵中
for i=2:5
ixy=LMArray(idm,i);%按顺序搜索非0自由度
if ixy~=0
for j=i:5
jxy=LMArray(idm,j);%后续非0自由度
if jxy~=0
if ixy>jxy
KGlobal(jxy,ixy)=ke(i-1,j-1)+KGlobal(jxy,ixy);
else
KGlobal(ixy,jxy)=ke(i-1,j-1)+KGlobal(ixy,jxy);
end
end
end
end
end
return;
function GetKGlobal
global KGlobal
[m,n]=size(KGlobal);
for i=2:m
for j=1:i-1
KGlobal(i,j)=KGlobal(j,i);%将上三角元素复制到下三角
end
end
return;
function FindDis
global KGlobal DISPLACEMET FORCE
DISPLACEMET=KGlobal\FORCE;%KD=F;D=K\F。求解位移
return;
function findELEMENTDIS
%计算单元节点位移
global LMArray DISPLACEMET ELEMENTDIS
ELEMENTDIS(:,1)=LMArray(:,1);
L=length(ELEMENTDIS);
for i=1:L
for j=2:5
degj=LMArray(i,j);%提取单元节点的自由度
if LMArray(i,j)~=0
ELEMENTDIS(i,j)=DISPLACEMET(degj);%提取对应自由度的位移
else
ELEMENTDIS(i,j)=0;
end
end
end
return;
function findELEMENTFORCE
%计算单元节点力
global LMArray ELEMENTDIS ELEMENTFORCE
ELEMENTFORCE(:,1)=LMArray(:,1);
L=length(ELEMENTFORCE);
for idm=1:L
ke=ESTIFFNESS(idm);%生成第idm个单元的单元刚度矩阵
ELEMENTFORCE1=ke*(ELEMENTDI
S(idm,2:5))';%生成第idm个单元的节点力
ELEMENTFORCE(idm,2:5)=ELEMENTFORCE1';%集成
end
return;
function printfRESULT
global KGlobal DISPLACEMET ELEMENTDIS ELEMENTFORCE
% 检查数据文件是否已存在,确保无重复文件名,避免数据丢失
% 创建模型数据库文件
% 检查文件是否创建成功
flag=0;%可输入状态标志,0为不可输入,1为可以输入
blag=fopen('work.dat','r');
if blag==-1
fid_in=fopen('work.dat','w');
if fid_in==-1;
sprintf( '错误:文件创建失败!!!' )
end
fclose(fid_in);
flag=1;
else
blag2=2;
blag2=input( sprintf( '错误:work.dat文件已存在,是否覆盖? ( Yes=1 / No=2 ): ') ) ;
if blag2==1
fid_in=fopen('work.dat','w');
if fid_in==-1;
sprintf( '错误:文件创建失败!!!' )
end
else
disp(sprintf( '\n请移出work.dat文件,然后再次运行本程序 \n\n' ))
end
fclose(fid_in);
flag=1;
end
if flag==1
fid_in=fopen('work.dat','w');
if fid_in==-1;
sprintf( '错误:文件打开失败!!!' )
else
fprintf(fid_in,'%s\n','用于计算平面桁架结构体系(MATLAB2007b),2013年3月16日10:49');
fprintf(fid_in,'%s\n\n\n\n','---------------------------------------------------------');
fprintf(fid_in,'%s\n','整体刚度矩阵');
fprintf(fid_in,'%s\n','KGlobal=');
%打印整体刚度矩阵
[imax,jmax]=size(KGlobal);
for i=1:imax
for j=1:jmax
fprintf(fid_in, '%16.5e ', KGlobal(i,j));
end
fprintf(fid_in,'\n');
end
%打印整体位移矩阵
fprintf(fid_in, '\n\n\n%s\n', '整体位移矩阵');
fprintf(fid_in, '%s\n', 'DISPLACEMET= [自由度号 U]');
imax=length(DISPLACEMET);
for i=1:imax
fprintf(fid_in, '%6d %16.5e\n', i, DISPLACEMET(i));
end
%打印单元节点力
fprintf(fid_in, '\n\n\n%s\n', '单元节点位移矩阵');
fprintf(fid_in, '%s\n', 'ELEMENTDIS= [单元号 Uix Uiy Ujx Ujy]');
[imax,jmax]=size(ELEMENTDIS);
for i=1:imax
fprintf(fid_in, '%6d ', ELEMENTDIS(i,1));
for j=2:jmax
fprintf(fid_in, '%16.5e ', ELEMENTDIS(i,j));
end
fprintf(fid_in,'\n');
end
%打印单元节点力
fprintf(fid_in, '\n\n\n%s\n', '单元节点力矩阵');
fprintf(fid_in, '%s\n', 'ELEMENTFORCE= [单元号 Fix Fiy Fjx Fjy]');
[imax,jmax]=size(ELEMENTFORCE);
for i=1:imax
fprintf(fid_in, '%6d ', ELEMENTFORCE(i,1));
for j=2:jmax
fprintf(fid_in, '%16.5e ', ELEMENTFORCE(i,j));
end
fprintf(fid_in,'\n');
end
end
fclose(fid_in);
end
return;