找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4207|回复: 7

分析一段matlab有限元程序

[复制链接]
发表于 2013-3-24 13:41:49 | 显示全部楼层 |阅读模式
这是关于梁单元的,可能大家觉得很简单。。。
$ F: j/ i* Z1 b: l% M& ?今天翻电脑里的东西时发现的,是我大三时有限元时的作业,记得当时花了很多时间研究,学了不少东西,一个简单的作业可以涉及各方面的知识。) H/ T3 y2 H+ L3 l
毕业半年了,虽然记不清弹性矩阵、刚度矩阵等,但是只要一看书(好像现在的心境不下来)应该会,学校交的学习方法和理解问题的能力,有些东西不必记,除非每天从事,那该叫熟能生巧。+ T" W& Z# X/ ?2 A4 Z+ M
记得当时编了两个程序,梁和三维实体的,我分享一下梁的程序吧,起码有亮点和创意,可以自己选择划分个数,在matlab方面花了不少功夫。( Y) i( |) F$ C3 S
非常感谢当时的有限元授课老师“韩清凯”,虽然老师已经到了大工。上课的教材为韩清凯 的《弹性力学及有限元法基础教程》,书上有个梁单元的例子,在82页。, ?9 v7 `7 F/ L8 N) `
--------------------------------------------------------------------------------
! g# K2 c3 A% g5 @梁程序如下,名字就不写了,用昵称吧“太平岛”,这是常用的网络昵称
) {5 d/ D7 _: |2 g
! p* m$ E4 {/ e9 q
7 p% x/ H* f5 k! w) b& d- n! M1 @%------------------------ BEAM2  ----------------! h7 A7 h7 ~' Q! `) J. @1 ~
disp('========================================');
/ d) Y1 T- r2 g/ Y$ C) `  Ydisp('            PROGRAM BEAM2               ');) c- }) K5 F1 N$ j" s  _
disp('        Beam Bending Analysis           ');. @% |! M) @( u  r/ E
disp('        The programmer:太平岛           ');6 W. c4 i/ ^  j9 x# t
disp('========================================');
8 ^  N* h* N- _disp(' ');                        %输出空行* u/ `2 d- {  H4 }4 q8 }9 [5 c: M9 A. u
warning off all                        %关闭所有警告提示(求积分时,警告信息比较多)2 }, o0 J# h% M4 v
Ne=input('Please input the number of elements:');        %Ne为划分的单元数/ _& w! P/ ~; q2 X
NJ=Ne+1;                        %NJ为节点数: y2 _$ K( j9 c) S0 D; y  a- P
x1=0;
  h. b+ y  ?" L* ^$ Fx2=sym('L');4 \' q3 m" y$ I6 F6 U$ [
x=sym('x');                        
5 S& {0 E9 _7 \6 Aj=0:3;
$ C$ ]# O2 j) K  U: y$ B3 A) @v=x.^j;
: ?+ ^9 d7 n" |( ]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 M5 k0 o/ n: Z7 r5 B2 @  z
N=v*inv(A);                        %形函数& r# n, h$ f& H- s6 P1 q
%-----------------------------------------------1 Q) f/ K6 A+ B" H4 w/ ~
% 求单元刚度矩阵2 `" V, K" A" }: }
E=4.0e11;
3 f! Q: M& A. G9 M1 c& u2 mI=5.2e-7;                        %I=bh^3/12=5.2e-7;
; i# U( D0 c* i' n' ^8 E+ n" ^EI=4.0e11*5.2e-7;
$ k+ a( k4 I: i! q3 D. ]B=diff(N,2);
* h5 Y  B! ?* Hk=B'*B;
& X! N$ D/ F1 V4 ]Kee=EI*int(k,x,0,'L');
/ Q; `" J/ A3 e$ ~9 v* SKe=sym(zeros(4,4,Ne));        %用三维矩阵存放单元刚度矩阵,每页存一个,并初始化0
# }1 J1 F0 f8 @7 N! cKe(:,:,1)=subs(Kee,'L',(10/Ne));
  c6 M7 }7 D. }& W2 vT=eye(4);                % 因为梁于x轴的夹角为0,所以坐标变换矩阵为T=eye(4)# W  P! S% w& _7 c: \
