找回密码
 注册
Simdroid-非首页
查看: 358|回复: 5

【求助】那里有matlab在土木工程中的应用方面的例题或者范例

[复制链接]
发表于 2002-8-23 20:03:37 | 显示全部楼层 |阅读模式 来自 北京交通大学
那里有matlab在土木工程中的应用方面的例题或者范例
发表于 2002-8-23 23:34:53 | 显示全部楼层 来自 北京

Re:【求助】那里有matlab在土木工程中的应用方面的例题或者范例

Simdroid开发平台
土木工程方面的应用,建议你最好使用其它专用软件。Matlab主要用于计算,这方面的范例还没有听说过,如果有谁知道,请告知!
deartiger 该用户已被删除
发表于 2002-8-30 10:27:56 | 显示全部楼层 来自 广东佛山
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2002-8-30 14:33:42 | 显示全部楼层 来自 福建厦门

Re:【求助】那里有matlab在土木工程中的应用方面的例题或者范例

帮助文件永远是最好的老师,这是我的体会!能不能具体点,比如是造价预测、荷载计算、抗震模型分析等等。
发表于 2002-9-5 11:50:35 | 显示全部楼层 来自 天津

Re:【求助】那里有matlab在土木工程中的应用方面的例题或者范例

电子工业出版社出版的MATLAB6.1实用指南(上下册)苏金明、阮沈勇编著,就是专为土木工程技术人员编的,应该对你有用

评分

1

查看全部评分

发表于 2002-9-6 08:33:47 | 显示全部楼层 来自 北京

Re:【求助】那里有matlab在土木工程中的应用方面的例题或者范例

贴一个土木工程方面的应用文章:
          Matlab在结构动力分析中的应用
  
  
  
陈以新 (华侨大学土木工程系 泉州362011)
  
  提要:本文采用Matlab编制了高层建筑结构的地震动力反应源程序。本文探讨了用Matlab进行结构动力分析在矩阵运算及绘图上的优热,Matlab与Fortran或C的接口问题以及使用Matlab进行编程应注意的事项。Matlab宜在结构工程领域推广应用。
  关键词:Matlab,矩阵运算,绘图,结构,动力分析
  
Application of Matlab in structural dynamic analysis
  
