danielree 发表于 2014-10-1 11:13:09

Matlab求解Timoshenko梁

第二帖
求解Timoshenko梁
形函数:输入高斯积分点坐标,输出形函数和形函数对自然坐标的偏导数。function =shapetimoshenko(xi) %------------------------------------------------------------------------------if nargin ~= 1   error('Input error!');end %------------------------------------------------------------------------------syms XI;N1 = 1/2*(1-XI);N2 = 1/2*(1+XI); shapef = ;pdnf = diff(shapef,XI); %------------------------------------------------------------------------------shape =subs(shapef,XI,xi);pdn =subs(pdnf,XI,xi);             end 雅可比矩阵:function = jacobimatrix(pdn, node) jm = pdn * node;invjm = inv(jm);pdc = invjm * pdn; end 应变矩阵:function B =strainmatrixtb(pdc, shape, type) if nargin == 2   B =       pdc(1,1), shape(1,1), pdc(1,2),shape(1,2)];elseif nargin == 3   switch upper(type)       case 'BENDING'             B =                   0, 0, 0, 0];       case 'SHEAR'             B =                   pdc(1,1), shape(1,1),pdc(1,2), shape(1,2)];       otherwise             error('Input error!')   endelse   error('Input error!');end end 单元刚度矩阵:function ke =elemstifftb(E, Nu, kapa, A, I, node) G = E/2/(1+Nu); D = ; =shapetimoshenko(0.577350269189626); =jacobimatrix(pdn1, node);Bb1 =strainmatrixtb(pdc1, shape1, 'bending');keb1 =Bb1'*D*Bb1*det(jm1); =shapetimoshenko(-0.577350269189626); =jacobimatrix(pdn2, node);Bb2 =strainmatrixtb(pdc2, shape2, 'bending');keb2 = Bb2'*D*Bb2*det(jm2); =shapetimoshenko(0); =jacobimatrix(pdn3, node);Bs3 =strainmatrixtb(pdc3, shape3, 'shear');kes =Bs3'*D*Bs3*det(jm3)*2; ke = keb1 + keb2 + kes; end 集成总刚度矩阵:function Fe =assembleforcetb(Fe, fe, i, j) Fe() =Fe() + fe; end
验证:E=10e7; Nu = 0.30;L= 1;thickness=0.001;I=thickness^3/12;A=thickness*1;EI=E*I;kapa=5/6;P=-1; nelem = 100;nnode = nelem+1;n=linspace(0,L,nnode);for i=1:nelem    e(i,1)=i;     e(i,2)=i+1;end K=zeros(nnode*2);F=zeros(nnode*2,1); for ei=1:nelem      node =;ke = elemstifftb(E, Nu,kapa, A, I, node);fe =elemforcetb(P,node);K=assemblestifftb(K,ke,e(ei,1),e(ei,2));F=assembleforcetb(F,fe,e(ei,1),e(ei,2));end fixedNodes=find(abs(n(:,1))<1e-5);Dof=;activeDof=setdiff(',Dof);U=K(activeDof,activeDof)\F(activeDof);disp=zeros(nnode*2,1);disp(activeDof)=U;min(disp)
在求解Timoshenko梁的时候要注意剪力锁死问题。如验证中所采用的悬臂梁,若均采用两点积分,梁端位移仅为 -0.4539。若将剪力对刚度的贡献采用单点积分,则可以消除剪力锁死问题,梁端位移为-15.

jiangzhizhong 发表于 2023-9-25 20:18:56

fe =elemforcetb(P,node);缺少elemforcetb的function
页: [1]
查看完整版本: Matlab求解Timoshenko梁