裄架结构有限元计算程序

function U=FEA_Plane_Truss_GeneralFlexuralMember(Nodes,Elements,Force)
    % 平面裄架结构有限元求解函数
    % Nodes存储各节点的坐标,每行为一个节点,第一列为x坐标,第二列为y坐标
    %         第3-5列存储未知量的编号
    % Elements存储各单元信息,每行为一个单元,前两列为该单元的两个节点编号
    %         第三列为单元长度,第四列为单元抗拉刚度,
    %         第五列为截面面积,第六列为截面惯性矩。
    % Force为载荷列阵,每三行为一组,对应一个节点的载荷,分别为fx,fy,M弯矩


    % 初始化内变量,预分配内存
    Dofs=3*size(Nodes,1);      % 结构总自由度,一个节点对应三个自由度
    EleCount=size(Elements,1); % 单元个数
    Conarr=reshape(Elements(:,7:12),6*size(Elements,1),1);
    Conarr=unique(Conarr);
    ConCount=size(Conarr,1)-1;
    K=zeros(ConCount,ConCount);        % 总刚度矩阵
    % 计算每个单元的刚度矩阵并汇总于总刚度矩阵
    for k=1:EleCount
        % 提取单元信息
        N1=Elements(k,1);
        N2=Elements(k,2);
        L =Elements(k,3);
        E =Elements(k,4);
        A =Elements(k,5);
        I =Elements(k,6);m
        % 提取节点信息
        x1=Nodes(N1,1);
        x2=Nodes(N2,1);
        y1=Nodes(N1,2);
        y2=Nodes(N2,2);
        u1=Elements(k,7);
        u2=Elements(k,10);
        v1=Elements(k,8);
        v2=Elements(k,11);
        r1=Elements(k,9);
        r2=Elements(k,12);
        % 计算单元坐标系到全局坐标系的旋转矩阵
        c=(x2-x1)/L;
        s=(y2-y1)/L;
        R=[ 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];
        
        % 计算单元刚度矩阵
        k1=E*A/L;
        k2=E*I/L^3;
        k3=E*I/L^2;
        k4=E*I/L;
        ke=[k1   0      0     -k1 0      0    ;...
             0   12*k2  6*k3  0   -12*k2 6*k3 ;...
             0   6*k3   4*k4  0   -6*k3  2*k4 ;...
           -k1   0      0     k1  0      0    ;...
             0   -12*k2 -6*k3 0   12*k2  -6*k3;...
             0   6*k3   2*k4  0   -6*k3  4*k4];
        % 将单元坐标系下的单元刚度矩阵旋转至全局坐标系下
        Globalke=R'*ke*R;
        % 将全局坐标系的单元刚度矩阵组装到总刚度矩阵的对应位置
        index1=[u1 v1 r1];index1(:,find(index1==0))=[];
        index2=[u2 v2 r2];index2(:,find(index2==0))=[];
        for i1=1:size(index1,2)
            for i2=1:size(index1,2)
                K(index1(i1),index1(i2))=K(index1(i1),index1(i2))+Globalke(i1,i2);
            end
        end
        for i1=1:size(index2,2)
            for i2=1:size(index2,2)
                K(index2(i1),index2(i2))=K(index2(i1),index2(i2))+Globalke(i1+3,i2+3);
            end
        end
    end
    
    
    
    % solve
    U=K\Force;
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢小黑屋的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值