Chen Yixin (Dept.of Civil Eng.,Huaqiao Univ.)
  
  Abstract:This thesis compiles program sith matlab for structural dynamic analysis of tall building under seismic effect.The author discusses the advantages of using Matlab to do structural dynamic analysis in matrix calculation and drawing.In addiion,the author discusses the link problem between Matlab and Fortran(C)and other points for attention in compiling programs with Matlab.Matlab is appropriate to be popularized and applied in structural engineering
  Keywords:Matlab,matrix calculation,drawing,structural,dynamic analysis.
  
  一、前言
  Matlab是一种数值计算型科技应用软件。其全称是Matlab Laboratory,亦即矩阵实验室。与Basic、Fortran、Pascal、C等编程语言相比,Matlab具有编程简单直观,用户界面友善,开放性强等优点,因此其自面世以来,在国际上很快得到了推广利用,被IEEE称为国际公认最优秀的科技应用软件。在欧美,Matlab在矩阵运算,数字信号处理,控制系统,优化设计,生物医学工程等各行各业中都有极广泛的应用1。在我国,Matlab自80年代末传入国内以来,只是在高校中有一些应用,近年来使用Matlab的单位和个人也急剧增加。但在结构工程专业,现有的结构动力分析软件包均是采用Fortran或C编写的,尚少有人利用Matlab进行结构动力分析。
  笔者采用基于Fortran语言编写的平面框架剪力墙结构的标准有限元程序,得出一幢12层框架剪力墙结构的刚度矩阵[K]。在此基础上采用Matlab编写了高层建筑结构的地震动力反应源程序,并实现了Matlab与Fortran的接口。该程序可用于计算已知刚度矩阵的各类框架、剪力墙、框架剪力墙结构的自振频率;求解结构在各种地震波作用下的动力反应时程并绘制时程曲线。文中通过Matlab源程序的编制过程,探讨了用Matlab进行结构动力分析的优势:Matlab可以使繁琐的矩阵运算变得极其简单;Matlab可以十分容易地绘制出各种高精度的图形。文中给出了一幢12层框架剪力墙结构的自振频率计算结果及该结构在EL-Centro地震波作用下第12层的动力反应时程曲线。此外,本文还讨论了Matlab与Fortran或C的接口问题,以及使用Matlab进行编程应注意的事项。
  Matlab的功能之强大令人难以致信,将其引入到结构工程领域,可以使一些复杂的结构动力分析程序得到简化,极大地提高编程的效率,质量和可靠性,从而大大加快结构动力分析软件的开发应用。
  二、Matlab在矩阵运算上的优势
  Matlab以矩阵(或数组)为运算单元,除非特殊需要,矩阵不必事先定义维数大小,正因为如此,在矩阵运算上,Matlab体现出比Basic、Fortran、Pascal、C等语言要高得多的编程效率,而且程序可读性强,调度简单,容易维护。本文采用Matlab编制了高层建筑结构的地震动力反应源程序。下面分别从结构的自由振动模块及动力反应模块(本文采用无条件稳定的Wilson-θ法)论述Matlab在矩阵运算上的优势。
  (一)求解结构的自由振动及形成阻尼矩阵
  一个高层建筑结构可以简化成一个n个自由度的体系,其自由振动方程为:
  [M]{x}+[K]{x}=0 (1)
  [M]、[K]分别为n×n阶的质量、刚度矩阵,{x}、{x?}分别为位移、加速度向量。
  由(1)有[K]-1[M]{x?}+{x}=0 (2)
  设(2)有特解{x}={y}sin(wt+φ)(3)其中{y}={y(1),y(2)…y(n)}T是体系的振型向量。
  将(3)代入(2)得:([K]-1[M]-1/w2×[I]){y}=0(4)其中[I]为n阶单位阵。
  令[K]-1[M]=[temp]  1/w2=D
  则[temp]×{y}=D×{y} (5)
  以一n个自由度的体系来说,上式必有n组解D及{y},Di(i=1,n)为[temp]的特征值,{y}i(i=1,n)为与Di对应的[temp]的特征向量。于是求解结构的自振频率就归结为求解矩阵[temp]的特征值及特征向量的问题[2]。求出结构的n个自振频率w1,w2…wn后,即可确定常数α、β。阻尼矩阵为质量矩阵和刚度矩阵的线性组合。
  a=2w1w2(ξ1w2-ξ2w1)/(w22-w12)
β=2(ξ2w2-ξ1w1)/(w22-w12) (6)
  当ξ1=ξ2=0.05时
  β=0.1/(w1+w2)
