ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数学建模(3)-基于matlab的受轴弯剪的梁单元的结构求解-有限元-FEM

2021-11-14 00:00:50  阅读:218  来源: 互联网

标签:有限元 end coor nod unknown FEM displacement ele matlab


目录

1、此文是基于matlab的受轴弯剪的梁单元的结构求解,代码如下:

2、生成的结果 :​

3、视频资料见链接:


1、此文是基于matlab的受轴弯剪的梁单元的结构求解,代码如下:

% 基于matlab的受轴弯剪的梁单元的结构求解;
% 输入量为:节点数目,坐标; 单元节点编号,自由度编号; 已知力,位移; 未知位移;
clc      
clear all 

num_nod=3;  %节点数目;
ele_nod=[1 2;2 3]; %单元节点编号;
nod_coor=[0 0;12 0; 24.73 12.73] ; %节点坐标,向右为x轴,向下为y轴;
ele_dof=[1 2 3 4 5 6;4 5 6 7 8 9]; %单元自由度编号,对应于子块搬家对应的家;
force=zeros(3*num_nod,1);
displacement=zeros(3*num_nod,1);
stiffness=zeros(3*num_nod);
ele_num=size(ele_nod,1);
force(5) = 1000000000.0; %已知节点力;
displacement(1)=0.0;  %约束条件;
displacement(2)=0.0;
displacement(3)=0.0;
displacement(7)=0.0;
displacement(8)=0.0;
displacement(9)=0.0;
unknown_f_a=[4;5;6]; %未知节点位移;

% 截面基本参数
b=0.5; 
h=0.5; 
E=2.1e11;


%初使化所要的矩阵,F K 位移矩阵;

A=b*h;
I=b*h^3/12; 

for e = 1 : ele_num
    L(e) = sqrt(  (nod_coor(ele_nod(e,1),1)-nod_coor(ele_nod(e,2),1))^2+ ...
                  (nod_coor(ele_nod(e,1),2)-nod_coor(ele_nod(e,2),2))^2   );
      C=(nod_coor(ele_nod(e,2),1)-nod_coor(ele_nod(e,1),1))/L(e);     
      S=(nod_coor(ele_nod(e,2),2)-nod_coor(ele_nod(e,1),2))/L(e);      
      t=[  C S 0 0 0 0; 
          -S C 0 0 0 0; 
           0 0 1 0 0 0; 
           0 0 0 C S 0; 
           0 0 0 -S C 0; 
           0 0 0 0 0 1];      %坐标转换矩阵    
      k11=A*E/L(e);
      k22=12*E*I/L(e)^3;
      k23=6*E*I/L(e)^2;
      k33=4*E*I/L(e);
      k36=2*E*I/L(e);
      k_local = [k11 0 0 -k11 0 0;0 k22 k23 0 -k22 k23;0 k23 k33 0 -k23 k36;-k11 0 0 k11 0 0;0 -k22 -k23 0 k22 -k23; 0 k23 k36 0 -k23 k33];
      k=t'*k_local*t; 
      
      ele_dof_a = ele_dof(e,:);      
      for i = 1 : 6
          for j = 1 : 6
          
              stiffness(ele_dof_a(1,i),ele_dof_a(1,j))=...
              stiffness(ele_dof_a(1,i),ele_dof_a(1,j))+k(i,j);
          end
      end       
              
end

%因为此时的K是奇异的,那么要消除对应的值;

for i = 1:size(unknown_f_a)
   dis_new(i,1)=displacement(unknown_f_a(i,1),1);
   force_new(i,1)=force(unknown_f_a(i,1),1);
end

for i = 1:size(unknown_f_a)
    for j =1:size(unknown_f_a)
        stiff_new(i,j) = stiffness(unknown_f_a(i,1),unknown_f_a(j,1));
    end
end

%消除K的奇异性后,求解所对应自由度处的位移;
dis_new = inv(stiff_new)*force_new;
for i = 1 : size(unknown_f_a)
fprintf('对应的第%d个自由度的未知位移大小为 %d;\n',unknown_f_a(i),dis_new(i))
end

for i = 1 :size(unknown_f_a)

    displacement(unknown_f_a(i,1),1) = dis_new(i,1);
end


for e = 1 :ele_num
    
    x = [nod_coor(ele_nod(e,1),1) nod_coor(ele_nod(e,2),1)];
     y = [nod_coor(ele_nod(e,1),2) nod_coor(ele_nod(e,2),2)];
     plot(x,-y,'b')
     hold on     
end

for i=1:num_nod

    nod_coor_def(i,1)=nod_coor(i,1)+displacement(3*i-2,1);
    nod_coor_def(i,2)=nod_coor(i,2)+displacement(3*i-1,1);
end

for e=1:ele_num
    x=[nod_coor_def(ele_nod(e,1),1) nod_coor_def(ele_nod(e,2),1)];
    y=[nod_coor_def(ele_nod(e,1),2) nod_coor_def(ele_nod(e,2),2)];
plot(x,-y,'r')
hold on
end










2、生成的结果 :

3、视频资料见链接:

标签:有限元,end,coor,nod,unknown,FEM,displacement,ele,matlab
来源: https://blog.csdn.net/qq_44996058/article/details/121312366

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有