机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

分析一段matlab有限元程序

[复制链接]
跳转到指定楼层
1#
发表于 2013-3-24 13:41:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。6 l3 j% C2 |% ?& M# E2 j3 @/ K9 F
今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。
8 f% K  ]: F# ~6 V毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。
3 j4 s4 ^1 H: O  N& M$ ~  n/ A记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。
% ^7 ?' ]9 i; o8 T, j0 D3 P非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。4 C" ?% Q. W  p/ V  [( n8 C
--------------------------------------------------------------------------------
; B; P7 A/ \  W) `( T7 ^梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称; `; Z8 T/ t% E6 A
0 o+ n* w6 a- s

, R% |8 x. r- V7 Z5 {) A  d% p%------------------------ BEAM2  ----------------
$ }0 z' t! N& z) Zdisp('========================================');7 l/ `# ^  N6 c) C
disp('            PROGRAM BEAM2               ');+ J! A1 s4 H2 e- X9 \6 [
disp('        Beam Bending Analysis           ');
1 y; Y. z+ Q) [3 B( ?) g% {1 ?disp('        The programmer:太平岛           ');
8 Z0 v9 y) [+ ~3 Idisp('========================================');9 g7 E8 e  F. U/ w6 p) K# h) F9 ^( x8 f
disp(' ');                        %输出空行
9 o) Q( y3 k; G! B+ u4 ^: ]warning off all                        %关闭所有警告提示(求积分时,警告信息比较多); }& N. F; h3 F  R6 r
Ne=input('Please input the number of elements:');        %Ne为划分的单元数
1 Q: w4 ^3 x. C  cNJ=Ne+1;                        %NJ为节点数+ X. z  g8 ]; A& P8 Z; k+ |
x1=0;
/ U3 R+ L+ m  ~4 m) r$ I8 V* r$ Fx2=sym('L');% b) N, F& K4 {9 y0 T1 m
x=sym('x');                        
# f4 I, `; i+ Mj=0:3;) E# ~& c# o4 e- k( |0 k
v=x.^j;
5 e* j* I' f. \5 j! r) p* OA=[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];
' u: v* F, S0 KN=v*inv(A);                        %形函数
/ k) _6 N8 c$ D( v%-----------------------------------------------
: D$ R5 h. A2 `: l8 B( a% 求单元刚度矩阵/ o4 b& U6 e: b8 C# q, q& t
E=4.0e11;# g( i: ^/ S9 b( c8 x8 Y0 ]* |
I=5.2e-7;                        %I=bh^3/12=5.2e-7;, _7 [- j0 Q5 N: S( a  V* Q! `
EI=4.0e11*5.2e-7;
, b% P4 g# T  V! g8 \B=diff(N,2);
( \: N3 ]; g. }! k& u( ~7 qk=B'*B;
" y; D+ |4 L6 {( n- Q2 L0 fKee=EI*int(k,x,0,'L');
2 z% L5 W  H3 B( ?6 D; OKe=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化0
- ~/ N$ O- E3 D5 GKe(:,:,1)=subs(Kee,'L',(10/Ne));9 r' }; q  ?  q  K& D$ R6 n
T=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)& b& {+ R, w  d- _3 O/ W& A
Ke(:,:,1)=T*Ke(:,:,1)*T';
: `6 |7 F. _* S$ [6 W" b$ F! Jfor ii=2:Ne0 l8 {$ L2 B8 e- x5 {" J
    Ke(:,:,ii)=Ke(:,:,1);
  ~, B# q9 k: l9 _. uend ! _: O5 V9 S$ o* w
Ke=double(Ke);6 m3 A( ~  t1 U' e- f
%------------------------------------------------
4 R3 Z8 T" T/ N, @6 M9 x% 由矩阵装换法求整体刚度矩阵
$ H4 F' g9 P5 }. P% 自由度Ndof=2*NJ
  k% \; H# X( j$ r$ K% HNdof=2*NJ;) c& h& E) ?  a5 F' w2 S# u' k
K=zeros(Ndof);; a3 N' ]8 l. x( F3 ^0 v! \$ r
for ii=1:Ne
5 `) Y' [$ Z- r+ ^: t    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];; c. Q6 W7 J, Y
    KK=G'*Ke(:,:,Ne)*G;% M4 y0 w6 C9 I( U) d) D7 L
    K=K+KK;6 C) d' N$ O$ M- }. d" `& G$ |
