找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4203|回复: 7

分析一段matlab有限元程序

[复制链接]
发表于 2013-3-24 13:41:49 | 显示全部楼层 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。
4 l  a8 Y* [" g- a今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。& a% {1 `; z% ^0 A  v! a
毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。
/ H5 a6 O+ {3 H  A- M- }记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。
5 {0 @$ `/ S$ J: v, X非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。5 ~$ Z  I8 L7 c5 x
--------------------------------------------------------------------------------
% l3 k3 ?4 v4 d5 ?$ @; x7 N3 L梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称5 T  x: n7 A' q/ G

# p/ a( u7 [, D/ T+ }0 u& `/ q, P+ p$ N  P% P" W8 V
%------------------------ BEAM2  ----------------
' D7 l4 Z! h; I4 C* ?disp('========================================');' N5 \. t+ R4 O5 x4 j5 j9 ?) \
disp('            PROGRAM BEAM2               ');) S1 G8 l& W. z, p
disp('        Beam Bending Analysis           ');, G6 Z8 D' K! Y, t( j$ A! z+ e
disp('        The programmer:太平岛           ');
' p9 }# }! O) H6 s+ Pdisp('========================================');0 v9 E4 G# `- [* S8 u
disp(' ');                        %输出空行
  j5 f* ^2 l' B. xwarning off all                        %关闭所有警告提示(求积分时,警告信息比较多): E* c# H3 k* ?* _" `: I
Ne=input('Please input the number of elements:');        %Ne为划分的单元数; s/ f# S; Y4 a+ [
NJ=Ne+1;                        %NJ为节点数* C/ U3 k. W# Y0 e' q' ?$ _: H
x1=0;- ^, O1 e7 S7 l# \1 B+ g
x2=sym('L');0 V* g- r3 s) r8 o! q5 f
x=sym('x');                        6 E  Q; r% F/ k, K; o* y
j=0:3;2 ^+ M* E# u$ G3 W- y
v=x.^j;$ o/ [2 z( B/ ]) w$ p2 j
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];+ c) Q; u8 r9 e( J, M8 }) y
N=v*inv(A);                        %形函数5 W1 V# d0 B! Q9 f) q0 n4 L
%-----------------------------------------------
- H' Y; c& c' Z1 K% 求单元刚度矩阵  @# \8 p- G  P* N* u6 c
E=4.0e11;1 e- i' O. Q3 @! H! {* H
I=5.2e-7;                        %I=bh^3/12=5.2e-7;  x: o+ X$ {* d% _7 \: p9 D3 r6 y3 z+ g
EI=4.0e11*5.2e-7;
0 o+ L4 t; W) V5 N3 hB=diff(N,2);
8 T. j! j) g  s+ f2 T& n# bk=B'*B;* a9 p+ r9 P: n
Kee=EI*int(k,x,0,'L');: P! o# g1 g2 c- W+ t
Ke=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化01 R- u' x  l6 x8 _; E9 @0 t
Ke(:,:,1)=subs(Kee,'L',(10/Ne));
8 ^6 I! z/ L/ e' v5 x( ST=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)1 Z3 B% n5 U" M' f/ A5 n
Ke(:,:,1)=T*Ke(:,:,1)*T';
( ^& C/ o% v; S8 C0 r1 kfor ii=2:Ne
8 E0 w, b6 ]+ ?+ M, k    Ke(:,:,ii)=Ke(:,:,1);7 ~' l) z2 I  W+ c0 b9 |
end 7 }9 I& _! J+ o2 P5 ]
Ke=double(Ke);
6 i+ Z" Q) I& C% j; r6 y' t# |%------------------------------------------------
; q& l0 ?3 l* {. h% 由矩阵装换法求整体刚度矩阵4 V+ p& K( j* ]' A
% 自由度Ndof=2*NJ
% v. q$ h5 n; J0 h$ NNdof=2*NJ;
- L# m* @$ ]- B* x  U* s, G; k# V/ HK=zeros(Ndof);
! ?; v. p: [& Z9 e* L# Zfor ii=1:Ne8 P1 W* |& j( N; s1 ^" B1 h, H& v
    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];* ^8 ]: C# K3 n8 ~
    KK=G'*Ke(:,:,Ne)*G;
