机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

分析一段matlab有限元程序

[复制链接]
跳转到指定楼层
1#
发表于 2013-3-24 13:41:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。
4 I' }8 M$ t) G! S, d5 ^/ i今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。
: r! P" y) V9 p6 {毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。
- a# K8 V* z. V9 M0 Y记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。
9 r0 B2 e; F; s: v9 w& c非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。) h! ~6 k+ m+ l% P9 _; K& R6 ~. w( N
--------------------------------------------------------------------------------
/ K7 r% q! k* g2 b8 E0 @! S: ~梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称$ {  f5 {. w! E# ~7 ~7 r  i3 N
) |' D0 O0 B3 G
9 L) j1 U5 r0 I
%------------------------ BEAM2  ----------------1 {( a3 m3 s- D. q  e
disp('========================================');! H. T) V% W3 g" ?3 k/ v0 g
disp('            PROGRAM BEAM2               ');
8 b" @2 A# L$ }2 y* X% f8 a. wdisp('        Beam Bending Analysis           ');
. b2 B  W. @: Adisp('        The programmer:太平岛           ');4 i8 i, G# P/ ~: s! L0 _: b
disp('========================================');
. o& p/ g0 A" D( edisp(' ');                        %输出空行# j% U+ v& B, J8 j1 K/ X# J
warning off all                        %关闭所有警告提示(求积分时,警告信息比较多)
8 H, m" Q# {7 G8 nNe=input('Please input the number of elements:');        %Ne为划分的单元数
- ]$ l5 r& f' t% f. T9 V$ a4 QNJ=Ne+1;                        %NJ为节点数
5 R; I4 q8 l, R5 E& rx1=0;
5 o; p8 @" j0 G7 ]" Nx2=sym('L');/ |! ?: e& @( e7 V# r
x=sym('x');                        
3 ?  `( H6 `2 j+ ?% h5 m: N3 lj=0:3;
% j  I. Y0 ~/ nv=x.^j;
! A  o8 v8 p5 ]- g6 PA=[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];# M2 O+ O5 F- h& w  K( R
N=v*inv(A);                        %形函数
9 x1 F2 `" H+ k7 H%-----------------------------------------------" A3 L' W, d! x) y% o2 X
% 求单元刚度矩阵* e5 Z: b6 \1 ]: w+ M& K
E=4.0e11;' u5 t; b3 j' L7 o9 O8 T
I=5.2e-7;                        %I=bh^3/12=5.2e-7;
0 `) W8 T; o( FEI=4.0e11*5.2e-7;& R7 \2 v& C% ]% d2 o' J: D1 g, a
B=diff(N,2);
  {3 @6 ^* ~( C4 W# F  E0 c1 C* |k=B'*B;; U' ~# U- t% v" s( Y# c5 X
Kee=EI*int(k,x,0,'L');
0 c! h2 ^9 w5 _/ e6 FKe=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化0
2 |( b/ h0 ^* ?Ke(:,:,1)=subs(Kee,'L',(10/Ne));
' i. v; H  A/ gT=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)
1 ^/ k0 j! w5 X" w9 e; C* @Ke(:,:,1)=T*Ke(:,:,1)*T';* m# ?2 M9 `! Y
for ii=2:Ne: o4 H+ V0 }; i6 J7 o! T& h
    Ke(:,:,ii)=Ke(:,:,1);  I- A! s$ _5 V' ?3 J
end
8 e$ F) O' J: f& p5 y- t* r6 UKe=double(Ke);3 H1 `* t" h( v1 U0 {! J
%------------------------------------------------
+ g8 b. b+ O( b- e& S% 由矩阵装换法求整体刚度矩阵
: {, d9 o- ^+ _* L& E' i$ r, n% 自由度Ndof=2*NJ
$ o! U: U# e) S, n) R' BNdof=2*NJ;
' K/ R! p* |9 @5 a: A8 ?6 nK=zeros(Ndof);
9 x& L; {/ e8 e6 hfor ii=1:Ne
0 s6 ?1 `4 d) _    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];
0 `0 ^7 G2 S9 Q( I; A9 q, S: B    KK=G'*Ke(:,:,Ne)*G;7 K. ^7 Q+ e: y- o: q
    K=K+KK;
' J& ?4 m+ f( Q! j. lend  & q3 O" Z0 V0 l! P# \, X8 u  J
%------------------------------------------------
+ n, H6 v1 F: X  V+ X% 约束条件,对整体刚度矩阵进行修正,以便计算
" B( p" S7 v2 T1 [, S$ h8 t- Z! NF=zeros(Ndof,1);% `4 A5 E0 j- W' O% }
F(Ndof-1)=-100;# m# R/ G6 x9 d1 P* @5 S
% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0
8 F/ V- Q. R9 b7 y) i- t- tK(1,=0;        K(:,1)=0;        %可以省略
6 ^7 O* a  t) Q7 v' {& D6 ?K(2,=0;        K(:,2)=0;        %可以省略
4 @3 _; s( ]" t" x" y1 l5 }" S* SKX=K(3:Ndof,3:Ndof);: h6 Z) J4 e$ r& B
FX=F(3:Ndof,1);7 U1 r: C- D& G  G
%------------------------------------------------
& M% d) z3 O& W%求整体节点位移列阵! k$ G6 w+ t' N
uu=inv(KX)*FX;
4 w' ]  p. {7 P3 tu=[0;0;uu];
. q# S) m. W6 Y* [% }- }ii=1:2:2*NJ;
6 E) u) W9 P! kv=u(ii);                        %各节点挠度
; C5 u4 O8 \% ]: mxta=u(ii+1);                        %各节点转角
! X& G. d6 s# {%------------------------------------------------$ a' {3 x- @, V
% 后处理,计算单元应变应力
2 a* K- A# y6 s& xB=subs(B,x,'L');& k; T, _0 x* J6 y. C
B=subs(B,'L',10/Ne);4 E9 ~* D1 ~1 E
Strain=zeros(1,Ne);                %单元应变,并初始化8 ]' k- o1 I& ~/ \4 y. x
Stress=zeros(1,Ne);                %单元应力,并初始化
+ ~; \& y, z( t* s2 n# Ufor ii=1:Ne
0 T5 M& J: c3 C, X% }5 M: k% d$ F    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
1 k3 X4 q- _! {5 J" `/ \    Stress(1,ii)=E*Strain(1,ii);3 b8 G4 H; h0 B! o# x
end5 ]' G: W; D: }( e5 [
%--------------------------------------------------
! I( w/ g: }% E: @$ @( w3 Y% 以下程序为屏幕输出处理/ M/ ?% a& A& j7 t# V/ B# R, T# @
disp(' ');
& k+ B6 q4 }: d7 Gdisp(' Input:1-print Node displacement ');
$ e  A1 _6 M0 Z  B0 t9 Qdisp(' Input:2-print strain ');
0 k: m+ k9 B2 x* [& Gdisp(' Input:3-print stress ');
2 F1 d) X. A& H9 Bdisp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');
% c  o9 a) x. H$ M8 b5 y9 `2 f: j" g, B( o
while 11 b. u( z& w" r+ P9 |
    ii=input('Please input1 or 2 or 3:','s');
. k7 c) d/ M$ D6 o6 @/ u0 Q        switch(ii)* k: s. I7 U7 A) s. ?) ?& C
            case '1'
; k0 i+ o9 ^6 B" T9 @2 E% w                disp('Node displacement');* ]7 z9 D$ C3 q
                disp(u');
2 T. N) b/ ~6 Y! e* I" f% z            case '2'
& {  ]& F, K$ e: e1 @) G                disp('element strain');4 z0 [# n: }# u; Q$ E
                disp(Strain);* z& T$ X! y% A5 q* Q. {
            case '3'- [9 y) o* l: s+ [" ]2 ]  t. A
                disp('element stress');. k2 o+ X) J9 o( H9 O* a( Z8 e# j
                disp(Stress);
' y/ o  K2 \3 O* d            case 'q'
. @  S! {% h. \5 w0 b% v7 n8 \                disp('End of program');3 r% q  ^7 X5 U0 G8 H  J
                break;4 P. D: E( d8 E$ J8 m0 O
            otherwise
! X/ d- z+ M" ]6 d: q- Z' i1 J                disp('error!Please input again');
. R" @4 E9 j- O% Z* [                continue;
& ^7 @4 Q6 h$ {6 J9 t        end- ~. G6 H9 P$ q; b& ^
end8 S# x! k  ?. V" W
0 g- m, P: ?/ J7 Q; p8 o
) f( M1 h4 t1 Q  ]- e( n
回复

使用道具 举报

2#
 楼主| 发表于 2013-3-24 13:44:32 | 只看该作者
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧7 O7 @( {  u) n/ v9 e( ?
K(1,:)=0;        K(:,1)=0;        %可以省略8 `! B# K" Z( K4 H
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
/ X6 V' w! l7 M谢谢你啊,太感谢你了
5 t" a# `4 `% ^) U8 E! Z; k
这谢啥呢?
回复 支持 反对

使用道具 举报

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;- [; _7 S' O* _6 y! |- C
v=x.^j;  是干啥的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 02:51 , Processed in 0.061153 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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