end  : v7 J; s! [1 k& e
%------------------------------------------------0 e5 Q7 I' P7 n; H) T
% 约束条件,对整体刚度矩阵进行修正,以便计算
, {, ^3 r$ l! g4 G- \; z6 ]F=zeros(Ndof,1);
" K+ ^2 w2 D! A, \F(Ndof-1)=-100;
* `) G5 @! p* X1 L% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=03 u' @" N2 M7 V* {9 }- H7 E9 g+ g- {8 X
K(1,=0;        K(:,1)=0;        %可以省略
$ M2 d+ e/ S' J4 s2 ?K(2,=0;        K(:,2)=0;        %可以省略
+ }  I' v/ s, q6 |6 fKX=K(3:Ndof,3:Ndof);
7 l& G4 l' N* N% N: BFX=F(3:Ndof,1);7 V3 ^/ o1 A0 r+ j: U
%------------------------------------------------# v- I+ J6 `5 y; y
%求整体节点位移列阵  s8 R9 n6 W; e
uu=inv(KX)*FX;
# U4 @! j' a5 v+ d8 ~% c; zu=[0;0;uu];
$ D/ N% q# |6 \, f0 T* Iii=1:2:2*NJ;
) y! M* {) d! S1 dv=u(ii);                        %各节点挠度
+ G& g, M  e3 A  I3 `. R4 qxta=u(ii+1);                        %各节点转角
+ C/ V' [: K/ ]; T2 Z) Y3 y%------------------------------------------------
0 u  y9 y2 a6 w% W" H- |% 后处理,计算单元应变应力: M; k; U) n1 L# n$ u. h3 G. M
B=subs(B,x,'L');8 W/ }  J6 H0 q* F2 t# R0 R2 n
B=subs(B,'L',10/Ne);
! m, _) ^. o  V  i' iStrain=zeros(1,Ne);                %单元应变,并初始化
! P" Z% E& l  F) RStress=zeros(1,Ne);                %单元应力,并初始化
7 d! ^- b* q6 u. [  ?( `% qfor ii=1:Ne
( ^; \" w& c  @3 T    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
3 R: O+ p2 G6 l    Stress(1,ii)=E*Strain(1,ii);
7 U( l* M! z3 e' _- c% Wend
8 ~( F/ y% ]! M+ j2 |+ E+ S%--------------------------------------------------
2 n" Q( i$ [: Y6 n. w/ I* _% 以下程序为屏幕输出处理2 _6 w" e. d' u: G3 P  V) H3 k% R
disp(' ');
% `+ n$ r3 t7 \+ _0 Ldisp(' Input:1-print Node displacement ');
9 x( ?2 k& e! ^6 Wdisp(' Input:2-print strain ');7 D, k9 y; V$ K% o! k+ ]0 f
disp(' Input:3-print stress ');
5 R2 S. i6 C  c4 l* M0 `disp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');: a0 G3 ?4 z& M" `1 q, E

' M$ d# E! l% Q5 G7 z0 qwhile 1
% A9 h) s, t* J; e! E* w    ii=input('Please input1 or 2 or 3:','s');
) r" M' g- M+ F# U6 o- G        switch(ii)
8 ~* P( T5 [9 w3 h% k& N; p  r( m            case '1'
; y! @0 x  m+ z8 {6 r+ e% _                disp('Node displacement');
  D2 M' h3 N! a2 F: v: R. B; k. w7 J                disp(u');
# r* p* s, x  u& G6 f9 B            case '2'& X! L1 `& r3 R6 x
                disp('element strain');4 S8 }9 Y* j. i  F1 P8 d0 d3 D1 `
                disp(Strain);
: n6 G. z: T! W2 D9 J            case '3'& \' D1 p( O. ?* W/ k' D: N  l0 J
                disp('element stress');
; ?9 s) R& L" V! N9 i6 N                disp(Stress);
2 [9 Y' C6 Z, G! b1 [- r" @            case 'q'
7 G: T* a- F/ b6 S3 S; E                disp('End of program');
" M# s% B4 c& K3 O8 x; H0 O                break;: p5 R  |7 b* o3 b! i& l
            otherwise
% o* N$ n! y; T                disp('error!Please input again');  x; `6 I% e% p3 v# }
                continue;5 v8 Z' s: `5 B: C1 H7 m0 V+ m7 v
        end
% h( |; f3 v* Y7 F/ R; nend% y! w+ Y3 R* T3 _

: t0 i1 ]5 h5 p4 s" I& z% E
- U. ^' k' ~6 ~( q. |
回复

使用道具 举报

2#
 楼主| 发表于 2013-3-24 13:44:32 | 只看该作者
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧
0 n7 z$ @% ~, V" W6 uK(1,:)=0;        K(:,1)=0;        %可以省略4 ~) T7 |% V1 n) }! _6 J
K(2,:)=0;        K(:,2)=0;        %可以省略
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

5#
 楼主| 发表于 2013-3-24 18:35:59 | 只看该作者
jiaweicz 发表于 2013-3-24 16:53 1 W0 w/ d7 c$ S
谢谢你啊,太感谢你了
0 v( J& S9 j& @; }/ g- F
这谢啥呢?
回复 支持 反对

使用道具 举报

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

点评

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

使用道具 举报

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

使用道具 举报

8#
发表于 2013-11-7 20:44:34 | 只看该作者
j=0:3;
3 ?) w- N" \3 E/ r, _  Hv=x.^j;  是干啥的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 00:52 , Processed in 0.057970 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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