|
這是關(guān)于梁單元的,可能大家覺得很簡單。。。
: S/ m/ O& C, l+ L: |/ d8 A2 E今天翻電腦里的東西時(shí)發(fā)現(xiàn)的,是我大三時(shí)有限元時(shí)的作業(yè),記得當(dāng)時(shí)花了很多時(shí)間研究,學(xué)了不少東西,一個(gè)簡單的作業(yè)可以涉及各方面的知識(shí)。, S. H/ Y5 W" ^, r4 L6 J4 U: u, [- `
畢業(yè)半年了,雖然記不清彈性矩陣、剛度矩陣等,但是只要一看書(好像現(xiàn)在的心境不下來)應(yīng)該會(huì),學(xué)校交的學(xué)習(xí)方法和理解問題的能力,有些東西不必記,除非每天從事,那該叫熟能生巧。
, r' x, X1 h+ I記得當(dāng)時(shí)編了兩個(gè)程序,梁和三維實(shí)體的,我分享一下梁的程序吧,起碼有亮點(diǎn)和創(chuàng)意,可以自己選擇劃分個(gè)數(shù),在matlab方面花了不少功夫。; Q, [- \& a# H R6 z/ q
非常感謝當(dāng)時(shí)的有限元授課老師“韓清凱”,雖然老師已經(jīng)到了大工。上課的教材為韓清凱 的《彈性力學(xué)及有限元法基礎(chǔ)教程》,書上有個(gè)梁單元的例子,在82頁。7 {- T4 {& h& r c( Y' N) ?
--------------------------------------------------------------------------------
% c' z4 d$ Q( B4 p- B: m) Y梁程序如下,名字就不寫了,用昵稱吧“太平島”,這是常用的網(wǎng)絡(luò)昵稱$ j6 B) d. s! f7 T, S
; R5 d6 R$ g0 c& ~7 m1 o- h8 u6 A
%------------------------ BEAM2 ----------------- A- o8 ?0 G4 I! r! M) {/ a% F
disp('========================================');
# E+ Q5 b, E! |1 W ~, \disp(' PROGRAM BEAM2 ');/ _& O8 t8 D; w# v4 U
disp(' Beam Bending Analysis ');
( w7 K6 |' o2 @( _disp(' The programmer:太平島 ');
3 \- |9 }4 r/ Q' M: idisp('========================================'); a6 v3 i+ z3 {, d6 ^. j
disp(' '); %輸出空行) U0 z0 d1 M$ z q# G
warning off all %關(guān)閉所有警告提示(求積分時(shí),警告信息比較多)2 ?# @& I9 W! }) j" S5 G4 \" t
Ne=input('Please input the number of elements:'); %Ne為劃分的單元數(shù)+ h" H8 D. z. S8 k
NJ=Ne+1; %NJ為節(jié)點(diǎn)數(shù); d. }6 g. G# f( E1 |
x1=0;
$ j; q H: c& T0 |- u, k2 A) Wx2=sym('L');
" o1 @ i- C3 A& ~; v- `9 }& Ox=sym('x'); 9 g% @9 g0 Q; b4 S0 f; J7 v" q
j=0:3;
) V6 f7 ~/ |7 D' q/ R' p3 wv=x.^j;
" f- D5 X$ p$ G8 D. d7 NA=[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];
7 @2 A4 {+ z/ oN=v*inv(A); %形函數(shù)3 E& }3 K" |/ ` A
%-----------------------------------------------
2 U: j3 E1 H0 i, h, a$ N& G. l% 求單元?jiǎng)偠染仃?font class="jammer">6 b; X, `: n" p7 k* T
E=4.0e11;$ R3 l! G% b( O7 U, u+ O
I=5.2e-7; %I=bh^3/12=5.2e-7;8 M% D, J! j' M9 o) X6 G, E- D2 c- f
EI=4.0e11*5.2e-7;
3 k' e y5 Q1 N& |B=diff(N,2);
, b" s8 d; b* ~) `& pk=B'*B;) S+ \4 c8 O1 _: G' M1 _# D6 m
Kee=EI*int(k,x,0,'L');0 C: y0 Z8 e) b1 R; N0 n: j. Y
Ke=sym(zeros(4,4,Ne)); %用三維矩陣存放單元?jiǎng)偠染仃?每頁存一個(gè),并初始化0
7 v7 g& u, @7 Y3 G+ C7 VKe(:,:,1)=subs(Kee,'L',(10/Ne));
( |( v7 H8 B0 W WT=eye(4); % 因?yàn)榱河趚軸的夾角為0,所以坐標(biāo)變換矩陣為T=eye(4)
& ?- ^2 \. f1 c$ N2 mKe(:,:,1)=T*Ke(:,:,1)*T';
0 a. u* }4 g( V1 Y) w7 ^5 ufor ii=2:Ne
9 ?5 @3 _/ t/ W+ f0 p Ke(:,:,ii)=Ke(:,:,1);% Z* M& H+ @( n
end
: L" P7 y/ L6 Q& PKe=double(Ke);
( Q0 j1 S8 L6 h/ H0 v: }%------------------------------------------------
( H$ B) [8 v6 r4 r/ B7 j; n( t% 由矩陣裝換法求整體剛度矩陣
& ^, c$ k# S7 }( n9 v+ w% 自由度Ndof=2*NJ R9 u) ~4 `% R5 S9 [0 O
Ndof=2*NJ;8 ?: Z; j! H! X) I
K=zeros(Ndof);% v6 t' Q' B/ F( H* p, e
for ii=1:Ne
& H" a* Y! ~8 U, w5 A G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];( V: I0 S4 u" P/ ~
KK=G'*Ke(:,:,Ne)*G;# L4 Y/ W4 w2 s" B+ Z0 [% R7 v: d5 o
K=K+KK;' V# @2 O7 Z1 _; n2 b3 q: X$ M% i
end # I' ^9 b& Y$ Z) X5 C' [. |
%------------------------------------------------& `% d2 T- ~' j' G& n: g
% 約束條件,對(duì)整體剛度矩陣進(jìn)行修正,以便計(jì)算+ w+ a; |2 Z4 {! z2 X' v( {, u) S
F=zeros(Ndof,1);
* ?( i; \9 k) u) KF(Ndof-1)=-100;
( C0 X6 a& H* \! z, U2 a% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=05 S' v1 {, T# o9 s: O4 h
K(1, =0; K(:,1)=0; %可以省略
. n- w, @6 L! G$ NK(2, =0; K(:,2)=0; %可以省略
7 k4 v. S7 i' i; V! t2 J u' o7 xKX=K(3:Ndof,3:Ndof);8 U4 d" H6 |' i: k$ B
FX=F(3:Ndof,1);* [+ P6 b' O" D+ d H( K9 m3 D; a
%------------------------------------------------9 r3 d( Y# z5 _
%求整體節(jié)點(diǎn)位移列陣
) b( d, Z4 A- i% ]( xuu=inv(KX)*FX;9 R6 b7 s- S4 ~: H' o
u=[0;0;uu];4 Q# d: T$ ~4 k5 A$ V) q5 S
ii=1:2:2*NJ;
4 l, b: B- g% {) \6 z% w6 zv=u(ii); %各節(jié)點(diǎn)撓度
# f) ^: c! [; g. ?2 J. j5 wxta=u(ii+1); %各節(jié)點(diǎn)轉(zhuǎn)角6 Z2 P6 \1 d) r m1 d1 R3 E4 o
%------------------------------------------------
3 c' b" s3 b* e! `' f9 j% 后處理,計(jì)算單元應(yīng)變應(yīng)力0 ?: J/ }2 v$ z3 h" q9 Z8 n! T
B=subs(B,x,'L');" K: x' [: h, ? b8 \+ }) ?
B=subs(B,'L',10/Ne);' G+ }1 q" ]6 {/ y3 M* a `: @
Strain=zeros(1,Ne); %單元應(yīng)變,并初始化
+ D- y% t& ~. ?! {Stress=zeros(1,Ne); %單元應(yīng)力,并初始化 b3 z! H6 N6 ^' ?% r8 t. f7 J
for ii=1:Ne
j7 k E5 y: B# ]3 w Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
2 q, Y1 c; H" C/ Y2 w Stress(1,ii)=E*Strain(1,ii);
3 u# g+ D* U- t! `3 jend
7 M' ?8 {7 g* E" r1 b+ p! i! N%--------------------------------------------------
+ G0 S) U5 h# z0 w% 以下程序?yàn)槠聊惠敵鎏幚?br />
! E7 z- u, F3 M( w7 E, hdisp(' '); C7 O' m: C6 q
disp(' Input:1-print Node displacement ');
! E9 V8 u5 M4 S& sdisp(' Input:2-print strain ');
: E6 H, l& q4 b8 l6 d. j, j# X* Udisp(' Input:3-print stress ');: A! F& A- i, Y* w# g4 g3 Q/ f
disp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');( N. J+ _9 d# D; V- I! `# E2 D
! |4 k5 v/ J) j7 q
while 1
7 o6 U9 R# i7 Y, S5 Y8 K, R ii=input('Please input1 or 2 or 3:','s');
5 L) Y4 |& ^- M+ Z2 L2 N! G# A switch(ii). ]2 Z r" F' _) {) H/ b' |
case '1'
: n3 u- P& b4 Y, m% D- X; Y3 M* M disp('Node displacement');
& ?1 h+ F+ e: m8 M! [; L# _; a disp(u');2 m* [5 B t5 a. g& d
case '2': T, Z, R5 I4 \1 r5 e7 @# D
disp('element strain');5 |" k4 o" ]" Y+ Z0 E3 R6 G! Q
disp(Strain);$ a5 K; O" F9 ~4 X( h5 Y3 y9 b s4 o
case '3'$ } ]0 t4 p9 c! d& O5 j2 b
disp('element stress');$ }" i: j2 V/ U; K. n; B {) Q
disp(Stress);
- v2 F1 R1 M2 F, x; H0 H, p case 'q'8 s1 @$ z, }- h, P
disp('End of program');
* [. a; Z# |" ?& g- H; U$ r; o4 p break;/ Z) D5 H( I; ^5 x5 ^+ s
otherwise
7 E! A3 ~1 C2 N: e disp('error!Please input again');
% z7 [5 D+ f+ ]7 V; G+ k( H continue;7 V; u R3 N3 J# X8 g3 F# S
end
2 c! P; G7 C( a# Z& X9 qend, X* X, i! {; w
( }: a6 E. q6 D7 R5 g8 v. ^/ t
+ w/ E! ]* E( O; n; L! p/ l! P
|
|