|
這是關(guān)于梁單元的,,可能大家覺得很簡單,。。,。
& ^/ N* n! K o今天翻電腦里的東西時發(fā)現(xiàn)的,,是我大三時有限元時的作業(yè),,記得當(dāng)時花了很多時間研究,,學(xué)了不少東西,,一個簡單的作業(yè)可以涉及各方面的知識。
! [% h- l$ T( \# E v F) S" i3 z畢業(yè)半年了,,雖然記不清彈性矩陣,、剛度矩陣等,但是只要一看書(好像現(xiàn)在的心境不下來)應(yīng)該會,,學(xué)校交的學(xué)習(xí)方法和理解問題的能力,,有些東西不必記,除非每天從事,,那該叫熟能生巧,。
2 \+ {6 \, g: c+ O記得當(dāng)時編了兩個程序,梁和三維實體的,,我分享一下梁的程序吧,,起碼有亮點和創(chuàng)意,可以自己選擇劃分個數(shù),,在matlab方面花了不少功夫,。
5 E* z9 ] L* q3 j6 A5 q* ]. n非常感謝當(dāng)時的有限元授課老師“韓清凱”,雖然老師已經(jīng)到了大工,。上課的教材為韓清凱 的《彈性力學(xué)及有限元法基礎(chǔ)教程》,,書上有個梁單元的例子,在82頁,。
9 ]# h% w. k6 M8 Y/ p0 \$ L3 [--------------------------------------------------------------------------------- d6 O3 }- [0 H( |& X
梁程序如下,,名字就不寫了,用昵稱吧“太平島”,,這是常用的網(wǎng)絡(luò)昵稱- y$ I5 Z7 G( ]$ n) a u+ l
- Q! V* C4 }& Z# D
5 }4 f: q Q3 b) e%------------------------ BEAM2 ----------------( `; u# X$ I9 E% I5 Q! F' F% K) G
disp('========================================');& G+ o# l0 s, z; i2 P9 g, k
disp(' PROGRAM BEAM2 ');
! i& ]5 E2 z1 u, udisp(' Beam Bending Analysis ');7 o% S7 T: q5 i( I0 U* J
disp(' The programmer:太平島 ');
0 @9 o: N7 M9 M' j; W& W- r' `/ gdisp('========================================');
9 p- t ]0 l4 U6 Wdisp(' '); %輸出空行
( N* j. m# Z* Q0 `: _$ kwarning off all %關(guān)閉所有警告提示(求積分時,,警告信息比較多)3 e7 ~3 O( ~, `7 S- P, X- d
Ne=input('Please input the number of elements:'); %Ne為劃分的單元數(shù)
t# f, s+ m* W' y l! RNJ=Ne+1; %NJ為節(jié)點數(shù); P P8 Y R) B3 m }$ K
x1=0;
! ~& o1 x* o' |& V( y; px2=sym('L');
2 X" m9 a; y0 r) B$ T# M! jx=sym('x');
+ [, } _: p) B9 q, zj=0:3;* L7 g9 ]( k& ~! T1 D; n
v=x.^j;
k1 O" t/ M4 e& a' w$ l" yA=[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];
V+ I5 f/ B( i$ V, d( t* aN=v*inv(A); %形函數(shù)
4 r5 B, g% {* ^0 g0 l0 D! i%-----------------------------------------------
9 M& R( h# o, _$ n- |/ U% 求單元剛度矩陣- Z) Z5 a. Y! y+ u
E=4.0e11;6 {0 M( E9 [ G. R
I=5.2e-7; %I=bh^3/12=5.2e-7,;2 s Y4 W: [8 Z
EI=4.0e11*5.2e-7;/ R( `' P* \* U; ?+ w! k( ?
B=diff(N,2);
$ z2 t4 v; p* o1 i2 t# Ik=B'*B;; T; a# _) U3 @, w* u
Kee=EI*int(k,x,0,'L');
* X0 S ?# t& c ~3 SKe=sym(zeros(4,4,Ne)); %用三維矩陣存放單元剛度矩陣,每頁存一個,,并初始化0
9 I, M' O" b7 }Ke(:,:,1)=subs(Kee,'L',(10/Ne));
3 A3 x3 v! L( K' C8 OT=eye(4); % 因為梁于x軸的夾角為0,所以坐標(biāo)變換矩陣為T=eye(4)
2 P# G8 {$ a, b4 Y# W1 \. _) [Ke(:,:,1)=T*Ke(:,:,1)*T'; ^; ^1 n* y! \, ^: y6 q% E
for ii=2:Ne
# k# ^% D% h% M5 H( h' g Ke(:,:,ii)=Ke(:,:,1);$ o' r/ |* _: y1 c! W: j/ [' X- v
end / e2 t n/ V& H
Ke=double(Ke);
2 `# b6 R2 E$ e( A2 f" R3 I# p) W%------------------------------------------------, [+ @; G" K6 n1 V
% 由矩陣裝換法求整體剛度矩陣
8 P" t/ M$ q7 D+ ]% 自由度Ndof=2*NJ5 p2 a1 @& B) C0 p
Ndof=2*NJ;+ v% _# ~% _/ G o
K=zeros(Ndof);* i7 |" Y: | H
for ii=1:Ne
. E! [9 x. F: f% P/ G& @) W+ n G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];
7 l2 \ G& @ S) ^ KK=G'*Ke(:,:,Ne)*G;
) P$ x; Q7 u5 ?! } K=K+KK;
0 E! J8 F h7 T1 W9 N' nend % i0 r( y% A3 z* }' l, L/ S9 K
%------------------------------------------------
) g: c2 O/ Q4 |% 約束條件,對整體剛度矩陣進行修正,,以便計算7 x5 f: s9 F" @, B
F=zeros(Ndof,1);; F& L, t5 p$ j' ~9 J
F(Ndof-1)=-100;
( j# q+ ~6 `) k9 Q% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0
7 e9 s" `+ z% y1 u1 Z$ v% LK(1, =0; K(:,1)=0; %可以省略
7 [/ s. F) H* I! b; E3 PK(2, =0; K(:,2)=0; %可以省略# l7 X; D5 O+ S; g7 u% q8 P9 f
KX=K(3:Ndof,3:Ndof);
3 @6 ]4 A0 U4 B3 WFX=F(3:Ndof,1);
$ w" I6 U" v3 x4 ?& L; n%------------------------------------------------5 b! o( F, p* @1 X$ N" z" b" I
%求整體節(jié)點位移列陣2 I9 [9 f( Y v1 y' w' v
uu=inv(KX)*FX;0 h' L! @1 ?/ d S# j$ i
u=[0;0;uu];0 ~, E2 |9 L" Z* t U8 z
ii=1:2:2*NJ;, H; e3 x w7 {0 ?" H6 C
v=u(ii); %各節(jié)點撓度/ s% X0 Q) U# e
xta=u(ii+1); %各節(jié)點轉(zhuǎn)角
; h& |& y# o, M7 L, j%------------------------------------------------$ B3 A$ H4 d b* ^
% 后處理,,計算單元應(yīng)變應(yīng)力5 L3 ]! t. S: ~' @# @( w
B=subs(B,x,'L');
+ q& s: G; O, kB=subs(B,'L',10/Ne);! x5 S5 G4 |. p. r3 E% u5 ~& O
Strain=zeros(1,Ne); %單元應(yīng)變,并初始化
) S3 J# ~9 l4 ?Stress=zeros(1,Ne); %單元應(yīng)力,,并初始化
X( V7 p4 u# H, |% yfor ii=1:Ne
1 k$ T' {; [" x9 ~$ D Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);: z; ?7 X! z" r5 R/ s( D7 K& T2 T8 ?
Stress(1,ii)=E*Strain(1,ii);
3 B' g7 n9 z I9 x6 B3 Lend
; v8 p7 R+ Q6 c%--------------------------------------------------! K2 `# Z. Z" i0 F2 H5 ]* a; g
% 以下程序為屏幕輸出處理) V0 L. ?% }: _8 T8 u( w
disp(' ');
; a6 s" P: N9 P$ H4 n2 v+ tdisp(' Input:1-print Node displacement ');' n( I1 E7 O! ]
disp(' Input:2-print strain ');, y' ?) A/ R1 k8 a% A# ~1 G
disp(' Input:3-print stress ');
% E2 H6 S# J+ y. bdisp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');
. o, p, S, t9 M) ^0 c
$ B% n* p$ @7 E! ]# J( dwhile 1
8 J2 }3 Z# V$ D, |9 j+ y5 F ii=input('Please input1 or 2 or 3:','s');: l$ B# j. U. t- z* B s: I( ^
switch(ii)
+ I: Y& O" ^) @9 x8 ^# j; z2 P case '1'' a8 X4 X0 E, n# F4 @& E$ K
disp('Node displacement');% y) h+ b0 y4 X2 `8 N2 V6 X8 v
disp(u');
. `( _7 [" M% } D F. c" @ case '2'
1 z6 v+ T2 Z* w+ l" Z" T/ c disp('element strain');( W$ l4 B( G9 N6 \
disp(Strain);
% }% d% m D+ l! c, c }% S( a1 d case '3'
: z4 y6 T2 V9 b2 K+ I1 A$ p disp('element stress');* P% P; _+ f- p# K' n; K/ L+ S7 U
disp(Stress);
6 \1 n( b! F8 n) F" X case 'q'7 Q0 H% V6 F# M' x0 \
disp('End of program');
- Y) _8 `* {3 f" ^ break;# d. v; I1 J2 {# N6 r
otherwise. l/ r4 l2 y( X! O8 x
disp('error!Please input again');( `$ \6 g' R* x* Z' W# S( V
continue;
6 ]4 s5 g+ K( v8 M/ A end! f0 @+ W! H0 I1 k% t( j5 M
end
: P; `$ t9 |" ]* G
k0 N4 [1 O9 A4 m+ ?' g& G* R- r
7 ]* h( {) b9 h* W" y9 [: A |
|