基于Python的刚架结构力学位移法编程求解(已知外力、节点位移均可求解,并考虑斜支座、制作误差、温度膨胀等影响因素)

目录

1、背景

2、编程思路

2.1 数据输入说明

2.2 创建对接输入参数的数组以及集合

 2.3 用循环读取输入的数据

 2.4 定义一些常用的函数

2.5 结果求解

 3 、建议


1、背景

位移法是解决超静定结构最基本的计算方法,计算时与结构超静定次数关系不大,相较于力法及力矩分配法,其计算过程更加简单,计算结果更加精确,应用的范围也更加广泛,可以应用于有侧移刚架结构的计算。

本文介绍的编程输入方式采用文本输入,即杆件长度、角度、荷载等信息都需要提前规定好输入方式,所以只适用于比较规则的刚架结构。

2、编程思路

2.1 数据输入说明

首先对结构的节点进行编号,并指定杆件的方向,其它要需要输入的参数如下图所示:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 MATLAB 代码,用于使用位移计算三维空间刚架结构的应力: ```matlab % 定义结构体 node(1).x = 0; node(1).y = 0; node(1).z = 0; node(2).x = 3; node(2).y = 0; node(2).z = 0; node(3).x = 3; node(3).y = 3; node(3).z = 0; node(4).x = 0; node(4).y = 3; node(4).z = 0; node(5).x = 0; node(5).y = 0; node(5).z = 4; node(6).x = 3; node(6).y = 0; node(6).z = 4; node(7).x = 3; node(7).y = 3; node(7).z = 4; node(8).x = 0; node(8).y = 3; node(8).z = 4; element(1).nodes = [1, 2]; element(1).area = 1; element(1).E = 200e9; element(2).nodes = [2, 3]; element(2).area = 1; element(2).E = 200e9; element(3).nodes = [3, 4]; element(3).area = 1; element(3).E = 200e9; element(4).nodes = [4, 1]; element(4).area = 1; element(4).E = 200e9; element(5).nodes = [5, 6]; element(5).area = 1; element(5).E = 200e9; element(6).nodes = [6, 7]; element(6).area = 1; element(6).E = 200e9; element(7).nodes = [7, 8]; element(7).area = 1; element(7).E = 200e9; element(8).nodes = [8, 5]; element(8).area = 1; element(8).E = 200e9; element(9).nodes = [1, 5]; element(9).area = 1; element(9).E = 200e9; element(10).nodes = [2, 6]; element(10).area = 1; element(10).E = 200e9; element(11).nodes = [3, 7]; element(11).area = 1; element(11).E = 200e9; element(12).nodes = [4, 8]; element(12).area = 1; element(12).E = 200e9; element(13).nodes = [2, 4]; element(13).area = 1; element(13).E = 200e9; element(14).nodes = [6, 8]; element(14).area = 1; element(14).E = 200e9; element(15).nodes = [1, 3]; element(15).area = 1; element(15).E = 200e9; element(16).nodes = [5, 7]; element(16).area = 1; element(16).E = 200e9; % 计算单元刚度矩阵 for i = 1:length(element) node1 = element(i).nodes(1); node2 = element(i).nodes(2); x1 = node(node1).x; y1 = node(node1).y; z1 = node(node1).z; x2 = node(node2).x; y2 = node(node2).y; z2 = node(node2).z; L = sqrt((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2); cosx = (x2-x1)/L; cosy = (y2-y1)/L; cosz = (z2-z1)/L; k = element(i).E*element(i).area/L*[cosx^2, cosx*cosy, cosx*cosz, -cosx^2, -cosx*cosy, -cosx*cosz; cosx*cosy, cosy^2, cosy*cosz, -cosx*cosy, -cosy^2, -cosy*cosz; cosx*cosz, cosy*cosz, cosz^2, -cosx*cosz, -cosy*cosz, -cosz^2; -cosx^2, -cosx*cosy, -cosx*cosz, cosx^2, cosx*cosy, cosx*cosz; -cosx*cosy, -cosy^2, -cosy*cosz, cosx*cosy, cosy^2, cosy*cosz; -cosx*cosz, -cosy*cosz, -cosz^2, cosx*cosz, cosy*cosz, cosz^2]; element(i).k = k; end % 组装全局刚度矩阵 K = zeros(24, 24); for i = 1:length(element) node1 = element(i).nodes(1); node2 = element(i).nodes(2); idx = [3*node1-2, 3*node1-1, 3*node1, 3*node2-2, 3*node2-1, 3*node2]; K(idx, idx) = K(idx, idx) + element(i).k; end % 边界条件 BC = [1, 0; 2, 0; 3, 0; 22, 0; 23, 0; 24, 0]; % 计算位移 K_reduced = K; for i = 1:size(BC, 1) idx = 3*BC(i, 1) - BC(i, 2); K_reduced(idx, :) = 0; K_reduced(:, idx) = 0; K_reduced(idx, idx) = 1; end F = zeros(24, 1); F(14) = -10000; F_reduced = F; for i = 1:size(BC, 1) idx = 3*BC(i, 1) - BC(i, 2); F_reduced(idx) = []; K_reduced(idx, :) = []; K_reduced(:, idx) = []; end U_reduced = K_reduced\F_reduced; U = zeros(24, 1); for i = 1:size(BC, 1) idx = 3*BC(i, 1) - BC(i, 2); U(idx) = BC(i, 2); end U(~(U==0)) = U_reduced; % 计算应力 stress = zeros(length(element), 1); for i = 1:length(element) node1 = element(i).nodes(1); node2 = element(i).nodes(2); idx = [3*node1-2, 3*node1-1, 3*node1, 3*node2-2, 3*node2-1, 3*node2]; u = U(idx); k = element(i).k; stress(i) = element(i).E*element(i).area/element(i).L*[-1, 1]*k*[u(1); u(2); u(3); u(4); u(5); u(6)]; end disp(stress); ``` 这个代码定义了一个简单的八节点体系,每个节点都有三个自由度(x,y,z)。它首先计算每个单元的刚度矩阵,然后组装全局刚度矩阵,并施加边界条件和外力。接下来,它计算位移并使用它来计算每个元素的应力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值