基于MATLAB平面桁架有限元分析研究_李远瑛
- 格式:pdf
- 大小:650.44 KB
- 文档页数:5
matlab桁架结构有限元计算(最新版)目录一、引言二、MATLAB 与桁架结构有限元计算的概述1.MATLAB 简介2.桁架结构有限元计算的基本流程三、MATLAB 在桁架结构有限元计算中的应用实例1.铝制起重机垂直和水平部分的有限元分析2.基于 MATLAB 的三维桁架有限元分析3.五杆桁架有限元分析四、MATLAB 在桁架结构有限元计算中的优势与局限1.优势2.局限五、结论正文一、引言在工程领域中,桁架结构由于其优越的力学性能和简单的结构形式,被广泛应用于桥梁、起重机、输电塔等大型工程项目中。
为了确保桁架结构的安全和稳定,对其进行有限元分析是必不可少的。
而 MATLAB 作为一种强大的数学软件,可以方便地进行有限元计算。
本文将介绍如何利用MATLAB 进行桁架结构有限元计算。
二、MATLAB 与桁架结构有限元计算的概述1.MATLAB 简介MATLAB(Matrix Laboratory)是一款广泛应用于科学计算、数据分析和可视化的软件。
它基于矩阵计算,可以方便地处理大量数据,并提供了丰富的函数库和工具箱。
2.桁架结构有限元计算的基本流程桁架结构有限元计算的基本流程包括以下几个步骤:(1)建立有限元模型:根据实际问题,建立桁架结构的有限元模型,包括节点、单元、约束和载荷等。
(2)组装刚度矩阵:根据有限元模型,组装桁架结构的刚度矩阵。
(3)施加边界条件和载荷:对桁架结构施加边界条件和载荷。
(4)求解:利用求解器求解桁架结构的内力、应力和应变等问题。
(5)后处理:对计算结果进行数据结构化保存,以便进行后期处理和分析。
三、MATLAB 在桁架结构有限元计算中的应用实例1.铝制起重机垂直和水平部分的有限元分析某铝制起重机的垂直和水平部分由铝制成,杨氏模量为 e70,gpa,横截面为 2 cm。
对角桁架构件由钢制成,杨氏模量为 e210,gpa,横截面为3 cm。
结构承受荷载 p6000,n。
假设两个支撑节点固定(即 x 和 y 位移为 0)。
MATLAB在平面桁架计算中的应用作者:王鹏周琪琛姚姗姗来源:《卷宗》2016年第10期摘要:本文基于平面桁架有限元分析的基本原理,利用MATLAB语言编程对有外荷载作用的平面桁架进行有限元分析,结果表明,通过MATLAB软件对平面桁架受力分析的结果与精确解吻合。
本文介绍的方法,在平面桁架有限元中具有普遍的适用性,对复杂的平面桁架结构有限元分析有一定的参考价值。
关键词:平面桁架;MATLAB;有限元分析MATLAB是以矩阵为基本的运算单元,可以灵活地进行矩阵运算、图形绘制、编程开发等,具有编程效率高、可移植性强、计算速度快等特点;有限元分析法是根据变分原理求解数学及物理问题的数值计算方法,它是随着近年来计算机技术的迅速发展而得到的广泛应用。
本文以解决一个实际的平面桁架问题为例,运用有限元分析法,并利用MATLAB软件进行编程计算来演示MATLAB软件在平面桁架中的应用。
接下来,首先介绍解决平面桁架问题的有限元分析方法。
1 平面桁架有限元分析的基本原理在用有限元法对平面桁架受力分析中,平面桁架元是分析的基本单元,它是一种二维有限元,每个平面桁架元有2个节点和3个参数,参数分别为长度L、弹性模量E和横截面积A,当假设桁架元与正方向总体X轴逆时针倾斜θ角时,并令C=Cos(θ),S=Sin(θ),则单元刚度矩阵可表示为:在有限元分析中,通过单元分析,建立单元刚度矩阵k,然后再将单元刚度矩阵通过刚度集成规则集合成结构的整体刚度矩阵K,对于一个有n个节点的结构而言,其整体的刚度矩阵K为2n×2n的矩阵,在实际MATLAB软件操作中,并不需要编写函数程序,而是直接调用相应的函数即可,正是因为这样,在用MATLAB软件进行桁架受力分析时,可以大大提高效率,节省时间。
整体刚度矩阵的函数名称为PlaneTrussAssemble。
一旦得到刚度矩阵K,就可以列出方程:式中,U代表节点的位移矢量,F是结构节点的荷载矢量,这两个边界条件需要手动赋值,然后利用高斯消元法便可求解上述方程组,一旦求解出为止的位移和支反力,就可以利用方程:求解单元的节点力。
matlab桁架结构有限元计算摘要:一、引言- 介绍MATLAB在桁架结构有限元计算中的应用- 说明本文的主要内容和结构二、有限元计算原理- 有限元方法的背景和基本原理- 有限元方法在桁架结构分析中的应用三、MATLAB实现桁架结构有限元计算- MATLAB的基本操作和编程基础- 使用MATLAB进行桁架结构有限元计算的步骤和示例四、MATLAB桁架结构有限元计算的应用- 分析不同桁架结构的特点和计算结果- 探讨MATLAB在桁架结构有限元计算中的优势和局限五、结论- 总结MATLAB在桁架结构有限元计算中的应用和优势- 展望MATLAB在桁架结构分析中的未来发展方向正文:一、引言随着计算机技术的不断发展,有限元方法已经成为工程界解决复杂问题的重要手段。
MATLAB作为一款功能强大的数学软件,可以方便地实现桁架结构的有限元计算。
本文将介绍MATLAB在桁架结构有限元计算中的应用,并详细阐述其操作方法和计算原理。
二、有限元计算原理1.有限元方法的背景和基本原理有限元法是一种数值分析方法,通过将连续的求解域离散为离散的单元,将复杂的问题转化为求解单元的线性或非线性方程组。
有限元方法具有适应性强、精度高、计算效率高等优点,广泛应用于固体力学、流体力学、传热等领域。
2.有限元方法在桁架结构分析中的应用桁架结构是一种由杆件组成的结构,其节点只有三个自由度。
有限元方法可以有效地分析桁架结构的强度、刚度和稳定性,为工程设计提供理论依据。
三、MATLAB实现桁架结构有限元计算1.MATLAB的基本操作和编程基础MATLAB是一种功能强大的数学软件,可以进行矩阵运算、绘制图形、编写程序等操作。
在MATLAB中,用户可以通过编写脚本文件或使用图形界面进行各种计算和分析。
2.使用MATLAB进行桁架结构有限元计算的步骤和示例(1) 建立桁架结构模型:根据实际结构绘制桁架的节点和杆件,确定各节点的三自由度。
(2) 离散化:将桁架结构离散为有限个单元,每个单元包含若干个节点。
np=3; ne=2; nload=1; nb=4; nu=0;% np为节点数,ne为单元数,nload为外力数,nb为约束数,nu 为泊松比np2=np*2; np3=np2-nb;% np2为不受约束时自由度是节点的两倍 ,np3为不受约束的节点自由度个数K=sym(zeros(np2,np2));% 定义受整体刚度空数组F=sym(zeros(np2,1));% 定义节点外力空数组KK=sym(zeros(np3,np3));% 预置自由度刚度空数组FF=sym(zeros(np3,1));% 预置自由度外力空数组syms h A P E L% 定义未知正常数为变量xy=[0,h;sqrt(3)*h,0;0,0];% 节点横纵坐标数组AA=[A;A];% 单元杆件面积load=[2,2,-P];% 荷载数组bound=[1,1,0;1,2,0;3,1,0;3,2,0];% 边界条件数组IJ=[1,2;3,2];% 各杆单元节点编号DW=zeros(1,4);for ie =1:neip=IJ(ie,1);jp=IJ(ie,2);DW(1)=ip*2-1; DW(2)=ip*2; DW(3)=jp*2-1; DW(4)=jp*2; % 给单元节点横纵方向编号x1=xy(ip,1); x2=xy(jp,1); y1=xy(ip,2); y2=xy(jp,2); % 杆单元节点x,y坐标L=sqrt((x2-x1)^2+(y2-y1)^2);% 杆单元长度c=(x2-x1)/L; s=(y2-y1)/L;% c为余弦, s为正弦T=[c,s,0,0;-s,c,0,0;0,0,c,s;0,0,-s,c];% 坐标转换矩阵(将局部坐标转换为整体坐标)A1=AA(ie);ke=[E*A1/L,0,-E*A1/L,0;0,0,0,0;-E*A1/L,0,E*A1/L,0;0,0,0,0];k=T.'*ke*T;% 将局部坐标下单元刚度转换为整体坐标下单元刚度 (转置后面加.可以去掉结果中的虚数)for i =1:4i1=DW(i);for j =1:4j1=DW(j);K(i1,j1)=K(i1,j1)+k(i,j);% 集成整体刚度矩阵endendendfor i =1:nloadi1=(load(i,1)-1)*2+load(i,2);F(i1,1)=F(i1,1)+load(i,3);% 将荷载按节点方向代码累加,计入外力荷载endFuu=sym(zeros(np2,1));% 节点位移NR=zeros(np2,1);for i =1:nbi1=(bound(i,1)-1)*2+bound(i,2);NR(i1)=-i1;% 将有约束的节点的横纵节点编号挑出来变为负数uu(i1)=bound(i,3);% 有约束的四个方向位移为0endj=0;for i =1:np2i1=NR(i);if i1==0j=j+1;NR(i)=j;endend% 此循环目的是为了将没有约束的节点以及方向挑出来for i =1:np2i1=NR(i);if i1>0FF(i1)=F(i);end% 将没有约束的节点方向的外力储存下来for j =1:np2j1=NR(j);if (i1>0 & j1>0)KK(i1,j1)=K(i,j);end% 将没有约束的节点的刚度储存下来endendKKFFfor i =1:np2i1=NR(i);for j =1:np2j1=NR(j);if (i1>0 & j1<0)jj1=abs(j1);FF(i1)=FF(i1)-K(i,jj1)*uu(jj1);end% 由于有约束方向的位移为0,所以无位移的地方FF[i1]不变endendu=sym(zeros(np2,1));u=KK\FF% 求解线性方程for i =1:np2i1=NR(i);if i1>0uu(i)=u(i1);end% 将求解的无约束方向的位移放进总的位移数组相应的位置中去enduudisp('位移')for ip =1:npstr=[ip;uu(ip*2-1);uu(ip*2)];disp(str)% 输出节点位移endfor ie =1:neip=IJ(ie,1);jp=IJ(ie,2);DW(1)=ip*2-1; DW(2)=ip*2; DW(3)=jp*2-1; DW(4)=jp*2; x1=xy(ip,1); x2=xy(jp,1); y1=xy(ip,2); y2=xy(jp,2);L=sqrt((x2-x1)^2+(y2-y1)^2);c=(x2-x1)/L; s=(y2-y1)/L;T=[c,s,0,0;-s,c,0,0;0,0,c,s;0,0,-s,c];A1=AA(ie);ke=[E*A1/L,0,-E*A1/L,0;0,0,0,0;-E*A1/L,0,E*A1/L,0; 0,0,0,0];d=sym(zeros(4,1));for i=1:4d(i)=uu(i);endde=T*d;% 将整体坐标位移转换为局部坐标位移Fe=ke*de;% 杆单元力for j=1:4N=Fe((ie-1)*2+1);% 杆单元轴力sigma=N/A1;enddisp('单元,轴力,应力')str=[ie;N;sigma];disp(str)endF3=K*uu;R=F3-F;disp('支反力');for i =1:nbi1=(bound(i,1)-1)*2+bound(i,2);str=[bound(i,1);bound(i,3);simplify(R(i1))]; disp(str)end。
前处理程序clear;clcXY = [1, 0, 02, 2, 03, 2, -2]; %XY为N行3列,N为节点总数ELB = [1, 1, 2, 12, 2, 3, 1]; %ELB为MB行4列,MB为单元总数b = 4.5e-2;h = 2e-1; %截面宽b和高hA1 = b*h;IZ1 = 3e-5; %惯性矩EAIZ = [200e9, A1, IZ1]; %弹性模量与截面积和惯性矩ELPQ = [1, 1, -2e4, 22, 1, -1e4, 2]; %ELPQ第一列为受载荷单元号,第二列为长度C(见下表),三列为载荷大小,四列为载荷类型SU = [1,02, 03,0]; %SU第一列为已知节点位移对应的方程号,第2列为节点位移数值,约束即等于0子程序1function [PO, ii, jj] = dxjd(ELB, XY, ELPQ1)PO = zeros(6,1);k = ELPQ1(1);jj = ELB(k, 3);dxy = [XY(ii, 2), XY(ii, 3)XY(jj, 2), XY(jj, 3)];DY = dxy(2,2) - dxy(1,2);DX = dxy(2,1) - dxy(1,1);L = sqrt(DX^2 + DY^2);C = ELPQ1(2);Q = ELPQ1(3);type = ELPQ1(4);switch typecase 1PO(2) = PO(2) + 0.5*Q*C*(2-2*C^2/L^2 + C^3/L^3);PO(3) = PO(3) + Q*C^2*(6-8*C/L+3*C^2/L^2)/12;PO(5) = PO(5)+Q*C-PO(2);PO(6) = PO(6) - Q*C^3*(4-3*C/L)/12/L;case 2D = L - C;PO(2) = PO(2) + Q*(L+2*C)*D^2/L^3;PO(3) = PO(3) + Q*C*D^2/L^2;PO(5) = PO(5) + Q-PO(2);PO(6) = PO(6) + Q*D*C^2/L^2;case 3D = L - C;PO(1) = PO(1) + Q*D/L;PO(4) = PO(4) + Q*C/L;case 4PO(2) = PO(2) + 7*Q*L/20;PO(3) = PO(3) + Q*L^2/20;PO(5) = PO(5) + 3*Q*L/20;PO(6) = PO(6) + Q*L^2/30;end子程序2function [KE, T] = ketb(dxy, E, A, IZ)DY = dxy(2,2) - dxy(1,2);DX = dxy(2,1) - dxy(1,1);L = sqrt(DX^2 + DY^2);S = DY/L;C = DX/L;a1 = IZ/L;a2 = a1/L;a3 = E/L;KE = a3*[A, 0, 0, -A, 0, 0 0, 12*a2, 6*a1, 0, -12*a2, 6*a10, 6*a1, 4*IZ, 0, -6*a1, 2*IZ-A, 0, 0, A, 0, 00, -12*a2, -6*a1, 0, 12*a2, -6*a10, 6*a1, 2*IZ, 0, -6*a1, 4*IZ]; t = [C, S, 0; -S, C, 0; 0, 0, 1];t1 = zeros(3,3);T = [t, t1; t1, t];end子程序function KZ = kztb(XY, ELB, EAIZ)[N,M] = size(XY);KZ =zeros(9, 9);[MB, m] = size(ELB);for k = 1 :2ii = ELB(k, 2);jj = ELB(k, 3);LTB = ELB(k, 4);dxy = [XY(ii,2), XY(ii,3)XY(jj,2), XY(jj,3)];E = EAIZ(LTB, 1);A = EAIZ(LTB, 2);IZ = EAIZ(LTB, 3);[KE, T] = ketb(dxy, E, A, IZ);CN = [3*ii-2, 3*ii-1, 3*ii, 3*jj-2, 3*jj-1, 3*jj];KE = (T')*KE*T;for i = 1:6for j = 1:6KZ(CN(i), CN(j)) = KZ(CN(i), CN(j)) + KE(i, j);endendend子程序function U = weiyi(KZ, P, SU)[LR, m] = size(SU);for k =1:LRi = SU(k, 1);P(i) = 1e10*SU(k, 2);KZ(i,i) = 1e10*KZ(i, i);endU = KZ\P;end子程序function P = ydx(XY, ELB, EAIZ, ELPQ)[N, m] = size(XY)P = zeros(3*N, 1)[LPQ, m] = size(ELPQ)for j = 1:LPQELPQ1 = ELPQ(j, :)k = ELPQ(j, 1)[PO, ii, jj] = dxjd(ELB, XY, ELPQ1)LTB = ELB(k, 4);dxy = [XY(ii,2), XY(ii,3)XY(jj,2), XY(jj, 3)];E = EAIZ(LTB, 1);A = EAIZ(LTB, 2);IZ = EAIZ(LTB, 3);[KE, T] = ketb(dxy, E, A, IZ );PO = (T')*PO;CN = [3*ii-2, 3*ii-1, 3*ii, 3*jj-2, 3*jj-1, 3*jj]for i = 1:6P(CN(i)) = P(CN(i)) + PO(i);endend后处理程序clc;[N, M] = size(XY);DU = zeros(N,4);for i = 1:NDU(i,1) = i;DU(i,2) = U(3*i-2);DU(i,3) = U(3*i-1);DU(i,4) = U(3*i);end[MB, M] = size(ELB);for i = 1:MBP1(i, 1) = i;end'节点号水平位移竖直位移转角'DU主程序>>GJINPUT;>>KZ = kztb(XY, ELB,EAIZ);>>P = ydx(XY, ELB, EAIZ, ELPQ);>>U = weiyi(KZ, P, SU);>>GJOUTPUT;运行结果:ans ='节点号水平位移竖直位移转角' DU =1.0000 -0.0000 -0.0000 -0.00002.0000 -0.0000 -0.0111 -0.01003.0000 -0.0231 -0.0111 -0.0125。
有限单元法平面桁架静力分析有限元程序#define NODE_NUM 300#define ELE_NUM 200#include<stdlib.h>#include<stdio.h>#include<math.h>int nj,ne,nm,nz,npj,jm[ELE_NUM][3],nzc[60],nj2,bw;float xy[NODE_NUM][4],EA[5],p[NODE_NUM],pj,F[ELE_NUM]; float ek[5][5];double **K,*f;int BAND2(int n,int m,double **K,double *f);double **TwoArrayAlloc(int,int);void TwoArrayFree(double**);FILE *outfile;/*-----------------------------*/double **TwoArrayAlloc(int r,int c){double *x,**y;int n;x=(double*)calloc(r*c,sizeof(double));y=(double**)calloc(r,sizeof(double*));for(n=0;n<=r-1;++n)y[n]=&x[c*n];return(y);}/*--------------------------------*/void TwoArrayFree(double **x){free(x[0]);free(x);}/*--------------------------------*/int BAND2(int n,int m,double **K,double *f) /*解方程函数*/ {int i,j,t,ij,ji,it,jt,tm,m1;double s,w;m1=m+1;for(i=1;i<=n;i++){if(K[i-1][m1-1]<=0) return(0);w=0.0;if(i>m1) tm=i-m;else tm=1;for(j=tm;j<=i;j++){s=0.0;ij=j-i+m1;for(t=tm;t<=j-1;t++){it=t-i+m1;jt=t-j+m1;s=s+K[i-1][it-1]*K[j-1][jt-1]/K[t-1][m1-1];}K[i-1][ij-1]=K[i-1][ij-1]-s;if(j==i)f[i-1]=f[i-1]-w;elsew=w+K[i-1][ij-1]*f[j-1]/K[j-1][m1-1];}}for(i=n;i>=1;i--){s=0.0;if(i>n-m1) tm=n; else tm=i+m;for(j=i+1;j<=tm;j++){ji=i-j+m1;s=s+K[j-1][ji-1]*f[j-1];}f[i-1]=(f[i-1]-s)/K[i-1][m1-1];}return 1;}/*--------------------------------------------*/void input()/*输入函数*/{int jj,j,i,nh,nl;float dx,dy;FILE *infile;infile=fopen("dat.txt","r");outfile=fopen("out.txt","w");fscanf(infile,"%d%d%d%d%d",&nj,&ne,&nm,&nz,&npj); /*读入控制数据*/fprintf(outfile,"The Num. Of Nodes: %3d\n",nj);/*输出节点数*/fprintf(outfile,"The Num. Of Mem.: %3d\n",ne);/*输出单元数*/fprintf(outfile,"The Num. Of Type Of Section Characteristic: %3d\n",nm);/*输出材料类型数*/fprintf(outfile,"The Num. Of Restriction: %3d\n",nz);/*输出荷载数*/ fprintf(outfile,"The Num. Of Nodal Loads: %3d\n",npj);/*输出荷载数*/for(i=1;i<=nj;i++){for(j=1;j<3;j++)fscanf(infile,"%f",&xy[i][j]);/*读入节点坐标*/}fprintf(outfile,"Coordinates x and y Of Nodes:\n");fprintf(outfile," Node x y\n");for(i=1;i<=nj;i++){fprintf(outfile,"%10d%10.2f%10.2f\n",i,xy[i][1],xy[i][2]);/*输出节点坐标*/}for(i=1;i<=ne;i++){for(j=0;j<3;j++)fscanf(infile,"%d",&jm[i][j]);/*读入单元信息(材料类型、单元左右节点码)*/}fprintf(outfile,"The Nodes Num. Of Mem.:\n");fprintf(outfile," Mem. Type Left Right\n");for(i=1;i<=ne;i++){fprintf(outfile,"%10d%10d%10d%10d\n",i,jm[i][0],jm[i][1],jm[i][2]);/*输出单元信息*/}for(i=1;i<=nm;i++) fscanf(infile,"%f",&EA[i]);/*读入材料刚度*/for(i=1;i<=nm;i++){fprintf(outfile,"nm=%d EA=%f\n",i,EA[i]);/*输出材料刚度*/ }for(i=1;i<=nz;i++) fscanf(infile,"%d",&nzc[i]);/*读入约束位置*/ fprintf(outfile,"The Position Of Restriction: ");for(i=1;i<=nz;i++){fprintf(outfile,"%d ",nzc[i]);/*输出约束位置*/}fprintf(outfile,"\n");nj2=nj*2;/*形成荷载*/for(i=0;i<nj2;i++) p[i]=0.0;for(i=0;i<npj;i++){fscanf(infile,"%d%f",&jj,&pj);/*读入荷载位置、荷载大小*/ p[jj]=pj;}fclose(infile);}/*-------------------------------------------------------------------------*/int bwidth()/*求半带宽函数*/{int ie,i,j,min,max,jj,ib,lk,m,nn[8];ib=0;for(ie=1;ie<=ne;ie++){m=abs(jm[ie][1]-jm[ie][2]);if(m>ib) ib=m;/*找出单元左右节点码之差的最大值*/ }return 2*ib+2;/*返回半带宽*/}/*-------------------------------------------------------------------------------*/ void stiff(int ie) /*形成单刚函数*/{int i,j,k,m,n;float dx,dy,dz,l,cx,cy,cz,ea;i=jm[ie][1];/*单元左节点号*/j=jm[ie][2];/*单元右节点号*/m=jm[ie][0];/*单元材料类型号*/dx=xy[j][1]-xy[i][1];/*单元左右节点横坐标之差*/dy=xy[j][2]-xy[i][2];/*单元左右节点纵坐标之差*/l=sqrt(dx*dx+dy*dy);/*单元长度*/cx=dx/l;/*求余弦*/cy=dy/l;/*求正弦*/ea=EA[m]/l;/*fprintf(outfile,"%d%10.2f\n",ie,l);*/ek[1][1]=ek[3][3]=cx*cx*ea;/*求单刚*/ek[2][2]=ek[4][4]=cy*cy*ea;ek[2][1]=ek[1][2]=ek[3][4]=ek[4][3]=cx*cy*ea;ek[4][1]=ek[1][4]=ek[3][2]=ek[2][3]=-cx*cy*ea;ek[1][3]=ek[3][1]=-cx*cx*ea;ek[2][4]=ek[4][2]=-cy*cy*ea;}/*-----------------------------------------------------------------------------*/ int ekzk(int ie)/*集成总刚度*/{int i1,j1,i,j,i2,j2,ii,jj,ji;for(i1=1;i1<=2;i1++){for(i2=1;i2<=2;i2++){i=2*(i1-1)+i2;ii=2*(jm[ie][i1]-1)+i2;for(j1=1;j1<=2;j1++){for(j2=1;j2<=2;j2++){j=2*(j1-1)+j2;jj=2*(jm[ie][j1]-1)+j2;ji=bw+jj-ii;if(ji<=bw) K[ii-1][ji-1]=K[ii-1][ji-1]+ek[i][j];}}}}}/*---------------------------------------------------------------------------*/ void force()/*求单元轴力函数*/{int i,j,ie,m;float dx,dy,dz,l,cx,cy,cz,ea,w[7];fprintf(outfile,"============dyzl==================\n");for(ie=1;ie<=ne;ie++){i=jm[ie][1];j=jm[ie][2];m=jm[ie][0];w[1]=f[2*i-2];w[2]=f[2*i-1];w[3]=f[2*j-2];w[4]=f[2*j-1];dx=xy[j][1]-xy[i][1];dy=xy[j][2]-xy[i][2];l=sqrt(dx*dx+dy*dy);cx=dx/l;cy=dy/l;ea=EA[m]/l;dx=w[3]-w[1];/*左右节点水平位移之差*/dy=w[4]-w[2];/*左右节点竖直位移之差*/l=ea*(cx*dx+cy*dy);/*求单元轴力*/F[ie]=1;fprintf(outfile," %d %10.4f\n",ie,l);/*输出单元号、单元轴力*/ }}/*--------------------------------------------------------------------------------------*/ void main(){int ie,i,j,ii,jj,i1,j1;float p1,p2,p3;input();bw=bwidth();K=TwoArrayAlloc(nj2,bw);f=(double*)calloc(nj2,sizeof(double));if(f==NULL) exit(1);for(i=0;i<nj2;i++) f[i]=p[i+1];for(ie=1;ie<=ne;ie++){stiff(ie);ekzk(ie);}for(i=1;i<=nz;i++)/*约束处理(后处理的0、1置换法)*/{j=nzc[i]-1;for(i1=0;i1<bw-1;i1++){K[j][i1]=00.00;/*将有约束处的行置0*/ii=j+i1+1;if(ii<nj2) K[ii][bw-i1-2]=00.00;/*将有约束处的列置0*/ }K[j][bw-1]=1.00;/*将对角线元素置1*/f[j]=0;}/*fprintf(outfile,"========================zk======================\n");for(i=0;i<nj2;i++){for(j=0;j<bw;j++){fprintf(outfile,"%6.2f",K[i][j]);}fprintf(outfile,"\n");}*/fprintf(outfile,"============jdhz=================\n");for(i=0;i<nj2;i++){fprintf(outfile,"%d %6.2f\n",i+1,f[i]);/*输出节点力*/}if(!BAND2(nj2,bw-1,K,f)){printf("Failed!\n"); exit(0);}fprintf(outfile,"=========jdwy==========\n");fprintf(outfile," x y\n");for(ii=0;ii<nj;ii++){p1=f[2*ii];p2=f[2*ii+1];fprintf(outfile,"%2d %14.5f %14.5f\n",ii+1,p1,p2);/*输出节点位移*/ }force();fclose(outfile);}。
matlab桁架结构有限元计算
在MATLAB中,进行桁架结构的有限元计算可以按照以下步
骤进行:
1. 定义节点和单元:根据实际问题的几何形状和拓扑关系,定义桁架结构的节点和单元。
节点是桁架结构的连接点,单元是连接节点的构件。
2. 定义材料属性和截面属性:根据实际问题的材料和截面要求,定义桁架结构的材料属性和截面属性。
材料属性包括弹性模量和泊松比等,截面属性包括截面面积和惯性矩等。
3. 组装刚度矩阵:根据节点和单元的几何形状和材料属性,计算每个单元的局部刚度矩阵,然后根据单元和节点的连接关系,将局部刚度矩阵组装成整体刚度矩阵。
4. 施加边界条件:根据实际问题的边界条件,将边界节点的位移固定为零,或施加位移或力的约束条件。
5. 求解位移和反力:使用求解线性方程组的方法,求解位移和反力。
可以使用MATLAB中的线性方程组求解函数(如'\''运
算符)来计算。
6. 计算应力和应变:根据位移和节点的几何形状,计算节点上的应变,然后根据材料属性,计算节点上的应力。
以上步骤涵盖了桁架结构的有限元计算的基本流程,具体实现时需要根据实际问题进行适当的调整和扩展。