机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

分析一段matlab有限元程序

[复制链接]
跳转到指定楼层
1#
发表于 2013-3-24 13:41:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。' `) `- D2 k. |8 `4 P
今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。/ w3 L0 t, B6 b) v$ q7 ]' [
毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。( t, b* F) H' t1 f; i
记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。
4 o; ]7 y% A4 _8 k3 \6 h/ c* F非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。
* u$ P5 S) y* I. O; j' c( q--------------------------------------------------------------------------------6 d3 z; i3 C+ ~" U! T1 T9 ?
梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称% L9 m/ P% @4 {3 C8 ]! W4 Q* s8 L

7 m  r7 O6 z9 _6 W- c4 M% e* [; C
! `+ J! J5 R7 S! Z1 ]7 D* ?%------------------------ BEAM2  ----------------
* J8 x% q: |0 R% T' hdisp('========================================');2 z0 |+ g0 x/ I% k% o
disp('            PROGRAM BEAM2               ');
" C. V6 v4 K% q: _  [disp('        Beam Bending Analysis           ');2 }: \, i9 ^3 Z; B. @
disp('        The programmer:太平岛           ');2 w  e  r: S4 I6 K
disp('========================================');0 ^( I1 i* p0 z/ X4 J  q1 r0 L
disp(' ');                        %输出空行
( N' K1 w" r! e4 y" U$ X4 H, t, m6 _" Ewarning off all                        %关闭所有警告提示(求积分时,警告信息比较多)
. M) d( Q$ y" b. R' ^% ~Ne=input('Please input the number of elements:');        %Ne为划分的单元数
# f* D8 X; a% ~NJ=Ne+1;                        %NJ为节点数* K- c! F3 A, }; B
x1=0;
- L3 W6 v5 B; _4 ix2=sym('L');
! \) I6 F9 {% w7 G9 ^% R5 h- dx=sym('x');                        
! T5 y) F4 k! ^+ v; S. F! vj=0:3;0 Z& n4 P7 K+ F7 r% i5 q
v=x.^j;2 X2 S- {2 }1 C6 i; ?# K# e( F
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];1 H6 ^+ ?  u9 z# x: r0 t# F3 ~
N=v*inv(A);                        %形函数% Y5 ]: \; N' N! i4 {' V
%-----------------------------------------------
  R7 {/ j3 ?* _0 ]* w% 求单元刚度矩阵5 k* G7 ~! r6 b' t
E=4.0e11;/ b% i- L, ?1 T5 X) D8 j) N& s2 Z
I=5.2e-7;                        %I=bh^3/12=5.2e-7;/ _7 J: E% O/ L9 U: g
EI=4.0e11*5.2e-7;2 l5 x! n% h: C. d/ ?
B=diff(N,2);
$ p6 ^  c0 d8 [* E& ok=B'*B;
1 _' ]" L1 ]% ^/ c6 Z9 w) Y/ }9 EKee=EI*int(k,x,0,'L');% U" w# Y) s2 s1 k; ?" Z2 S, y
Ke=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化0
! {1 e7 n+ B4 C2 H" HKe(:,:,1)=subs(Kee,'L',(10/Ne));) u# ]8 |# E# |0 y
T=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)
  B2 o- N6 u' kKe(:,:,1)=T*Ke(:,:,1)*T';
- O$ x1 e( d% p% w+ e# f6 p/ s$ ufor ii=2:Ne& n+ W' t/ p" b6 L
    Ke(:,:,ii)=Ke(:,:,1);
7 c% }8 z9 C3 G3 u; Xend 4 C9 n; Z6 A/ g) h/ J: g
Ke=double(Ke);
" O6 z+ o  F$ X( i& z+ W2 [! }%------------------------------------------------
& l, I$ D2 X( o+ D9 D1 ]7 \6 V% 由矩阵装换法求整体刚度矩阵2 }6 f8 K2 Z4 Y% w3 H/ V. N
% 自由度Ndof=2*NJ
2 I0 j0 J0 D  u( r" t1 yNdof=2*NJ;. H$ ^: \- R6 K3 d
K=zeros(Ndof);5 Q/ M% ~1 r# e  }; e. Q4 ^, c1 V, e
for ii=1:Ne
4 F6 d- C; s2 k# f" X. F' k0 B% \    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];
. K& h2 S, D2 _    KK=G'*Ke(:,:,Ne)*G;
% `; n# g- R( ?, ]    K=K+KK;
- [* w6 z1 H9 r4 w6 M8 n6 V8 pend  * z4 i1 F* Y8 T, G, s; e& ~( C
%------------------------------------------------
/ K9 ~1 ]. U# `1 h% 约束条件,对整体刚度矩阵进行修正,以便计算
% \; D4 t8 r* C8 n5 ~5 `F=zeros(Ndof,1);5 t( ?- J" q; J+ K* A* f
F(Ndof-1)=-100;$ t1 g8 N* k9 K( c1 d# K
% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0
+ }: h) j' h1 D3 @1 r( B6 GK(1,=0;        K(:,1)=0;        %可以省略6 B5 M5 N4 s6 U  F8 {6 r' `
K(2,=0;        K(:,2)=0;        %可以省略+ {6 w( C2 @0 {/ v' x
KX=K(3:Ndof,3:Ndof);( w, }3 o* d) V. I  G$ g
FX=F(3:Ndof,1);
2 |6 a  U6 ^7 @%------------------------------------------------" e' M" s5 z" H! O- |
%求整体节点位移列阵1 y: d. O. Q+ Y) A4 [) ?
uu=inv(KX)*FX;
: T& B8 |0 W- {- u6 y$ O0 }u=[0;0;uu];
" T9 Q; N) @* bii=1:2:2*NJ;6 [% {3 v5 I' \# w
v=u(ii);                        %各节点挠度3 k8 f& u2 D: a* g- T, v8 Q
xta=u(ii+1);                        %各节点转角
) h1 {8 |0 f! X% c%------------------------------------------------. ]1 L7 x- u2 }6 A  @- t' Y
% 后处理,计算单元应变应力* F$ I+ C' N# v: G# e
B=subs(B,x,'L');
6 |+ A/ t8 N' V3 Z+ P( w7 bB=subs(B,'L',10/Ne);) |; ~4 X% U8 a, z0 w
Strain=zeros(1,Ne);                %单元应变,并初始化- p% W! v' J) N* [. t. ^# }
Stress=zeros(1,Ne);                %单元应力,并初始化/ g/ Y7 S# ]% {2 u# n# c' h
for ii=1:Ne  s4 t. z0 K& T% o! y9 u5 i
    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);
9 F  A: @1 Y" ^# R$ c# P6 d    Stress(1,ii)=E*Strain(1,ii);
# c& }* R; E: V5 z2 lend
2 q+ _% E/ H# ~- G: b6 \0 T1 }%--------------------------------------------------
; U/ Z- w' ^: d* \4 x% 以下程序为屏幕输出处理
' V+ |/ ~3 y9 J# \: l) p* gdisp(' ');; `/ y/ i' [- ]) ^
disp(' Input:1-print Node displacement ');) d6 Q6 o1 Z* t5 I' }/ _' H4 l' U) q
disp(' Input:2-print strain ');
0 h9 n& @. h+ }disp(' Input:3-print stress ');
. ~  C( \0 O, a; u  Y# cdisp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');9 l0 V: ^4 j. {! `

; \# }0 N: J4 z) x8 awhile 1" j  I) S/ \! r$ x7 y/ F
    ii=input('Please input1 or 2 or 3:','s');
/ T0 q9 b. y: H) }        switch(ii)
, n: [# O3 g# D8 @            case '1'
5 T' [$ F& F  c0 \9 k                disp('Node displacement');
! l7 Y! T2 L! @- p1 w3 R: K+ ]. t, u                disp(u');
' b+ N& B- y( B7 ~1 w9 W. T            case '2'+ x1 W2 d" d5 j' `, Y, l: Y% P
                disp('element strain');* j  N2 n! g" b6 \7 ]) c4 {9 U
                disp(Strain);1 }% W! d$ I# o. }; H- F' s8 r) N
            case '3'6 l4 r* T" R! M) n
                disp('element stress');/ u5 c& g/ e; ~' ?/ y, x
                disp(Stress);
; `; j( T2 k4 o  x! D+ G            case 'q'% p8 @9 n/ i6 w& b# ^# o6 ?5 d
                disp('End of program');
4 N& B# H6 r' H                break;
8 |- N) d1 k3 E- ?            otherwise7 A) f  N* R% d+ p3 p
                disp('error!Please input again');
/ @- l* t& ]; s* v6 e& E8 e                continue;" c7 e8 o8 O8 J/ ?: b
        end# i* p# G3 k0 R; Y% `
end7 o" u3 j; n: v' b$ [2 u& o. a
/ `9 w! a4 ~6 L6 S3 O6 |
4 g* X% b0 y1 t7 i* ^. T" w8 _) T9 q
回复

使用道具 举报

2#
 楼主| 发表于 2013-3-24 13:44:32 | 只看该作者
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧$ C* t# s: o: Y/ O7 [+ @; @9 P  y
K(1,:)=0;        K(:,1)=0;        %可以省略
1 {1 f8 d$ A% E% @2 @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 % j* ^7 p% i# l
谢谢你啊,太感谢你了
+ [& T: S, u0 m& u
这谢啥呢?
回复 支持 反对

使用道具 举报

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;
- E/ |0 M4 W$ X% ^4 ^* w1 `v=x.^j;  是干啥的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-9 01:25 , Processed in 0.063108 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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