机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3710|回复: 7

分析一段matlab有限元程序

[复制链接]
发表于 2013-3-24 13:41:49 | 显示全部楼层 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。% @% _4 x& g  l; f. ?0 \; @
今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。
- ?! E3 m  N& C1 ~0 B% ?4 B" X) H毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。3 p" g# G* ^4 |1 _
记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。+ e  v9 M6 x  I
非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。
2 O* E5 W/ v, I. \) Q--------------------------------------------------------------------------------' ?" j( Y0 O( x( W
梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称
2 I6 i9 `) ^& X; r" E% R0 V$ r6 T2 n' T+ H( j( Z8 F' s

1 g/ K! b9 |( t7 Y" _%------------------------ BEAM2  ----------------
2 ]0 o* a+ J- z3 Gdisp('========================================');: A) z8 w2 n% {* t4 V
disp('            PROGRAM BEAM2               ');
/ ?! N$ u1 Q5 ?1 adisp('        Beam Bending Analysis           ');
( [* ?8 H' m8 r! s# I6 V. ndisp('        The programmer:太平岛           ');" t' U7 j4 A) Z: `6 ^
disp('========================================');1 u. k4 y6 U& f  p+ w
disp(' ');                        %输出空行2 m+ z2 P3 w. O2 h' w
warning off all                        %关闭所有警告提示(求积分时,警告信息比较多)
. B- _  b3 W5 y1 g' v( O  yNe=input('Please input the number of elements:');        %Ne为划分的单元数
' |& S* y) k0 ]/ b  R7 oNJ=Ne+1;                        %NJ为节点数
# t* o7 }& M, h4 A3 |; g9 hx1=0;0 P3 e& y' q; q
x2=sym('L');
: \$ X6 p" w7 n/ Sx=sym('x');                        4 q- ?# s5 f3 T( j  h
j=0:3;
* u5 s- _% a7 \3 T: }1 pv=x.^j;! `1 R! ?  R9 [: _7 x
A=[1,x1,x1^2,x1^3;0,1,2*x1,3*x1^2;1,x2,x2^2,x2^3;0,1,2*x2,3*x2^2];. l, S# v+ V" b/ m. u* e& I
N=v*inv(A);                        %形函数# \# T0 E' ^$ h) h7 C2 w2 H3 k
%-----------------------------------------------
/ C% q  P1 g+ X+ W! s% 求单元刚度矩阵
: i  f( g& }# ?7 qE=4.0e11;* ]* @1 W! }: i
I=5.2e-7;                        %I=bh^3/12=5.2e-7;1 @# p" A* {- u* e5 P4 @& ]' q7 s
EI=4.0e11*5.2e-7;7 u+ e8 c3 [8 g& @
B=diff(N,2);2 ^. z, c2 s, g1 b5 Y1 d2 r# |
k=B'*B;% P, ~% A& o$ @  J7 g
Kee=EI*int(k,x,0,'L');
4 `/ G. ^( R+ b- Z" hKe=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化0
( V3 o* [3 W. C0 `4 v4 j( ?$ e' Q% NKe(:,:,1)=subs(Kee,'L',(10/Ne));& o0 @7 D0 x0 b8 H3 A8 j* H/ Q
T=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)2 Z2 r; Q. N/ j( l7 \# q
Ke(:,:,1)=T*Ke(:,:,1)*T';) f( T8 V2 y+ h1 O+ }
for ii=2:Ne- t" L  z$ N  v1 V2 t  |0 O
    Ke(:,:,ii)=Ke(:,:,1);$ P- G! v6 h' X7 w, [
end
3 ~: V6 X# q* k+ M& E: u# bKe=double(Ke);
9 U; ]) N) |" i6 S/ M# }1 a%------------------------------------------------( B* G  s6 j: K1 @4 S
% 由矩阵装换法求整体刚度矩阵
: C$ X" U5 D% t9 C% 自由度Ndof=2*NJ
+ t, G3 S& g, h( K- xNdof=2*NJ;7 D  B# K! M9 k3 L1 }3 M
K=zeros(Ndof);
% v! Q2 q) G6 J4 z* Vfor ii=1:Ne; l# n, f$ _+ U
    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];5 |1 ?* J3 y' N/ v
    KK=G'*Ke(:,:,Ne)*G;
; ]! _7 ^( ?+ m; e0 u' J    K=K+KK;
9 ~- V" X! L, U( P* f) P3 tend  
4 a4 C& T: i- J' A: m%------------------------------------------------1 y. @3 z& {. D1 g
% 约束条件,对整体刚度矩阵进行修正,以便计算
# N1 f1 l! ~% z- q9 V1 |- n1 [F=zeros(Ndof,1);: J( l5 w2 H2 [/ J, A
F(Ndof-1)=-100;0 B& J0 `0 [( l# T( I) ~( P
% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=02 T% {* r9 h6 b: J
K(1,=0;        K(:,1)=0;        %可以省略
8 J- j6 [3 {. P* i5 NK(2,=0;        K(:,2)=0;        %可以省略2 d; r* t. w2 M+ r2 s
KX=K(3:Ndof,3:Ndof);: v6 q: q- N+ x+ n- B. ?
FX=F(3:Ndof,1);
8 B+ d; I- w. f%------------------------------------------------
1 ~4 t' }$ t& X* T0 o%求整体节点位移列阵6 I) j, g. \; g" f" I+ ^" N! ?+ ~
uu=inv(KX)*FX;
0 h  @: k, Z; k% cu=[0;0;uu];7 q" a6 G( s" z$ B6 e1 a. g2 U/ J- b
ii=1:2:2*NJ;  ^7 l$ I: a3 V
v=u(ii);                        %各节点挠度
2 _  E$ [: ]4 t1 O1 Jxta=u(ii+1);                        %各节点转角
! \6 n+ H; N# m& N4 B7 H%------------------------------------------------3 H8 C% a9 h! p. _- [8 T
% 后处理,计算单元应变应力
( }) a# ~( f6 `2 U# R* U8 qB=subs(B,x,'L');7 X0 E( H* ~* H
B=subs(B,'L',10/Ne);
0 r  m. W6 l1 S( p+ F# [( `4 YStrain=zeros(1,Ne);                %单元应变,并初始化) F; L% H) ^) _9 z" z4 @7 q
Stress=zeros(1,Ne);                %单元应力,并初始化$ \% u1 |% }+ V" j- w, j; M; e! T
for ii=1:Ne
4 S7 x$ q1 u' A# u    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
3 K0 I$ N7 S1 c2 I    Stress(1,ii)=E*Strain(1,ii);8 x0 E; W2 s/ C- E$ m6 i
end# e8 N+ i! j& d
%--------------------------------------------------$ t: d! r$ m3 [  ]
% 以下程序为屏幕输出处理
$ Q- \# A# P3 T! C* ^7 qdisp(' ');
$ y. E8 U  s/ _4 @& Odisp(' Input:1-print Node displacement ');, I( k! O3 f# _8 a2 r# {( \1 B
disp(' Input:2-print strain ');. z1 e' @$ ?$ w' e
disp(' Input:3-print stress ');8 L) W9 Z2 ?& Y8 v
disp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');
# e, x; f+ |# Y
% M+ m# M3 \8 L  Xwhile 1/ P9 N5 p- X- b8 r1 }5 ?& i- R
    ii=input('Please input1 or 2 or 3:','s');
" O. x. v: Q$ b        switch(ii)! P8 p# @! ?" v
            case '1'+ |  a# z# l+ B- i
                disp('Node displacement');
, h" v5 A- h. s/ F1 l$ Y; u+ Z                disp(u');) C6 s, y8 L# ^: x" S
            case '2'1 f7 Z: i. y% H" k+ t! `* X
                disp('element strain');
/ M/ x  v) _; L/ U- v9 g! K6 \                disp(Strain);
4 h3 `( c5 y9 }; o% {! x, G; H            case '3'
# S: ~2 F: d" b  T. b# j! ^; H# \                disp('element stress');. t3 j0 ]1 n8 N( N
                disp(Stress);& Z1 Y2 q( C0 s+ ^- l
            case 'q'
6 i% _' m: W" M  G2 n5 z/ W                disp('End of program');
  D8 r8 @0 k6 z& S& p( D. m% w( k                break;
# j- L' x4 U4 V$ F- g            otherwise
  O. k6 L, P6 Q/ F                disp('error!Please input again');- L0 Q8 C4 z7 q6 ]( |
                continue;! r0 `2 `# T- I1 d
        end
* Y# g8 K' j. L+ g5 d* vend
: g7 a7 w5 u- Z6 ?, j& _

' ]. g% d3 W9 x9 e& l
5 Z8 x  [0 A" L  |' a- ?
回复

使用道具 举报

 楼主| 发表于 2013-3-24 13:44:32 | 显示全部楼层
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧0 F  m. W% a" t# O6 C% v
K(1,:)=0;        K(:,1)=0;        %可以省略
% [6 U2 R# z; dK(2,:)=0;        K(:,2)=0;        %可以省略
回复 支持 反对

使用道具 举报

发表于 2013-3-24 14:55:52 | 显示全部楼层
没看懂
回复 支持 反对

使用道具 举报

发表于 2013-3-24 16:53:09 | 显示全部楼层
谢谢你啊,太感谢你了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-3-24 18:35:59 | 显示全部楼层
jiaweicz 发表于 2013-3-24 16:53 / q# w: A  Z; K. U* m
谢谢你啊,太感谢你了

8 B3 b1 B, c# S这谢啥呢?
回复 支持 反对

使用道具 举报

发表于 2013-3-24 21:21:19 | 显示全部楼层
我以前编过一个5体展开的多体姿态动力学计算程序。。。可惜早就忘记了,sigh

点评

是啊,很多东西不用就忘记啦  发表于 2013-3-26 12:34
回复 支持 反对

使用道具 举报

发表于 2013-11-7 20:39:02 | 显示全部楼层
这程序也运行不了啊
回复 支持 反对

使用道具 举报

发表于 2013-11-7 20:44:34 | 显示全部楼层
j=0:3;1 ~+ k9 w! G2 {( M7 P
v=x.^j;  是干啥的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-11-15 18:58 , Processed in 0.062752 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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