机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3440|回复: 7

分析一段matlab有限元程序

[复制链接]
发表于 2013-3-24 13:41:49 | 显示全部楼层 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。: z/ g! F" Z+ {8 H  z2 e# [
今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。  J& g: l& F9 d7 O
毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。
* S% r8 h% Q% M记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。% S% h% C$ W4 L. z/ e' t
非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。
9 j) H, ]$ ]) I7 S. o. l--------------------------------------------------------------------------------1 J; T" t/ a1 Q$ s' l$ s
梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称5 h! u: K4 e* Y& m+ c
: I  Z& N* i3 Z' D5 b% f# ^
' s! Y+ V% w8 I* g1 N9 B/ a2 V
%------------------------ BEAM2  ----------------
7 l2 c" H8 T; p3 J) U. R- jdisp('========================================');8 c. g+ u$ I6 n% e1 `& k
disp('            PROGRAM BEAM2               ');) s2 y! I6 a  ^3 `2 G4 G7 h. o/ ]
disp('        Beam Bending Analysis           ');$ O: d  Q2 k0 E- D
disp('        The programmer:太平岛           ');9 w' M9 d$ X! @$ I4 n! E
disp('========================================');
: w3 @. J$ p7 `. Y0 a6 U3 Z* wdisp(' ');                        %输出空行
; Y4 j3 t" a2 }warning off all                        %关闭所有警告提示(求积分时,警告信息比较多)
" t' G% f% f2 U. c& aNe=input('Please input the number of elements:');        %Ne为划分的单元数& `! A' u# l6 J' W) y) w  D: j
NJ=Ne+1;                        %NJ为节点数% l' ~9 {* h1 i' `' y0 U9 t
x1=0;
( K& h' d: ^! W5 P, ~5 `x2=sym('L');
5 T& i! M( ^% D. s! V0 ix=sym('x');                        ; |; _" M3 g) b& D  S3 ^5 E
j=0:3;8 L7 N3 u( }4 A( m6 j
v=x.^j;) m. C- P% g9 m- R; E
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];; L1 J; L) A8 |' R$ x
N=v*inv(A);                        %形函数
% ~" y2 f; L7 \' j5 D; d%-----------------------------------------------
3 l9 u& X% v; s. u1 m- n% 求单元刚度矩阵' W2 U, t" a" O+ T/ J9 p+ m+ b
E=4.0e11;
) K  ?9 K' _) z8 O* KI=5.2e-7;                        %I=bh^3/12=5.2e-7;
* j: O$ n9 L+ cEI=4.0e11*5.2e-7;
0 Q& I" R! {: F. [, u' rB=diff(N,2);, `# ]. S- B0 w
k=B'*B;
: B# c2 L" b6 i- t9 X. lKee=EI*int(k,x,0,'L');8 h" @- w* ^" d3 J$ i% r7 D
Ke=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化0+ ~9 g! i6 c$ d( u3 j
Ke(:,:,1)=subs(Kee,'L',(10/Ne));
, c" K) }( h" cT=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4); `5 _: z3 F1 C# z
Ke(:,:,1)=T*Ke(:,:,1)*T';
: k# O& l+ U, z& V7 W% O2 h. s' u* nfor ii=2:Ne  A6 Z5 h  J8 k5 Z
    Ke(:,:,ii)=Ke(:,:,1);
; N9 [$ B' X" r3 t7 m0 rend
1 U! i/ C- d! p, X! i) V5 l$ AKe=double(Ke);8 f9 {1 M2 G) v& q
%------------------------------------------------
7 Y) Q1 B* p! I% 由矩阵装换法求整体刚度矩阵
( q0 q4 y+ I" `4 R6 p6 U4 v% 自由度Ndof=2*NJ
! s  N/ G# m: t" ^Ndof=2*NJ;
& n7 d1 c5 k' Q: |4 bK=zeros(Ndof);4 e6 `- I' W5 h+ f2 Q& ]. [3 ?
for ii=1:Ne
7 T6 Z$ s, x/ U    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];
; Q) f8 u( m3 J3 b    KK=G'*Ke(:,:,Ne)*G;  m# Z" T& {2 o( u* B7 `" W
    K=K+KK;% [$ z# d& E. r! h7 U* j
end  / D6 h( o  C( n0 ~; K+ ^
%------------------------------------------------
* Z0 G. l9 X% N9 g* W% 约束条件,对整体刚度矩阵进行修正,以便计算5 S: }7 Z9 Z2 s9 u! Q) a7 P: E, P* z
F=zeros(Ndof,1);/ @' ~$ z) |9 V# N) E* e8 K
F(Ndof-1)=-100;
$ D+ Z4 m% w# N" R4 n% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0
' d% U1 u1 w$ i  B" f  gK(1,=0;        K(:,1)=0;        %可以省略4 O* P4 @7 @, g; y
K(2,=0;        K(:,2)=0;        %可以省略+ [: f: k) v- |2 ]
KX=K(3:Ndof,3:Ndof);" ~& W: v# M% n0 s/ v  y% Y; L
FX=F(3:Ndof,1);
; w( e1 m. }9 v8 P! V- k%------------------------------------------------8 {9 C8 @' K7 y) Q) i3 C( H
%求整体节点位移列阵
2 k. b1 I( B) D: U4 t, Iuu=inv(KX)*FX;$ R6 r$ }& T; a) G0 W0 f
u=[0;0;uu];' A2 Q- y/ ?* @6 N9 A/ g) x
ii=1:2:2*NJ;$ ^, c  j8 f6 w/ m; `, c0 [
v=u(ii);                        %各节点挠度
! C9 B! `& X, pxta=u(ii+1);                        %各节点转角; {7 M( J% G; m3 c5 k6 |
%------------------------------------------------
' P" G- x, j$ T" D8 l+ P! Q% 后处理,计算单元应变应力
1 D  R+ X+ S, h+ r3 y" GB=subs(B,x,'L');9 X  u# b% J$ l9 H% n) D
B=subs(B,'L',10/Ne);5 z# u! i& m8 v$ S2 s4 m0 t$ w+ n
Strain=zeros(1,Ne);                %单元应变,并初始化
! |0 E" w, ~0 {Stress=zeros(1,Ne);                %单元应力,并初始化  N. U( [1 A8 j8 L+ N7 m" q- Y
for ii=1:Ne
1 ^6 a' p6 i# P2 m7 V# ^9 o    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
3 V6 V2 n' Q' n    Stress(1,ii)=E*Strain(1,ii);
5 R* g! G* b% z1 E( u4 Z* Hend2 c% q3 Y2 X: I8 P  J/ C; W$ R2 k1 U4 h
%--------------------------------------------------
9 x, [. r" o3 g# p% 以下程序为屏幕输出处理
6 H0 w0 l; n# {6 h, w' {; n# f! p% Ddisp(' ');6 b; t% L4 @4 X( L6 [" S+ z
disp(' Input:1-print Node displacement ');+ `) k( b5 K! t0 U
disp(' Input:2-print strain ');
: h1 d9 o3 q& m# g( ~% Ndisp(' Input:3-print stress ');
3 g; z' w$ d4 k4 O) k; Jdisp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');$ U) a8 L. ]* j4 z7 k
/ `+ y; J, }! H; y* H
while 1
! z+ ^4 V9 Y: I    ii=input('Please input1 or 2 or 3:','s');; m# [/ r; ~1 g1 S- ]
        switch(ii)' _! g7 U+ ~$ b2 l- L# _8 f- s
            case '1'2 z# i: `* g. j  `. v
                disp('Node displacement');8 ~: V7 p, e5 F: }
                disp(u');3 A( i" C4 ]$ U" Z5 |$ u4 e! i+ M% }+ d
            case '2'
3 i+ E& A8 U, `. F8 V* s9 I8 q- u                disp('element strain');" i2 V. c- r, ?# a- T, ~  w
                disp(Strain);3 Q1 e6 u' |# e; t& G  H. I
            case '3'
9 a6 `! M$ @9 ^( p. v' l, u5 \                disp('element stress');
0 J" [1 r( D/ i! E                disp(Stress);- W' z2 N1 F+ p. W  @
            case 'q'
! K6 q1 N2 i; {- ^6 M5 |                disp('End of program');
! a% l( o& h% K                break;
! I  `; C/ m6 {4 i! t            otherwise. t$ s7 ~4 ^0 }+ O" ?
                disp('error!Please input again');; t( {2 M. t0 B  u
                continue;1 R& v5 g: d, z& u2 l, u7 D
        end% f. v5 _& ^, |- S5 z
end+ o9 F. C: v* z/ d; |" ^  S

- N+ o5 C+ n1 H) \
( c" X4 k+ d* E0 \! L* a6 q
回复

使用道具 举报

 楼主| 发表于 2013-3-24 13:44:32 | 显示全部楼层
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧
' T2 I7 `* h8 M4 [& V7 u% K+ H1 gK(1,:)=0;        K(:,1)=0;        %可以省略
1 ?  }' A4 X# W4 xK(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
: M) Z/ i6 p. G, d  r+ t8 L谢谢你啊,太感谢你了
1 J: `2 U- v: o* N5 z
这谢啥呢?
回复 支持 反对

使用道具 举报

发表于 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;6 T; ?8 ]! S4 V. b( {
v=x.^j;  是干啥的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 08:17 , Processed in 0.062994 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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