|
楼主 |
发表于 2024-1-9 11:29:11
|
显示全部楼层
本帖最后由 零件工程师 于 2024-1-9 11:33 编辑
大侠,我用Python写了个梁的计算,可以试试,加载参数没有变,输出的剪力图没问题,弯矩图在突变处没有体现,留个小尾巴,估计是函数定义的时候没做过多区分,有时间再搞。
- # 引入外部库,创建程序环境
- import numpy as np # 引入numpy并简称为np
- import matplotlib.pyplot as plt # 引入matplotlib环境并简称为plt
- # 定义剪力方程(基于奇异函数规则)
- # 定义剪力方程,引入变量 x:梁的横坐标;a:外部载荷位置:n:函数阶次
- def shear_force(x, a, n):
- if n < 0:
- if x == a:
- return 1
- elif x != a:
- return 0
- elif n >= 0:
- if x < a:
- return 0
- elif x >= a:
- return P_Shear * (x - a) ** n
- # 定义弯矩方程(基于奇异函数规则)
- # 定义剪弯矩程,引入变量 x:梁的横坐标;a:外部载荷位置:n:函数阶次
- def moment_value(x, a, n):
- if n < 0:
- if x == a:
- return 1
- elif x != a:
- return 0
- elif n >= 0:
- if x < a:
- return 0
- elif x >= a:
- return P_Moment * (x - a) ** ( n + 1 )
-
- # 引入用于奇异函数计算时所需的系数矩阵
- # 创建外部载荷矩阵,数量、数值可根据具体案例修改
- # 用于剪力计算的载荷系数
- matrix_Load_For_ShearForce = np.array([73.75, -120, -45, -30, 30, 61.25])
- # 用于弯矩计算的载荷系数,注意根据奇异函数规则表更新系数,与剪力的载荷系数有所不同
- matrix_Load_For_Moment = np.array([73.75, -120, -45, -15, 15, 61.25])
- # 创建外部载荷位置矩阵,数量、数值可根据具体案例修改
- matrix_Load_Loaction = np.array([0, 2, 4, 6, 9, 12])
- # 创建阶次矩阵,数量、数值可根据具体案例修改
- matrix_n = np.array([0, -1, 0, 1, 1, 0])
- # 定义横坐标x的起点、终点、细分数量,细分数量影响计算精度
- x = np.linspace(0, 12, 5000)
- # 为shear_force_values生成与x矩阵相同的全零数组
- shear_force_values = np.zeros_like(x)
- # 为moment_values生成与x矩阵相同的全零数组
- moment_values = np.zeros_like(x)
- # 开始遍历矩阵
- for i in range(len(matrix_Load_Loaction)):
- P_Shear = matrix_Load_For_ShearForce[i] # 创建P并将负载矩阵中的序号为i元素依次赋值给P
- P_Moment = matrix_Load_For_Moment[i] # 创建P并将负载矩阵中的序号为i元素依次赋值给P
- a = matrix_Load_Loaction[i] # 创建a并将负载位置矩阵中的序号为i元素依次赋值给a
- n = matrix_n[i] # 创建n并将阶次矩阵中的序号为i元素依次赋值给n
- # 将shear_force的函数变成一个可以接受数组作为输入的向量化函数shear_force_values
- # 将x、a和n作为参数传递给向量化的shear_force函数。
- # 向量化函数将对每个元素进行计算,并返回一个具有相同形状的数组,其中包含计算后的结果
- # shear_force_values +=将上述乘积添加到名为shear_force_values的变量中
- # 如果shear_force_values之前已经有值,这将进行逐元素的相加。
- # 这样,shear_force_values逐渐累积了每个循环迭代中的剪力值
- shear_force_values += np.vectorize(shear_force)(x, a, n)
-
- # 同上
- moment_values += np.vectorize(moment_value)(x, a, n)
- # 这行代码的目的是计算剪力值,并将结果累积在变量shear_force_values中
- # 通过使用向量化函数和广播机制,可以高效地对输入数组的每个元素进行计算
- # 并利用向量化的特性,避免了显式地编写循环来处理数组的每个元素
-
- def plot_shear_force_diagram(x, shear_force_values):
- plt.plot(x, shear_force_values)
- plt.xlabel('Position (m)')
- plt.ylabel('Shear Sorce (kN)')
- plt.title('Shear Force Diagram')
- plt.grid(True)
- def plot_moment_diagram(x, moment_values):
- plt.plot(x, moment_values)
- plt.xlabel('Position (m)')
- plt.ylabel('Moment Values (kN·m)')
- plt.title('Moment Diagram')
- plt.grid(True)
-
- # 创建一个包含两个子图的图形
- fig, axs = plt.subplots(2)
- # 在第一个子图中绘制剪力图
- plt.sca(axs[0])
- plot_shear_force_diagram(x, shear_force_values)
- plt.ylim(-100, 100)
- plt.yticks(np.arange(0, 120, 40))
- # 在第二个子图中绘制弯矩图
- plt.sca(axs[1])
- plot_moment_diagram(x, moment_values)
- plt.ylim(-100, 100)
- plt.yticks(np.arange(0, 500, 100))
- # 调整子图之间的间距
- plt.subplots_adjust(hspace=1)
- # 显示图形
- plt.grid(True)
- plt.show()
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|