机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3892|回复: 7
打印 上一主题 下一主题

分析一段matlab有限元程序

[复制链接]
跳转到指定楼层
1#
发表于 2013-3-24 13:41:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。
1 m- Q, N! C  I4 h* z! z- s; }今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。
9 q8 Q1 G3 J. T毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。# d  o9 ?0 P+ M$ @& u, r( w
记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。3 \/ ?% N" e. T9 {& B, F" m) C( _# V* c
非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。
, E: L7 n- k% s# [, y% x. R--------------------------------------------------------------------------------
4 S  F9 `! ]! x! }7 ~1 X梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称
7 T" I) m' S4 c" y9 |" A
3 v- \- P3 W9 j1 o
' H# R, G: L( V%------------------------ BEAM2  ----------------3 O, B. D6 a& u
disp('========================================');
6 Q) l) a9 z. K+ ~3 P; d& z1 Idisp('            PROGRAM BEAM2               ');
" f& q6 @: V9 hdisp('        Beam Bending Analysis           ');9 Y* C  \6 u$ i7 ]4 g  b6 b% Y
disp('        The programmer:太平岛           ');
! J. j' J8 a$ s& v  Kdisp('========================================');9 F2 {/ |- }7 k, d
disp(' ');                        %输出空行
# F* G  O2 p5 t4 E7 w$ H, s( Qwarning off all                        %关闭所有警告提示(求积分时,警告信息比较多)' G0 V0 o. x/ q/ G* z  b
Ne=input('Please input the number of elements:');        %Ne为划分的单元数" ~: e# i/ K& x( A+ k
NJ=Ne+1;                        %NJ为节点数
, [# G  q7 r* V5 T* ux1=0;3 |/ c/ X' b2 i" c: J" q
x2=sym('L');
1 i0 ~% `3 {. G  r. [% b% Ux=sym('x');                        
# G6 z4 p, i1 s6 \/ M! Mj=0:3;! l# L+ E% H: i( V2 W* A
v=x.^j;
9 H+ @3 h. Z' I6 u8 {$ M7 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];
7 ?3 U0 {9 \- c& i2 zN=v*inv(A);                        %形函数' f6 V& O  Y* G/ C: f
%-----------------------------------------------9 B2 e2 q# Z8 H  V# u, M
% 求单元刚度矩阵" |' w; B4 r6 S. \
E=4.0e11;) T4 ]3 O7 C' z/ o4 ^: @; b  M
I=5.2e-7;                        %I=bh^3/12=5.2e-7;
% w, T6 S( c7 a) J6 jEI=4.0e11*5.2e-7;& o2 n- g- d; D
B=diff(N,2);0 i1 q2 e0 M. h. K
k=B'*B;
: [7 r( U- Y) f9 VKee=EI*int(k,x,0,'L');* R7 J5 U3 b3 H8 \, \
Ke=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化07 @! W- Y/ l9 x6 r" I& k
Ke(:,:,1)=subs(Kee,'L',(10/Ne));
& |. z4 z: n- D5 WT=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)' u* W( d' Q9 b1 i
Ke(:,:,1)=T*Ke(:,:,1)*T';
; m- P+ h& b5 q$ ~6 tfor ii=2:Ne2 n8 D1 j$ Q* m  ^
    Ke(:,:,ii)=Ke(:,:,1);
& a" \" q) G2 ^* `end
3 S+ P* V' A# i- Q2 L: M1 [1 VKe=double(Ke);2 ~6 K4 E" |# s" M/ B
%------------------------------------------------" s, Z1 f" T1 a* `) h; @9 V
% 由矩阵装换法求整体刚度矩阵
+ Q; ]! F5 f- _! \% t% 自由度Ndof=2*NJ: e4 R2 j" x1 t# l# Y6 Y) ?" {; Y; ]
Ndof=2*NJ;- l0 ]+ r3 G# N- x* }
K=zeros(Ndof);
6 j: _1 I( M* h3 Nfor ii=1:Ne+ M& h( y: L+ H( u6 e+ }5 x
    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];0 D  X0 I5 S) X
    KK=G'*Ke(:,:,Ne)*G;
8 U' {0 |7 Z6 A% I    K=K+KK;
0 f6 y- t  z( L4 c3 g( z, l( V8 Hend  ( Q" P; Z& O) {  R- ]: k( Z$ T
%------------------------------------------------& s. x& b8 {  l, t- A4 Q! o: K
% 约束条件,对整体刚度矩阵进行修正,以便计算7 _/ g) T7 [) a: M
F=zeros(Ndof,1);- S# l: L. V: e( q+ S% q6 H
F(Ndof-1)=-100;
8 A: f1 Q' q7 V. O+ Q2 z! \! j% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0
, ]" }" H8 p, `7 g) RK(1,=0;        K(:,1)=0;        %可以省略
8 C! L, g. \, \$ RK(2,=0;        K(:,2)=0;        %可以省略
3 `+ A* @9 r* N. RKX=K(3:Ndof,3:Ndof);& N# n# f- a; A2 h
FX=F(3:Ndof,1);
0 e' q+ A2 Q% C3 I%------------------------------------------------2 h& j; _8 _- v- ^
%求整体节点位移列阵
! B' ^# r* k' p+ [4 F2 euu=inv(KX)*FX;
9 S* d- Y6 S1 au=[0;0;uu];2 w0 z* Y+ x8 E0 b
ii=1:2:2*NJ;  }4 x( g. G) j! P" m
v=u(ii);                        %各节点挠度) u4 Q) [5 |5 J' B
xta=u(ii+1);                        %各节点转角
9 ?( c0 Q" H8 j4 x# K' t%------------------------------------------------+ {/ p3 n7 a: J
% 后处理,计算单元应变应力
3 L4 U6 m9 z& b: D  _! q  ]; ~6 @B=subs(B,x,'L');5 l  s6 |$ Z  h& ~6 v' i
B=subs(B,'L',10/Ne);
1 f/ s+ [$ c3 q3 uStrain=zeros(1,Ne);                %单元应变,并初始化/ E* Z: R# \, R0 [  L
Stress=zeros(1,Ne);                %单元应力,并初始化
- A2 r8 L8 x9 I0 mfor ii=1:Ne. J0 u6 B, S9 u9 J1 R
    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
% p, c8 F# D- N) J( N- ]! ?8 O    Stress(1,ii)=E*Strain(1,ii);. N* h5 F/ G: w8 [: N
end9 x* L+ j% R- Q6 [
%--------------------------------------------------
; L" s2 Y. n: Q3 Y* I8 T% 以下程序为屏幕输出处理5 G0 n" w) ?% @( B: K
disp(' ');, L3 C& q( L; C$ K& l, C) B
disp(' Input:1-print Node displacement ');: {% f. n# ?5 ^, F9 v0 C
disp(' Input:2-print strain ');5 c' h% s  z# O8 W- S, A7 [
disp(' Input:3-print stress ');
( i' i7 {8 ~8 y/ w; T/ y: Ndisp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');
/ R: J6 @" n2 X' Q
$ l% N, F" K1 d& `while 1  I. h. G! I5 W4 P, w' n" U
    ii=input('Please input1 or 2 or 3:','s');
6 o0 U9 c: @$ e1 _7 O8 }2 c* A        switch(ii)
4 \* q) e, G  U1 Z& w            case '1'0 X* c6 g. g8 }8 W1 r5 ~+ R, p! @
                disp('Node displacement');+ B/ C+ S- F& t# [; o4 C# E0 q: M' O
                disp(u');
2 B4 Q# [4 W7 C/ F3 r            case '2'6 d; h9 N' n' ]9 K5 r
                disp('element strain');6 Z6 N8 @4 u$ X3 ^5 [' a) s
                disp(Strain);. h% u0 O" k0 E' G3 J1 T# }
            case '3': K: |/ ?* C/ L5 |) i+ I- s* k
                disp('element stress');8 J2 x: e& A+ Y) A8 k
                disp(Stress);. W- f7 I7 ?/ B6 R6 `& Y* A
            case 'q'6 O5 a; Q! {. i; P
                disp('End of program');
$ ^, |% s% {# e* m5 ^6 X, y/ [                break;
7 Z1 C7 m) n6 g2 J            otherwise, Q  ?9 S7 p! d5 I* K/ ?
                disp('error!Please input again');
3 c- @( ]: I4 A8 T6 f2 o                continue;1 q3 X- N) s" b: @. v  \1 r/ C
        end0 Y. ~, Z) |) G% }0 ~( o
end
, v# `# Z3 R: L# K. U% x+ A
+ q" P  q' n  Z/ d& C5 F' m, O: \" h
! e0 Q. w! u" _- D5 P& m
回复

使用道具 举报

8#
发表于 2013-11-7 20:44:34 | 只看该作者
j=0:3;7 x2 K5 ?7 K+ o/ z" }9 ^
v=x.^j;  是干啥的
回复 支持 反对

使用道具 举报

7#
发表于 2013-11-7 20:39:02 | 只看该作者
这程序也运行不了啊
回复 支持 反对

使用道具 举报

6#
发表于 2013-3-24 21:21:19 | 只看该作者
我以前编过一个5体展开的多体姿态动力学计算程序。。。可惜早就忘记了,sigh

点评

是啊,很多东西不用就忘记啦  发表于 2013-3-26 12:34
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2013-3-24 18:35:59 | 只看该作者
jiaweicz 发表于 2013-3-24 16:53 7 M' b( c& ]. H5 |; C1 Q. I: w. f
谢谢你啊,太感谢你了
! t+ y9 ^6 k; x$ I
这谢啥呢?
回复 支持 反对

使用道具 举报

4#
发表于 2013-3-24 16:53:09 | 只看该作者
谢谢你啊,太感谢你了
回复 支持 反对

使用道具 举报

3#
发表于 2013-3-24 14:55:52 | 只看该作者
没看懂
回复 支持 反对

使用道具 举报

2#
 楼主| 发表于 2013-3-24 13:44:32 | 只看该作者
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧/ T' v& S+ l3 j/ P
K(1,:)=0;        K(:,1)=0;        %可以省略" _- }4 Q! ^8 G% \3 l% T  `
K(2,:)=0;        K(:,2)=0;        %可以省略
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-2-18 15:16 , Processed in 0.077416 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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