找回密码
 注册
Simdroid-非首页
查看: 62|回复: 0

写了个4节点等参元法求刚度矩阵的脚本,求确认优化

[复制链接]
发表于 2011-8-28 21:02:44 | 显示全部楼层 |阅读模式 来自 四川成都
问题:1,请达人优化一下吧,特别是求Br,Bl矩阵的代码
          2,k矩阵如何简化
         3, 节点位移为什么这么大呢 是不是程序不对
        4,节点应力的求法对吗?
        5,这样是不是计算的时候,就不用求整体刚度矩阵了,求出每个单元的 矩阵就行了?还是要合成一个大的刚度矩阵,比如有100个节点,就要合成100维的刚度矩阵?然后在计算节点位移?

代码

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%四节点等参元计算单元刚度矩阵
  2. syms m n  %m n 为母单元的局部坐标的m n轴,x y全局坐标系的轴
  3. N=zeros(2,8);%
  4. N1=(1+m)*(1+n)/4;N2=(1-m)*(1+n)/4;N3=(1-m)*(1-n)/4;N4=(1+m)*(1-n)/4;% 形函数
  5. N=[N1 0 N2 0 N3 0 N4 0;
  6.    0 N1 0 N2 0 N3 0 N4];%形函数矩阵
  7. e=[1 0 0 0;
  8.    0 0 0 1;
  9.    0 1 1 0];%应变=e*[du/dx du/dy dv/dx dv/dy]'
  10. Nv=N(1,:);%中间变量
  11. Nv(find(Nv(:)==0))=[];%
  12. XY=[0 1 1 0;0 0 1 1]';%单元节点坐标XY=[x1 x2 x3 x4; y1 y2 y3 y4]'
  13. Jdiff=jacobian(Nv,[m n]);%雅克比矩阵
  14. Jdiff=Jdiff';%
  15. J=Jdiff*XY;%雅克比方阵
  16. InvJ=inv(J);%雅克比方阵的逆矩阵
  17. NJ=J(1,1)*J(2,2)-J(1,2)*J(2,1);%雅克比方阵的模;符号矩阵求模怎么算呢?
  18. Br=[diff(N(1,:),m);diff(N(1,:),n);diff(N(2,:),m);diff(N(2,:),n)];%B矩阵右侧矩阵,形函数对局部坐标分别求导
  19. Bl=e*[InvJ(1,1) InvJ(1,2) 0 0 ;
  20.       InvJ(2,1) InvJ(2,2) 0 0 ;
  21.       0 0 InvJ(1,1) InvJ(1,2);
  22.       0 0 InvJ(2,1) InvJ(2,2)];%B矩阵左侧矩阵
  23. B=Bl*Br;%矩阵B,应变=B*[u1 v1 u2 v2 u3 v3 u4 v4]'
  24. E=1000;mu=0.3;%定义杨氏模量Pa和泊松比
  25. D=E/(1-mu^2)*[1 mu 0;mu 1 0; 0 0 (1-mu)/2];%弹性矩阵,平面应变问题应力应变关系矩阵
  26. k=B'*D*B*NJ;%积分号内的矩阵,得出的是符号矩阵,里面的数都是用分数表示的,如何用有限位的小数表示呢?
  27. % 例k(1,1)=25*(-4719744281318681/85899345920-4719744281318681/85899345920*conj(n))*(-1/20-1/20*n)+25*(-6607641993846153/343597383680-6607641993846153/343597383680*conj(m))*(-1/20-1/20*m)

  28. Ke=double(int(int(k,m,-1,1),n,-1,1))%单元刚度矩阵
  29. %%%单元等效节点荷载,根据虚功原理,单元荷载做得虚功=等效节点荷载做得虚功
  30. q=[0 1*1*1*18]';%单元荷载q=[qx qy]',此处假设qx=0,qy=单元体积*容重
  31. pe=N'*q*NJ %等效节点荷载局部坐标积分号内的矩阵
  32. Pe=double(int(int(pe,m,-1,1),n,-1,1))
  33. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%单元节点位移
  34. Dispe=Ke\Pe %单元节点位移,报警告:Warning: Matrix is close to singular or badly scaled.
  35.              % Results may be inaccurate. RCOND = 1.408701e-018.
  36.              % > In test at 36
  37. %算出来的位移出奇的大
  38. %Dispe = 1.0e+014 *  [1.7944  -0.1056 1.7944 -0.4222  2.1111  -0.4222
  39. %2.1111  -0.1056]=[u1 v1 u2 v2 u3 v3 u4 v4]哪儿出错了呢?
  40. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%节点应力,没看太明白怎么求,不确定求得对不对
  41. Se=D*B*Dispe; %Se=[Sxx Syy Sxy]'
  42. Sen=zeros(3,4);
  43. m=1;n=1;Sen(:,1)=subs(Se);
  44. m=-1;n=1;Sen(:,2)=subs(Se);
  45. m=-1;n=1;Sen(:,3)=subs(Se);
  46. m=1;n=-1;Sen(:,4)=subs(Se);
  47. Sen
  48. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-3 05:32 , Processed in 0.029229 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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