机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3628|回复: 7

分析一段matlab有限元程序

[复制链接]
发表于 2013-3-24 13:41:49 | 显示全部楼层 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。" r) r1 D( b" y; [
今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。' H( S$ N0 Y7 M: {4 B
毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。
5 c+ g' s$ ~! l; @4 ^/ }记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。* }3 q! B8 }' `* k  v1 N( S+ t
非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。- V! p/ @1 o: |* D+ ]! N$ [4 ?
--------------------------------------------------------------------------------
8 G% o# n$ B+ I  O7 y梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称
, r; `+ |8 o' G5 \% e9 g# ]% L
3 {2 y  {5 {* @7 y9 |/ |* T6 M- W  ], x2 Y3 T7 x
%------------------------ BEAM2  ----------------0 N2 Q3 a* h- m( y, T
disp('========================================');6 m+ Y! J+ T! c0 t( a% p% m
disp('            PROGRAM BEAM2               ');
# S2 @  n/ t) _7 G) g: u/ ~disp('        Beam Bending Analysis           ');; E! w9 Y1 a: x5 n, D3 P4 ?! m
disp('        The programmer:太平岛           ');
, L  X+ i2 ]1 H1 _. f$ Jdisp('========================================');
8 }6 H/ J  A, q$ ydisp(' ');                        %输出空行
2 o& x9 z) J3 w2 Mwarning off all                        %关闭所有警告提示(求积分时,警告信息比较多)
+ F; O$ b) T9 w/ A8 _& p" }; fNe=input('Please input the number of elements:');        %Ne为划分的单元数
( r" ?/ P5 g: P1 q. J: v5 XNJ=Ne+1;                        %NJ为节点数
. M/ B& j7 F8 G3 _- mx1=0;3 M) F) ?$ |% b+ y: e
x2=sym('L');: \( C* a3 z( l+ A! ^- q' ?
x=sym('x');                        1 o' f" ?8 \+ [2 m+ e# y
j=0:3;: E/ q4 s* l4 v- Z, m
v=x.^j;8 d/ |4 l+ r! @  y6 d. u4 _( I( 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];
- ?5 N1 x; [0 ~5 `N=v*inv(A);                        %形函数
- u& h5 w: T5 a3 A) v%-----------------------------------------------
- j9 i* _/ Y# \7 P3 l$ G' L+ u% 求单元刚度矩阵
, o8 S) D7 `9 P# t* WE=4.0e11;4 W7 ^9 v- W4 O( j  l4 |$ ?
I=5.2e-7;                        %I=bh^3/12=5.2e-7;3 @: m% y% Q% M- V& L# B
EI=4.0e11*5.2e-7;
" ?! L/ R4 ~3 c1 a- t2 I( m5 wB=diff(N,2);" ]& L( \% O5 p) \% i: V
k=B'*B;  M( u7 h. b2 z2 x1 L
Kee=EI*int(k,x,0,'L');3 L  @* L3 ^: i3 @& A% l# F# y
Ke=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化09 z: g% l0 _/ {, z. K. A- z
Ke(:,:,1)=subs(Kee,'L',(10/Ne));3 D5 v* n+ p0 o2 h
T=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)1 Q: r/ w' V' w: {  |5 h. t' c' e6 m
Ke(:,:,1)=T*Ke(:,:,1)*T';
$ J1 |* j8 h9 F' i: m% l) bfor ii=2:Ne
8 Z/ W' ]8 [3 S& F    Ke(:,:,ii)=Ke(:,:,1);* X3 f% |+ b: R9 i
end
9 f& x* J! G3 m+ U3 E2 S, N3 {$ `Ke=double(Ke);9 E$ P+ m5 v8 ?; W, A
%------------------------------------------------( ~( Z- M! G: p$ R2 V, t+ M
% 由矩阵装换法求整体刚度矩阵2 t2 q. _9 a1 L4 m9 J0 L
% 自由度Ndof=2*NJ$ k8 J* P. L( t. O- G$ N0 X6 K
Ndof=2*NJ;: B/ W" V* X) q8 l
K=zeros(Ndof);
% F' s2 ]7 S9 o" h; S& E& Y% m  M& Afor ii=1:Ne
. F) ?& S; Z6 L( d3 H    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];
: w9 V, Z+ e* Y7 [' r* h& L    KK=G'*Ke(:,:,Ne)*G;! w3 V. ?  U. `8 I- M3 F- T, N
    K=K+KK;  {6 n3 E" K& M
end  
/ M6 _3 W7 [4 V& t0 @4 x5 @%------------------------------------------------. G( C: \) J3 q
% 约束条件,对整体刚度矩阵进行修正,以便计算
/ e) H( Y, F- s, N: CF=zeros(Ndof,1);
! O6 G; n9 J4 d/ J5 kF(Ndof-1)=-100;
, v* W% S1 b( J# C! H* u- p% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0$ u" E0 o( e3 \
K(1,=0;        K(:,1)=0;        %可以省略
( K7 z2 [: V- rK(2,=0;        K(:,2)=0;        %可以省略
& S' i# c& v# `" x; g; Q* zKX=K(3:Ndof,3:Ndof);% [( q( y' y0 A! X/ c2 v) @6 p4 t, N
FX=F(3:Ndof,1);
. Q; t" i  l  z3 V' S! Y1 e%------------------------------------------------: U, y. I  e- l7 G4 J# c% {7 z9 R; w
%求整体节点位移列阵
: _1 ]& U  Q* m8 i/ s6 l( Suu=inv(KX)*FX;
' _" C( n$ t9 {; su=[0;0;uu];7 j) K( w9 O/ C) q8 }2 z
ii=1:2:2*NJ;0 L- k, O0 q% r8 a4 O. m
v=u(ii);                        %各节点挠度
4 `/ U' ~2 i3 c9 n$ d9 _1 rxta=u(ii+1);                        %各节点转角' N3 ~& Y1 ]1 T9 ?
%------------------------------------------------
$ a: |. f7 e- q- d+ S5 R% 后处理,计算单元应变应力
, [3 A$ u& o( s4 H9 F6 yB=subs(B,x,'L');9 h3 p( j0 R$ [- Y8 I
B=subs(B,'L',10/Ne);+ a8 w; U# m) K) F9 h
Strain=zeros(1,Ne);                %单元应变,并初始化
  X+ m# u7 t# I& K+ JStress=zeros(1,Ne);                %单元应力,并初始化4 s; [# K' L0 A
for ii=1:Ne
9 O3 ]8 J6 B4 m: l    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);& H! k3 g9 r* U8 }2 _
    Stress(1,ii)=E*Strain(1,ii);
+ }! }0 h$ Q: f# m7 S- D  send2 L, }8 D( z: p/ }1 r
%--------------------------------------------------
3 R. j' U7 F6 q$ }0 V( z9 F! w% 以下程序为屏幕输出处理( w% B3 F- g) ]: m
disp(' ');
1 P+ {9 `; _/ tdisp(' Input:1-print Node displacement ');. [. Q2 ~- w/ x- |  g
disp(' Input:2-print strain ');' [' j. n2 |3 L8 X/ u  |* c) C/ U/ X
disp(' Input:3-print stress ');
2 |3 c$ K: w, O7 o7 b, ddisp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');9 u+ ?1 Y' B$ b* D& P6 O+ w2 {  {

3 F6 B8 {- ?! z2 e% q2 wwhile 1+ O0 L: D- Z2 u: {0 A: z  r, l9 `
    ii=input('Please input1 or 2 or 3:','s');
. E/ x2 n+ L, Z* V* @        switch(ii)
7 J# s* E. k" C- g. `; r% W3 y- v            case '1'
) H2 \2 j; |8 p6 \# D. {6 T                disp('Node displacement');
( u+ }% |, y; S7 l                disp(u');
- ?/ s7 K7 O4 ^5 @4 }            case '2'- B" Q# J* W2 s1 B, A) u
                disp('element strain');
7 G; h' N4 P. ^3 m4 N                disp(Strain);/ m6 t6 N2 P- E1 o
            case '3') x5 k  E8 ]/ a9 g% @( |, ^
                disp('element stress');7 z5 Y/ ?+ h8 F# `
                disp(Stress);
- k# f9 \. Y$ f! {6 |( M            case 'q'
' e) O) n9 {8 j% M- n                disp('End of program');
3 L4 Z; Q+ |  d6 h8 P- T" E% x3 U                break;
$ Q* N! l1 k# L! }; \* a4 w5 k            otherwise6 |! h6 u4 W' ^/ m6 {
                disp('error!Please input again');) q0 d; N) q; Y
                continue;
9 g6 `) f9 E  @' L& |, i5 Y        end
( u! ^5 g; V8 yend& r0 C- G  {% E* f0 K! l% l
. Q" h, D: x) f) {5 S7 }

/ s2 }( O9 F/ \4 W- F
回复

使用道具 举报

 楼主| 发表于 2013-3-24 13:44:32 | 显示全部楼层
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧3 e3 Z1 ]) T- t% m4 j
K(1,:)=0;        K(:,1)=0;        %可以省略# q3 @9 q2 v  R# I
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 % @: K0 f' [6 {, ]
谢谢你啊,太感谢你了

' o) X1 w/ l" Q$ 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;
7 C/ Q$ x4 G* _& ~6 pv=x.^j;  是干啥的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 10:03 , Processed in 0.056464 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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