找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4284|回复: 7

分析一段matlab有限元程序

[复制链接]
发表于 2013-3-24 13:41:49 | 显示全部楼层 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。
" A( K& U' e3 k) s今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。+ a  @0 y; Q5 O. H
毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。
* h7 B. J# C1 N. Z记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。
- `; R1 y1 n  A) L$ B非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。1 w. ?! ]  H5 D& x& d  u
--------------------------------------------------------------------------------% U1 f! f$ `/ P. n0 p* y3 Z
梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称$ q- I7 q! P* A
7 A1 b  Z. h, y1 g  W% ~; J

& }( f0 W# V$ p1 j* f4 d%------------------------ BEAM2  ----------------. }* l  V" Y. v, F: B  ]8 F) D1 b
disp('========================================');3 k# x; p7 p: T" ^3 E
disp('            PROGRAM BEAM2               ');
* O( D7 W* G' A/ z& adisp('        Beam Bending Analysis           ');- @! t- J3 |  |: \
disp('        The programmer:太平岛           ');$ ~3 C# y5 H# u  R3 S: |
disp('========================================');- `& G4 s1 E8 I1 N& S4 @
disp(' ');                        %输出空行
! A5 g/ G" d8 H5 F* {  E6 p0 d/ mwarning off all                        %关闭所有警告提示(求积分时,警告信息比较多)- X: \# \, a! w: {9 V) m3 Z
Ne=input('Please input the number of elements:');        %Ne为划分的单元数
( _. G  e- d$ e  q* r) ^5 Q' r- HNJ=Ne+1;                        %NJ为节点数) @  _( o3 k2 U# L6 y" o0 \# ^
x1=0;
# _% d6 N" b5 ]+ I, e$ D/ zx2=sym('L');
* H5 p. B# n$ p  o7 ?0 a+ lx=sym('x');                        0 u/ O$ P- h% G6 D+ m
j=0:3;
; E% M; G- Q! n  W$ y4 o! n+ uv=x.^j;) g$ I- Q1 K. v, \
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];
0 s% \: l: A8 M! Z/ T+ i) D) ?N=v*inv(A);                        %形函数' R# P9 [3 {/ V6 }# d( ~* E" K
%-----------------------------------------------
) b4 r7 D' v7 _+ @6 N5 }% 求单元刚度矩阵
: `# q1 ]4 c& m4 _# ]E=4.0e11;% N9 N/ n( c7 h7 P4 K/ X8 s3 Q
I=5.2e-7;                        %I=bh^3/12=5.2e-7;2 J" _! {8 y  C, Y9 y
EI=4.0e11*5.2e-7;9 g% H+ `6 v7 R# \% Q' q% ~" ^6 f, B
B=diff(N,2);" X; |0 W% c$ Q% ^# B: P4 _
k=B'*B;( u  Z% j3 `& q1 R1 q, x
Kee=EI*int(k,x,0,'L');, {/ |. [8 X; E: \. R3 T+ Z+ h! s
Ke=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化07 G2 G. E+ p. K8 h: e4 h
Ke(:,:,1)=subs(Kee,'L',(10/Ne));' p% c2 u7 `! K( _6 A3 X
T=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)
1 c" v: Q; \6 L% CKe(:,:,1)=T*Ke(:,:,1)*T';4 b0 H* I* I* L1 b1 R
for ii=2:Ne
1 }' V# b" |/ ]. u) h$ a2 k, C    Ke(:,:,ii)=Ke(:,:,1);4 I, B% {3 O8 N3 u; k
end
% g: H2 y6 ^* L. oKe=double(Ke);
8 j: E% q, L! H4 z: x! u# Y% q%------------------------------------------------
5 L7 Z: ], M4 r/ @2 S% 由矩阵装换法求整体刚度矩阵/ ]+ ]% W; b9 P3 J& P* Y) y: ?
% 自由度Ndof=2*NJ
7 @3 _! o1 [  p* I, u7 nNdof=2*NJ;
; [2 w- T. `2 Y2 X2 H5 f5 _/ `5 {K=zeros(Ndof);
; ^7 M! {* H  ?- r( ^6 lfor ii=1:Ne
, j* m1 V$ w$ J, \    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];( o9 n4 R7 o" |  ]/ r
    KK=G'*Ke(:,:,Ne)*G;
6 g+ C2 V2 Z2 R# W+ Z" e' R# S    K=K+KK;& D8 T% Q1 o& `& x, I
end  ) A2 ^& h, O6 o6 U5 [: i( h, o4 ]
%------------------------------------------------
6 ]5 L( K* s$ c! q' i4 G# e$ `% 约束条件,对整体刚度矩阵进行修正,以便计算
" T, a. P$ `) X8 RF=zeros(Ndof,1);' M5 J* I: W! o& w
F(Ndof-1)=-100;' ~  }3 I4 l/ f; }
% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0
% s. A: _( Z, q+ PK(1,=0;        K(:,1)=0;        %可以省略
, W* v  K; f, p: y, HK(2,=0;        K(:,2)=0;        %可以省略
1 ?+ ^2 f7 @  k& b& O  r& aKX=K(3:Ndof,3:Ndof);
6 e; }: ~2 |% i+ UFX=F(3:Ndof,1);' p/ i6 W7 P+ I. ]) b( e! a
%------------------------------------------------+ i+ Z0 l6 Z0 _% C# I
%求整体节点位移列阵
$ ]1 j, [9 y2 H, _% q9 k4 Puu=inv(KX)*FX;
" t1 L. q& N4 F& E! fu=[0;0;uu];
* D- S& [4 t7 W% F. p* X6 E4 m# Kii=1:2:2*NJ;) O* E: [2 a) v7 f9 \$ D
v=u(ii);                        %各节点挠度
4 h0 U7 o3 j$ W  k) ~xta=u(ii+1);                        %各节点转角
" O4 {7 S4 z7 F& C# G6 b%------------------------------------------------
( ~$ U& K$ T( G7 p- J2 [5 ?$ R; S% 后处理,计算单元应变应力
% [3 k3 `. [2 ^; [- H4 zB=subs(B,x,'L');+ L8 M: z+ N3 {) c7 O
B=subs(B,'L',10/Ne);' E7 F2 R$ E7 C1 h
Strain=zeros(1,Ne);                %单元应变,并初始化
+ ~$ N% g6 J, I4 u5 c: V) z' PStress=zeros(1,Ne);                %单元应力,并初始化7 u' ~0 a8 c$ U2 i
for ii=1:Ne& U4 f5 a, v! ?" I1 M- u+ a
    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
/ G9 o$ x* [8 X' K. _6 [6 M    Stress(1,ii)=E*Strain(1,ii);) D' F1 J* w: C/ R' Z4 I1 O
end& W' D& z4 p' L: V- f
%--------------------------------------------------
+ @2 l& l5 D/ v1 m1 I1 N% 以下程序为屏幕输出处理' G4 s/ r  Q! F3 g* P3 J4 z* I
disp(' ');) C" {9 D9 m" N. q
disp(' Input:1-print Node displacement ');7 y8 w/ g& b1 c6 e/ R
disp(' Input:2-print strain ');% D- l  C- k2 P  y; N4 K
disp(' Input:3-print stress ');7 I1 i+ x: ?& B9 U5 I; u2 ~7 d! i% i
disp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');7 K" j& i: F% t% f" D' S1 v
* o3 |' Y- k" T6 d8 U4 z( M
while 1* ^% }3 x- A* a4 p& X
    ii=input('Please input1 or 2 or 3:','s');: H) X' y/ h1 V6 [! t
        switch(ii): z+ F1 @1 ?% ?, |9 Q. t
            case '1'
, a+ v. K+ e. S* G0 F                disp('Node displacement');3 k! V4 u$ M. W' j8 u! Q
                disp(u');
9 M2 s+ p. q5 R            case '2'
/ V% ]2 k, {8 T; ~0 n6 j                disp('element strain');* O1 A. A; A5 w# P- A6 ]" f2 ~
                disp(Strain);2 Y5 x0 F- e* I8 D" n# o; w8 D
            case '3'
  [' y& a4 a" J( w" ^% t                disp('element stress');7 s0 X' l$ h  p" _/ q$ F, \6 o
                disp(Stress);
% b" h: t9 }: U  `3 J- x. ^            case 'q'* z( Y& o: O" O( D+ [: R
                disp('End of program');
+ E2 Y) d2 \% Q; e2 ]: [+ c  o                break;
# l; S/ v2 r; t: v; U            otherwise
4 v6 K  U; y; [9 h' H% k                disp('error!Please input again');* f+ f- n+ z% V5 K* f
                continue;4 B" \. v  g* S& p+ y
        end
* S: w" A4 {) w$ L- Send; b7 |* q% F) x
& F2 ^+ c3 i0 S* C+ {8 S, M  K7 q
7 n% l/ J0 Q+ K1 |7 J1 S% D
回复

使用道具 举报

 楼主| 发表于 2013-3-24 13:44:32 | 显示全部楼层
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧
: Q7 q# |% v- u- S. SK(1,:)=0;        K(:,1)=0;        %可以省略
" B6 G/ R" q/ L/ I/ `/ r. ?! w7 AK(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
8 u& }3 R, f6 O6 W谢谢你啊,太感谢你了

% X# G3 N" p$ r: ~- k1 J. n0 a这谢啥呢?
发表于 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;  v5 m& ^( O, s6 F" q
v=x.^j;  是干啥的
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-15 22:41 , Processed in 0.081343 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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