Ke(:,:,1)=T*Ke(:,:,1)*T';9 Z7 \! C  t* c; V# i" n
for ii=2:Ne
& k! u  f  @2 g- ~7 b    Ke(:,:,ii)=Ke(:,:,1);3 L+ p2 Q/ K$ ]
end
. W- X0 F, u3 g1 pKe=double(Ke);( [6 }6 x9 P, s7 X& `6 o% h
%------------------------------------------------0 @( R8 Q& W5 d: D1 V4 p" o
% 由矩阵装换法求整体刚度矩阵
( g! Y& I; \8 z2 S2 W% 自由度Ndof=2*NJ
0 ^2 W. x6 d% ?6 r" @/ |5 sNdof=2*NJ;( A, b' S" l# a0 L1 @9 u
K=zeros(Ndof);
( q/ g4 ^3 |% l/ y6 m  u- [7 Kfor ii=1:Ne2 l# X3 \; j- X
    G=[zeros(4,2*(ii-1)),eye(4,Ndof-2*(ii-1))];
$ a1 o; ]9 p; @4 ~+ [* [5 W    KK=G'*Ke(:,:,Ne)*G;
# x( r6 p5 I* q- `+ H/ f    K=K+KK;0 L& x2 z. N7 x5 z
end  
: x8 T% p0 m" x' Q( [%------------------------------------------------, H9 Q' w" h* c
% 约束条件,对整体刚度矩阵进行修正,以便计算
5 f( J/ Q$ V1 s) Q1 X9 Z$ \F=zeros(Ndof,1);# `8 b. u7 |0 `5 B) y4 y
F(Ndof-1)=-100;
& v$ D. N. m6 E$ n' H% u=F*inv(K),u=[v1,xta1,v2,xta2,v3,xta3,v4,xta4]',v1=0,xta1=0% C/ p# C0 ^" t" [1 B5 b
K(1,=0;        K(:,1)=0;        %可以省略
! p9 Y* H" B* t6 x* v- BK(2,=0;        K(:,2)=0;        %可以省略
4 v1 K( j, Y: S  C- I5 cKX=K(3:Ndof,3:Ndof);/ \& ?4 d" E4 [- _* \: y/ N
FX=F(3:Ndof,1);% @: {* ]( o# t  I3 e) D
%------------------------------------------------$ M2 t. o7 f" {' C
%求整体节点位移列阵
& Z4 M. R6 d* luu=inv(KX)*FX;
/ D+ j: O( P6 X- J$ M5 cu=[0;0;uu];
5 G6 a! K2 T: Qii=1:2:2*NJ;
- O- |1 o; O' V0 Lv=u(ii);                        %各节点挠度4 u1 L( W7 t4 z( p
xta=u(ii+1);                        %各节点转角
# R3 n* t  i5 U- N# o  F; \" M%------------------------------------------------
3 U  H* X; Y* g  w% 后处理,计算单元应变应力
7 p& D5 j# f" r8 ^& ~# nB=subs(B,x,'L');" i" y: _" n3 q  }7 b+ ^
B=subs(B,'L',10/Ne);
% ?3 S% v) P" e7 s- o  |6 h& OStrain=zeros(1,Ne);                %单元应变,并初始化
! B: y/ V3 l- p- Y% gStress=zeros(1,Ne);                %单元应力,并初始化
+ R; d0 t# g' U( k/ ^4 o3 K+ T1 Hfor ii=1:Ne- c# `* z0 e/ ~
    Strain(1,ii)=B*u(2*ii-1:2*ii+2,1);5 T& G7 E1 B/ }# T5 L* |. R9 P
    Stress(1,ii)=E*Strain(1,ii);) M- J5 M( j  W: \: y" i1 Z3 B4 Z
end5 A7 ?* X! O8 ^2 E& k# j
%--------------------------------------------------  \$ `: T) U0 B+ X* A9 y' I# l4 _5 O
% 以下程序为屏幕输出处理# L0 D0 u: [" Y: J
disp(' ');
8 E; O* e7 e: V# Wdisp(' Input:1-print Node displacement ');
) z+ d3 N: g/ ^3 n) W, ldisp(' Input:2-print strain ');- d/ i( ^- [0 |, T& o- S3 b0 @3 S
disp(' Input:3-print stress ');
" o* c- h* U6 j8 Edisp(' Input:q-quit or use ''ctrl+c'' Shortcut to end the program');) R" ~8 c9 l% n+ v/ ]+ v; _

, |7 Q5 q% m6 ^3 ?while 1
% G2 w, j% @/ G" A' Y2 J    ii=input('Please input1 or 2 or 3:','s');8 p' i0 \: ?- K. o* i  k
        switch(ii)% V8 i2 G; @# L0 o4 X/ Q: f0 C! [
            case '1'- p# E* p  r& }3 J: [& X
                disp('Node displacement');
# T- C7 P. }' q: X7 U& g7 c                disp(u');& u8 G! Z5 N/ ^5 A$ ^2 M
            case '2'
4 A0 B3 c' F2 f9 e                disp('element strain');
( K: c3 H* l3 b- T0 z1 c  s- ]7 i                disp(Strain);; v) \; }* w# Z$ V+ G
            case '3'. \! d5 p6 i2 ^/ q; I8 e7 C+ ?$ `/ W9 h
                disp('element stress');
& c  d4 m9 T; i                disp(Stress);) d+ X3 R) N1 w; B/ s8 f' J
            case 'q'
) S$ m/ N  l3 V/ m                disp('End of program');
0 ^; \4 @# f$ {6 A' z                break;
* x6 B4 q% d+ p' m+ `            otherwise
- l$ O- s" r% t! Q; ]# `  P' U                disp('error!Please input again');9 f5 O7 e' j) i( B7 W, X
                continue;+ A* ^/ Y4 g+ Y8 @/ Y7 l
        end0 j  B& ~" h* |" p, @4 W
end& m7 K6 b5 N# R4 r7 j

$ L! E7 a. h- ]4 D; Y5 I$ t9 ~
* p+ g$ y' j( k* L
回复

使用道具 举报

 楼主| 发表于 2013-3-24 13:44:32 | 显示全部楼层
那个地方怎么变成笑脸了,冒号+右括号=笑脸,改了下,应该是下面,把英文括号改为中文,就好了吧3 C0 Z: \( q. ?) M& u$ ?2 h' [- {
K(1,:)=0;        K(:,1)=0;        %可以省略
$ Q4 H' s; O. }K(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 # O! B* h4 ~. q
谢谢你啊,太感谢你了

7 e" E" {" }0 y3 K$ e3 R+ J1 a8 l这谢啥呢?
发表于 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;
: [! _9 ^7 ?( T8 Yv=x.^j;  是干啥的
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-20 02:03 , Processed in 0.074644 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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