找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4202|回复: 7

分析一段matlab有限元程序

[复制链接]
发表于 2013-3-24 13:41:49 | 显示全部楼层 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。  {! }( S' k7 M, ]4 V+ H* D2 a/ |
今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。
6 l: Q# |0 o: q! W毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。8 `! d" I0 l1 y/ l5 q
记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。5 s8 `$ W3 g# A  A9 q# ]$ U9 n
非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。
' u8 m  n+ s, Z- f8 e8 ^1 ~. {--------------------------------------------------------------------------------
" |+ q1 V* u- U  R8 W: d, D8 c梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称$ c0 n* l/ w* m

( F7 Q5 X+ |( \: C) A4 u  @. v0 [( t$ e( |' _1 g0 Y- V% C. u+ ]
%------------------------ BEAM2  ----------------
  n$ I6 q0 M9 `7 X, }7 l3 vdisp('========================================');" r/ j, R; o4 Y" g, u5 s$ A, ?
disp('            PROGRAM BEAM2               ');
* _5 ?! {. n& x6 B: x' N- Ydisp('        Beam Bending Analysis           ');# G+ q4 Z  k3 g2 m/ \
disp('        The programmer:太平岛           ');' Q% _7 N) r; {% j$ s, p
disp('========================================');
% M, R  t7 F1 L3 ?$ mdisp(' ');                        %输出空行
) u  t% i& F' t: m5 {warning off all                        %关闭所有警告提示(求积分时,警告信息比较多)$ h! Z, }7 E8 o
Ne=input('Please input the number of elements:');        %Ne为划分的单元数: X  ]: _4 ]2 s) o
NJ=Ne+1;                        %NJ为节点数0 g  h2 ?# |0 w, g( O. e5 U
x1=0;+ _; I% P' R7 X3 p
x2=sym('L');/ F4 u7 M* F3 i1 q$ ~# d) `  u
x=sym('x');                        : `& Q$ v. Y0 z: _4 ]) F0 |
j=0:3;
1 w0 b3 e' j0 ?v=x.^j;
; a( M, E0 e% e# f+ F1 L& ?; ^; f: s9 zA=[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];* D. T2 k- m& n/ ^6 i! K& K+ o$ {+ p
N=v*inv(A);                        %形函数- }6 s3 L( Z; Q( ^/ [" _5 S
%-----------------------------------------------$ {4 J5 ?, v1 |  \
% 求单元刚度矩阵* _6 a& J/ ~  d& p& ?* I6 x- p( X
E=4.0e11;( {* ]; o3 }/ f$ {, a: T
I=5.2e-7;                        %I=bh^3/12=5.2e-7;
* q  Y6 S) n5 c; F" ~1 PEI=4.0e11*5.2e-7;. i: E, m" L) s, ~8 T
B=diff(N,2);" Q* |( [! ^' H5 b# K4 W; z1 X
k=B'*B;! s4 T0 ^7 j+ d* e
Kee=EI*int(k,x,0,'L');/ {1 C$ z0 `: T6 [& K. z; P
Ke=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化06 k) B- N  z' Y9 ~+ ~$ p+ z8 R6 n
Ke(:,:,1)=subs(Kee,'L',(10/Ne));: ~  k! }4 k# J  j1 x$ s
T=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4); s3 R; h1 D/ s% {7 j6 H
Ke(:,:,1)=T*Ke(:,:,1)*T';6 ]0 s% W% l6 v+ ^. _
for ii=2:Ne2 n9 N- c1 F" h- r, L) |# U; K
    Ke(:,:,ii)=Ke(:,:,1);
1 s$ O+ l1 U6 x, Yend
; H- k2 _7 l! f; d9 y. _3 C6 LKe=double(Ke);' H, t% g8 m1 X9 J  o% w) r$ H
%------------------------------------------------; d: {8 t  A; p
% 由矩阵装换法求整体刚度矩阵
, L2 d) x: m3 L% 自由度Ndof=2*NJ
$ k# b$ r: I4 ?5 vNdof=2*NJ;
9 y  I4 h5 {  [, E: U: JK=zeros(Ndof);" w: i8 `2 @/ ]  ^/ j( K
for ii=1:Ne( N+ P5 e9 G" U$ A1 X' H
    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];
2 E% i9 Q- y% a+ _  j; k0 d% d    KK=G'*Ke(:,:,Ne)*G;; H, j2 M+ X) F7 h& C1 O* O0 e
    K=K+KK;
! j& U* v$ V0 E6 R3 cend  % O# U, p# k+ `- z  ?' y
%------------------------------------------------
2 t4 C4 |4 g# Z: Q9 d) W/ d- ^# o% 约束条件,对整体刚度矩阵进行修正,以便计算
' R8 {: |8 C# f' CF=zeros(Ndof,1);( x' Y$ F5 V3 ]2 g" X
F(Ndof-1)=-100;
$ j; q" ?/ A8 ]1 H# u3 T% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0
7 d* W  ^+ d" p) G) qK(1,=0;        K(:,1)=0;        %可以省略
9 ^% ?7 d1 ?3 \2 I. c# {, I5 ]3 cK(2,=0;        K(:,2)=0;        %可以省略
7 t' a4 u7 O/ l7 ~" v7 L# cKX=K(3:Ndof,3:Ndof);$ t. Q0 f* [4 h' f* \8 }1 i
FX=F(3:Ndof,1);: F+ s1 d  a% o& u/ R$ p9 ?
%------------------------------------------------
  }  y" c$ Z* ~  }2 w2 A2 [%求整体节点位移列阵; e) H- A& v+ M
uu=inv(KX)*FX;
! h$ i; _( B+ }) J( j; `- Y, Ru=[0;0;uu];: J# G( c7 _& e& D6 @. W7 T) w
ii=1:2:2*NJ;- s) k2 ]1 I# L' L# Y$ ^
v=u(ii);                        %各节点挠度0 Y" v/ G! r- `+ R; H
xta=u(ii+1);                        %各节点转角9 v! p1 k6 D0 C) n3 Z- `$ i* V
%------------------------------------------------
" ~3 b% B7 F' R3 T+ h3 Z% 后处理,计算单元应变应力
2 _: [; g: o6 @B=subs(B,x,'L');, O4 \( M2 c0 t
B=subs(B,'L',10/Ne);
3 P3 R+ G$ R9 wStrain=zeros(1,Ne);                %单元应变,并初始化
- Z! D" B4 s. _0 x: c: jStress=zeros(1,Ne);                %单元应力,并初始化% K; n) _( n; j3 h8 l, L+ E' S4 o
for ii=1:Ne
  X1 D5 e# ^1 j' E! p) l    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
% b( e! s! {0 z    Stress(1,ii)=E*Strain(1,ii);
; T+ K2 Q% F9 e5 xend  n: g+ i3 ^" f. s3 n# L4 Q
%--------------------------------------------------
+ j$ c1 @' u; X: P. k3 o3 {/ f( X- l! e% 以下程序为屏幕输出处理  a! f' \% K) ?$ X" o
disp(' ');
! W2 G$ J: g. \  r; O# v( ~disp(' Input:1-print Node displacement ');' I" ?9 f2 q" E# c- v
disp(' Input:2-print strain ');
5 c$ E4 i, Y6 Mdisp(' Input:3-print stress ');7 W7 r& W+ }' I& c
disp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');: u0 L/ O7 Q0 u8 o- ~. |

3 N! [# ?0 J$ H8 v$ U6 {while 1( W/ Y# ?  Z* `
    ii=input('Please input1 or 2 or 3:','s');' r; z) T& p' T; b
        switch(ii)
: u6 |* K, K2 D! r$ Z            case '1'
' B% i3 j$ [( E; O) w                disp('Node displacement');
$ U9 y) N0 N0 X8 k) N/ j% h                disp(u');7 ?7 Q2 ?" P# }
            case '2'
& t5 W! v  }5 P; _                disp('element strain');$ u, Y; l5 a2 ^
                disp(Strain);9 R3 M6 g8 ~" R, C( r( ~% O6 O
            case '3'+ [8 P" y% o5 ]) E
                disp('element stress');
1 H) H. _- w5 r" T1 ^                disp(Stress);7 r- }' X! W! J0 S
            case 'q'
' W* n' W* m9 Z  {                disp('End of program');
: |9 @$ u0 }5 `( F2 Z9 M& ]. W" G                break;6 T. r+ Y, M  p, F# i* n1 X( h
            otherwise; \& j, I8 g- w: C6 h+ F2 U
                disp('error!Please input again');
7 \$ }  i1 o) q* \+ t" y  N                continue;; P3 I; g& b* Y; l/ M! d
        end  @5 O: i0 u. c- _
end
+ r( p; ^! `2 U/ @" z+ e( N

: B. x3 \  W9 l* J2 g8 r
0 Z- ^5 a6 x! q
回复

使用道具 举报

 楼主| 发表于 2013-3-24 13:44:32 | 显示全部楼层
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧) y3 Y4 Z: c( z# q$ e. [. v; j
K(1,:)=0;        K(:,1)=0;        %可以省略" Y) G3 s+ B  _
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
) y3 k% `2 \7 V5 d) G: k: y& x谢谢你啊,太感谢你了
" K8 |5 k4 i) p! t8 B  ?
这谢啥呢?
发表于 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;# W! A& Q: l* f) V: j  m4 X
v=x.^j;  是干啥的
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-16 05:11 , Processed in 0.097114 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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