9 z6 X1 }$ s0 x  K: s/ R    K=K+KK;. Q. D1 o) a, h& v* k( l  V0 ~' B$ `
end  
5 S1 `$ Z' g  h7 ~/ l%------------------------------------------------+ Z) l. F, N' a, ~; {$ X. r. R
% 约束条件,对整体刚度矩阵进行修正,以便计算
3 A' x5 D4 ^& S5 g. gF=zeros(Ndof,1);
' j! ~$ f! _) vF(Ndof-1)=-100;
0 H( g0 g5 c' y; h% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0# Y4 h0 j" C: ^3 y' C- b, F) Z) L& |
K(1,=0;        K(:,1)=0;        %可以省略  ]1 G6 R6 R6 |  u$ C
K(2,=0;        K(:,2)=0;        %可以省略
7 E( S# }# T( `" Q; P5 gKX=K(3:Ndof,3:Ndof);2 w! O$ v7 t* {5 q: y
FX=F(3:Ndof,1);# x  _  }3 O7 V
%------------------------------------------------" C- D3 J5 j% l. N
%求整体节点位移列阵
1 {- c# C* T" N2 Q. v7 [uu=inv(KX)*FX;
' w/ F/ y& m9 G: Y$ eu=[0;0;uu];0 ~* m9 @. k; B$ J7 q% t
ii=1:2:2*NJ;
+ y1 }& ]. u# w( Y0 Yv=u(ii);                        %各节点挠度$ ?1 i! x; H. f' F
xta=u(ii+1);                        %各节点转角& a* b" G3 G+ {/ S4 H1 v4 \
%------------------------------------------------
2 `& m2 [; S$ b. `, @% B+ E* |% 后处理,计算单元应变应力
" j1 E4 V, f$ J" o. o$ VB=subs(B,x,'L');1 Y0 _4 H- [1 {& m' v, W' V$ o7 A
B=subs(B,'L',10/Ne);
. [/ j" y0 q9 h! o0 y& Z9 D" A- JStrain=zeros(1,Ne);                %单元应变,并初始化1 b- k& L4 v$ N2 K+ [9 t
Stress=zeros(1,Ne);                %单元应力,并初始化2 s" m: x! M- B$ v" y" C
for ii=1:Ne' x1 Y& d: @* p: ^! \" R
    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);% Y) i6 L8 ], u3 z* S, A
    Stress(1,ii)=E*Strain(1,ii);
8 F0 U" v# K- [/ Y. Dend
2 H, c: L1 l5 f+ R  X* x7 J%--------------------------------------------------
6 ?" z9 b1 `& s! X% 以下程序为屏幕输出处理, C$ r5 N+ J" T6 D" z5 P
disp(' ');% U+ |8 a" }" A/ q
disp(' Input:1-print Node displacement ');/ c' `2 X9 L7 g$ R+ [- P( J
disp(' Input:2-print strain ');2 N) ?$ {* f5 T
disp(' Input:3-print stress ');
* W. k, z/ X3 X% L9 h) @/ Gdisp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');
+ r# a% ?" f( y. D7 X# T
( L3 G& @5 ]1 }8 u' w. Dwhile 1. Q. p( S/ A" R* K8 d( R4 g" d
    ii=input('Please input1 or 2 or 3:','s');* a) u9 V/ C; _$ K, ]
        switch(ii)1 _4 F- `2 w1 W: m/ T
            case '1'
" N( E+ m7 b( ~7 a' U  C                disp('Node displacement');
7 ]4 R& \% Z3 A                disp(u');# d4 @& v/ A' T- h
            case '2'
7 X6 H# F! W3 q, N/ p                disp('element strain');, P4 |: q7 g+ n8 x2 g
                disp(Strain);  g, z' x4 X7 F* b# F
            case '3'% W4 u2 b7 y0 ~8 t! P
                disp('element stress');2 F. o" y' X5 S7 n2 h' {8 j
                disp(Stress);7 h9 D# ^5 h" E8 d9 }3 I7 M
            case 'q'
2 ]! j- ~9 q" f/ l                disp('End of program');% u2 m. C0 ^$ ^7 [9 E
                break;
0 ~6 \) v3 r% A# g            otherwise
- ?3 i5 h" k  Z# O" F: w3 y& E                disp('error!Please input again');  R1 J* P4 `. V) z  A& G
                continue;
- z0 U- F$ L: i! M; u* K        end9 g, \" C/ }0 V, c5 b% \" u2 }
end% Z: V* ]6 x6 {% y9 K

  w/ D- B" P/ M; a
0 a# T+ T; p. ]/ T7 _5 A
回复

使用道具 举报

 楼主| 发表于 2013-3-24 13:44:32 | 显示全部楼层
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧
! ^, S3 V+ D# [7 wK(1,:)=0;        K(:,1)=0;        %可以省略; }9 z. k* t2 c2 G9 z
K(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 $ m5 O1 P; w% q* k/ O
谢谢你啊,太感谢你了
( d- G* o  Y8 y1 f9 D# [+ o
这谢啥呢?
发表于 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;
3 i! _/ Y8 A% t- Dv=x.^j;  是干啥的
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-16 11:34 , Processed in 0.083720 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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