α=βw1w2 (7)
阻尼矩阵[C]=a[M]+β[K] (8)
  采用Fortran或C求解结构的自由振动,均需调用Jacobi子程序求解矩阵的特征值及对应的特征向量,而且要求该矩阵必须为实对称矩阵,否则应先用初等相似变换法将该矩阵化成赫森伯格矩阵,然后再用QR方法求赤森伯格矩阵的全部特征值,程序繁杂,且对一般用户来说,要看懂程序算法实属不易[3]。而采用Matlab编制该自由振动的子程序时只需调用Matlab中的两个函数:求逆矩阵的inv函数及特征值、特征向量的eig函数。下面是和Matlab编写的结构自由振动模块:
  function[W,T,AF,BT,C]freevib(N,K,M)
  TEMP=(inv(K))*M;
  [X,D]=eig(TEMP);
  for I=1:1:N
  W(1,I)=sqrt(1.0/D(I,I);
  T(1,I)=2*3.1415926/W(1,I);
  End
  BT=0.1/(W(1,1)+w(1,2));
  AF=BT*W(1,1)*W(1,2);
  C=AF*M+BT*K;
  End
  N为该框架剪力墙结构的层数。
  (二)求解结构的动力反应(采用时程分析法中无条件稳定的Wilson-θ法)
  多质点体系的运动微分方程可表示为
  [M]{x?}+[C]{x*}+[M]{x?}=-[M]{1}x?0(t)  (9)
  由于作为输入地震地面加速度时程曲线x?0。(t)(本文中采用EL-centro波)是很不规则的,很难用时间函数来表示,因此,(9)式的求解只能用时程分析的方法进行。本文采用无条件稳定的Wilson-θ法对微分方程进行数值积分[3]。
  下面是基于无条件稳定的Wilson-θ法的结构动力反应模块:
  function[Y1,V1,A1]=wils(DT,K,M,C,Y,V,A,PB)
  TAO=1.37*DT;
  B1=3.0/TAO;
  B2=2.0*B1
  B0=B2/TAO;
  B3=0.5*TAO;
  B4=B0/1.37;
  B5=-B2/1.37;
  B6=1.0-3.0/1.37;
  B7=0.5*DT
  B8=DT*DT/6.0;
  %Calculate effective stiffness
  Ks=K+B0*M+B1*C;
  %Calculate effective load
  Ps=PB+M*(B0*Y+B2*V+2*A)+C*(B1*Y+2*V+B3*A);
  % Calculate response vector of displacement,velocity and acceleration
  Ys=inv(Ks)*Ps;
  A1=B4*(Ys-Y)+B5*V+B6*A;
  V1=V+B7*(A1+A);
  Y1=Y+DT*V+B8*(A1+2*A);
  A1=inv(M)*(PB-C*V1-K*Y1);
  End
  Y、V、A分别为进段初各层相对于地面的位移、速度、加速度矢量;PB矢量为运动微分方程的右端项,在主程序中实现。Y1、V1、A1分别为时段末各相对于地面的位移、速度、加速度矢量。
  通过这两个模块读者可以看到,Matlab以矩阵为基本数元,因而Matlab在进行矩阵运算时就象在草稿纸上进行演算一样,故其又称为演算纸式的程序设计语言[4]。同时Matlab严格区分入口哑元及出口哑元,在函数名的右端( )内为入口哑元,在函数名的左端[]内为出口哑元,中间以等号连接,比起其他高级语言来,增加了程序的可读性,而且便于程序员跟踪查错。
  三、计算实例:
  某12层住宅楼,设计烈度为8度,二类场地上,结构型式为框架剪力墙。梁的尺寸均为25cm×55cm。剪力墙厚度首层取24cm,其他各层为14cm。柱截面尺寸:首层为50cm×50cm,其余各层均为45cm×45cm。柱、梁、剪力墙的混凝土强度等级均为C20。混凝土弹性模量E取为2.548×107kN/m2,泊松比取1/6,各层重量:顶层为5322.6kN,11层为6934.9kN,2~10层为6599.12kN,底层为7510.14kN。计算简图如图1、图2所示。
   
  
   
  
   
  
图1 平面简图     图2 剖面简图
  
  以下是主程序调用自由振动模块后,该结构的12阶自振频率W及常数α、β的输出结果:
  W=3.2037 12.0421 26.4468 43.3608 59.7087
73.7087 73.5715 84.4539 92.6175 98.6527 103.1001
106.0110 117.6543 (单位:1/s)
  α=0.2531      β=0.0066
  主程序调用基于Wilson-θ法的动力反应模块后,各层相对于地面的位移、加速度的输出结果将在下文以图结果显示。
  四、Matlab在绘图上的优势
  作为一个优秀的科技应用软件,Matlab不仅在数值计算方面无与伦比,而且在数据可视化方面也有上佳表现。Matlab有两个层次的绘图命令:一组是直接对句柄进行操作的底层绘图指令;另一组是在底层指令基础上建立起来的高层绘图指令。其中高层绘图指令简单明了,极易为用户掌握。笔者采用Matlab绘制了该结构各层在地震作用时间内的动力反应时程曲线。例如要绘制该结构第12层的位移、加速度时程曲线只需调用plot函数及其他一些辅助绘图函数即可[1]。该过程实现如下:
  plot(T,Y12′-′)
  xlabel(′t(s)′),ylabel(′Y(cm)′),
  title(′Y--t′)
  plot(T,A12′-′)
  xlabel(′t(s)′),ylabel(′A(cm/s**2)′),
  title(′A--t′)
  其中T为随积分步长△t(本文为0.02秒)递增的矩阵,即T=[0.02,0.04,0.06…T地动](T地动为地震动持续时间,本文为8秒)。该结构第12层在地震动技术时间内的位移、加速度时程曲线分别如图3、图4所示。Matlab在绘图上的简捷与高效由此可见一斑。
   
  
   
  
   
  
图3 位移时程曲线    图4 加速度时程曲线
  
  五、使用Matlab进行编程应注意的事项
  1、Matlab与Fortran或C的接口问题:在使用Matlab编程时,若要利用现成的Fortran或C的软件包,常会遇到接口问题。通常可采用以下几种方法:
  (1)在Matlab的M文件中调用由Fortran或C子程序编译生成的MEX可执行文件,此法将降低Matlab的执行速度。
  (2)用剪贴板将Fortran或C产生的数据文件考贝到Matlab的M文件中。此法虽然简单,但若遇到大型质量矩阵或刚度矩阵,将使源程序冗长。
  (3)用fofen、fread、fscanf等Matlab的底层I/O指令将Fortran或C产生的数据文件读入Matlab的M文件中[1]。
  2.Matlab具有丰富的函数库,用户自己编写的函数应避免Matlab函数库中的函数同名,否则Matlab会优先执行函数库中的同名函数。
  3、用facanf语句输入矩阵变量或简单变量(即1×1的矩阵)的数值时,一句facanf语句只能读入一个变量(包括矩阵变量或简单变量)的数值,而在C语言中,一句facanf语句可以读入多个简单变量的数值。还要注意的是当用A=facanf(FP,′%d′,1)读入简单变量A的数值时,( )内的‘1’必不可少,否则该语句会将指针FP在所对应的本文文件中当前所指的数据及其后所有的数据全部读入并赋给变量A,使A成为一列向量。这是因为在Matlab中默认的基数元为矩阵。
  4、用循环语句对一列向量赋值时,例如要产生一个12×1的“0”矩阵A,应用:forJ=1∶1∶12/A(J,1)=0.0;/end;若用:for J=1∶1∶12/A(J,1)=0.0;/end(“/”表示回车键);则A=[0,0,0…0],产生的是一个1×12的矩阵,即行向量。忽视了这个问题在编程中常会造成数组的维数不匹配。
  六、结语
  本文采用Matlab编写了高层建筑结构的地震动力反应源程序,并实现Matlab与Fortran的接口。文中通过Matlab源程序的编制过程,探讨了用Matlab进行结构动力分析在矩阵运算及绘图上的优势:使矩阵运算得以简化并提高绘图的精度和效率。本文给出了一个具体算例向读者展示了Matlab在编程上的简捷、高效与可靠。Matlab是编制结构分析程序的不可多得的好助手,本文旨在引起结构工程届研究人员对Matlab的重视,以促进Matlab在结构工程领域的推广应用。
  
参考文献
  
  1 张志涌,刘瑞桢,杨祖樱。掌握和精通MATLAB.北京:北京航空航天大学出版社,1998.1~3,48~49,65~67,132~136,155~156,284
  2 杨天祥,结构力学(下册)北京:高等教育出版社,1992.80~83—3 宋雅桐,朱继澄,结构分析程序设计,南京:东南大学出版社,1990,196~198,228~235
  4 张培强.MATLAB语言.北京:中国科学技术出版社,1995.14~16
  
收稿日期:1999.1.30.
  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-6 17:16 , Processed in 0.049500 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表