机械荟萃山庄

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: 零件工程师

奇异函数解梁的剪力和弯矩

[复制链接]
 楼主| 发表于 2022-12-7 10:05:03 | 显示全部楼层
用Mathcad Prime3定义了个奇异函数,相较于Excel,一旦定义了函数,针对不同项目的具体支反力、力矩,查表后快速写入弯矩、剪力函数。比Excel要方便些。

本帖子中包含更多资源

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

x

点评

10楼有的  发表于 2022-12-7 10:18
又没EXCEL版的,我想白嫖  发表于 2022-12-7 10:12
确保自己处于饭圈儿与米店,哈哈
回复 支持 反对

使用道具 举报

12

主题

215

帖子

6731

积分

论坛元老

Rank: 8Rank: 8

积分
6731
发表于 2023-10-9 16:07:32 | 显示全部楼层

本帖子中包含更多资源

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

x

点评

有这个计划,可是手头在忙项目,搁置了。  发表于 2023-10-9 16:28
@零件工程师能不能把材料力学躺赢公试都搞完,隔一久更新下。  发表于 2023-10-9 16:25
Mathcad 15,不错。  发表于 2023-10-9 16:16
谢谢海神大侠的函数  发表于 2023-10-9 16:11
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-9 16:43:50 | 显示全部楼层

大侠那个c矩阵转置,看得出来是老手,不过Mathcad这软件想把结果自动生成一列还真没啥好方法,只能这样转置。
确保自己处于饭圈儿与米店,哈哈
回复 支持 反对

使用道具 举报

12

主题

215

帖子

6731

积分

论坛元老

Rank: 8Rank: 8

积分
6731
发表于 2023-10-9 16:50:50 | 显示全部楼层
本帖最后由 Fluid 于 2023-10-9 16:51 编辑
零件工程师 发表于 2023-10-9 16:43
大侠那个c矩阵转置,看得出来是老手,不过Mathcad这软件想把结果自动生成一列还真没啥好方法,只能这样转 ...

大侠我之前说过mathcad是你教我的, 我计算能力很差, 只能用用软件了.

可以这样, 就直接将结果指定给未知数了. 但必须是结果出来了,在等式的最前面加 := , 再把未知数矩阵写在:=前面,等式成立.

本帖子中包含更多资源

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

x

点评

工具只是途径, 思想才有价值. vb也好, python_numpy也好, 我觉得和mathcad没什么差别. 我想再花一年时间把矩阵重新学一遍.  发表于 2023-10-9 18:25
看了一眼小学生编程竞赛,先图形编程,再Python,最后C++,整的我总有一天得转软件工具,不然教不了自己孩子。  发表于 2023-10-9 16:56
这种简单的解方程,横着就横着了,n方程的符号解,还是竖列更方便些。  发表于 2023-10-9 16:54
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 11:29:11 | 显示全部楼层
本帖最后由 零件工程师 于 2024-1-9 11:33 编辑
Fluid 发表于 2023-10-9 16:50
大侠我之前说过mathcad是你教我的, 我计算能力很差, 只能用用软件了.

可以这样, 就直接将结果指定给未知 ...

大侠,我用Python写了个梁的计算,可以试试,加载参数没有变,输出的剪力图没问题,弯矩图在突变处没有体现,留个小尾巴,估计是函数定义的时候没做过多区分,有时间再搞。

  1. # 引入外部库,创建程序环境
  2. import numpy as np  # 引入numpy并简称为np
  3. import matplotlib.pyplot as plt  # 引入matplotlib环境并简称为plt

  4. # 定义剪力方程(基于奇异函数规则)
  5. # 定义剪力方程,引入变量 x:梁的横坐标;a:外部载荷位置:n:函数阶次
  6. def shear_force(x, a, n):  
  7.     if n < 0:
  8.         if x == a:
  9.             return 1
  10.         elif x != a:
  11.             return 0
  12.     elif n >= 0:
  13.         if x < a:
  14.             return 0
  15.         elif x >= a:
  16.             return P_Shear * (x - a) ** n

  17. # 定义弯矩方程(基于奇异函数规则)
  18. # 定义剪弯矩程,引入变量 x:梁的横坐标;a:外部载荷位置:n:函数阶次
  19. def moment_value(x, a, n):
  20.     if n < 0:
  21.         if x == a:
  22.             return 1
  23.         elif x != a:
  24.             return 0
  25.     elif n >= 0:
  26.         if x < a:
  27.             return 0
  28.         elif x >= a:
  29.             return P_Moment * (x - a) ** ( n + 1 )        
  30.         
  31. # 引入用于奇异函数计算时所需的系数矩阵

  32. # 创建外部载荷矩阵,数量、数值可根据具体案例修改
  33. # 用于剪力计算的载荷系数
  34. matrix_Load_For_ShearForce = np.array([73.75, -120, -45, -30, 30, 61.25])
  35. # 用于弯矩计算的载荷系数,注意根据奇异函数规则表更新系数,与剪力的载荷系数有所不同
  36. matrix_Load_For_Moment = np.array([73.75, -120, -45, -15, 15, 61.25])

  37. # 创建外部载荷位置矩阵,数量、数值可根据具体案例修改
  38. matrix_Load_Loaction = np.array([0, 2, 4, 6, 9, 12])

  39. # 创建阶次矩阵,数量、数值可根据具体案例修改
  40. matrix_n = np.array([0, -1, 0, 1, 1, 0])

  41. # 定义横坐标x的起点、终点、细分数量,细分数量影响计算精度
  42. x = np.linspace(0, 12, 5000)
  43. # 为shear_force_values生成与x矩阵相同的全零数组
  44. shear_force_values = np.zeros_like(x)

  45. # 为moment_values生成与x矩阵相同的全零数组
  46. moment_values = np.zeros_like(x)

  47. # 开始遍历矩阵
  48. for i in range(len(matrix_Load_Loaction)):
  49.     P_Shear = matrix_Load_For_ShearForce[i] # 创建P并将负载矩阵中的序号为i元素依次赋值给P
  50.     P_Moment = matrix_Load_For_Moment[i] # 创建P并将负载矩阵中的序号为i元素依次赋值给P
  51.     a = matrix_Load_Loaction[i] # 创建a并将负载位置矩阵中的序号为i元素依次赋值给a
  52.     n = matrix_n[i] # 创建n并将阶次矩阵中的序号为i元素依次赋值给n

  53. # 将shear_force的函数变成一个可以接受数组作为输入的向量化函数shear_force_values  
  54. # 将x、a和n作为参数传递给向量化的shear_force函数。
  55. # 向量化函数将对每个元素进行计算,并返回一个具有相同形状的数组,其中包含计算后的结果
  56. # shear_force_values +=将上述乘积添加到名为shear_force_values的变量中
  57. # 如果shear_force_values之前已经有值,这将进行逐元素的相加。
  58. # 这样,shear_force_values逐渐累积了每个循环迭代中的剪力值
  59.     shear_force_values += np.vectorize(shear_force)(x, a, n)
  60.    
  61. # 同上
  62.     moment_values += np.vectorize(moment_value)(x, a, n)

  63. # 这行代码的目的是计算剪力值,并将结果累积在变量shear_force_values中
  64. # 通过使用向量化函数和广播机制,可以高效地对输入数组的每个元素进行计算
  65. # 并利用向量化的特性,避免了显式地编写循环来处理数组的每个元素
  66.    
  67. def plot_shear_force_diagram(x, shear_force_values):
  68.     plt.plot(x, shear_force_values)
  69.     plt.xlabel('Position (m)')
  70.     plt.ylabel('Shear Sorce (kN)')
  71.     plt.title('Shear Force Diagram')
  72.     plt.grid(True)

  73. def plot_moment_diagram(x, moment_values):
  74.     plt.plot(x, moment_values)
  75.     plt.xlabel('Position (m)')
  76.     plt.ylabel('Moment Values (kN·m)')
  77.     plt.title('Moment Diagram')
  78.     plt.grid(True)
  79.    
  80. # 创建一个包含两个子图的图形
  81. fig, axs = plt.subplots(2)

  82. # 在第一个子图中绘制剪力图
  83. plt.sca(axs[0])
  84. plot_shear_force_diagram(x, shear_force_values)
  85. plt.ylim(-100, 100)
  86. plt.yticks(np.arange(0, 120, 40))

  87. # 在第二个子图中绘制弯矩图
  88. plt.sca(axs[1])
  89. plot_moment_diagram(x, moment_values)
  90. plt.ylim(-100, 100)
  91. plt.yticks(np.arange(0, 500, 100))

  92. # 调整子图之间的间距
  93. plt.subplots_adjust(hspace=1)

  94. # 显示图形
  95. plt.grid(True)
  96. plt.show()
复制代码

本帖子中包含更多资源

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

x

点评

numpy真是好用哈哈,我最近也学习了一下sympy,以后解方程不用商业软件了  发表于 2024-1-9 13:06
找到原因了,第10行是x完全相等a,但是在浮点数中完全相等就很难出现,所以这块需要改。  发表于 2024-1-9 13:03
确保自己处于饭圈儿与米店,哈哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-9 13:07:18 | 显示全部楼层
  1. import math
  2. import sympy

  3. # 将角度转换为弧度
  4. angle_a = 55  # 输入角度a的角度制角度
  5. angle_b = 40  # 输入角度b的角度制角度
  6. r_a = math.radians(angle_a)  # 角度制转换为弧度制
  7. r_b = math.radians(angle_b)  # 角度制转换为弧度制

  8. # 列平衡方程
  9. F_1, F_2, P, = sympy.symbols("F_1, F_2, P")  # 定义符号计算用的变量
  10. eq1 = F_2 * math.cos(r_a) - F_1 * math.sin(r_b)  # 平衡方程1
  11. eq2 = F_2 * math.sin(r_a) + F_1 * math.cos(r_b) - P # 平衡方程2
  12. s = sympy.solve([eq1, eq2], [F_1,F_2], dict=True)  # 求解平衡方程组
  13. print(s)  #打印结果
复制代码

点评

解方程的代码  发表于 2024-1-9 13:07
确保自己处于饭圈儿与米店,哈哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-10 15:08:10 | 显示全部楼层
Fluid 发表于 2023-10-9 16:50
大侠我之前说过mathcad是你教我的, 我计算能力很差, 只能用用软件了.

可以这样, 就直接将结果指定给未知 ...

问题解决了,弯矩方程的奇异函数规则设置的有问题,应该评判n + 1是否小于0,因为剪力方程的规则中已经用过一次n了,会返回值。

  1. # 引入外部库,创建程序环境
  2. import numpy as np  # 引入numpy并简称为np
  3. import matplotlib.pyplot as plt  # 引入matplotlib环境并简称为plt

  4. # 定义剪力方程(基于奇异函数规则)
  5. # 定义剪力方程,引入变量 x:梁的横坐标;a:外部载荷位置:n:函数阶次
  6. def shear_force(x, a, n):  
  7.     if n < 0:
  8.         if x == a:
  9.             return 1
  10.         elif x != a:
  11.             return 0
  12.     elif n >= 0:
  13.         if x < a:
  14.             return 0
  15.         elif x >= a:
  16.             return P_Shear * (x - a) ** n

  17. # 定义弯矩方程(基于奇异函数规则)
  18. # 定义剪弯矩程,引入变量 x:梁的横坐标;a:外部载荷位置:n:函数阶次
  19. def moment_value(x, a, n):
  20.     if n + 1 < 0:
  21.         if x == a:
  22.             return 1
  23.         elif x != a:
  24.             return 0
  25.     elif n + 1 >= 0:
  26.         if x < a:
  27.             return 0
  28.         elif x >= a:
  29.             return P_Moment * (x - a) ** ( n + 1 )        
  30.         
  31. # 引入用于奇异函数计算时所需的系数矩阵

  32. # 创建外部载荷矩阵,数量、数值可根据具体案例修改
  33. # 用于剪力计算的载荷系数
  34. matrix_Load_For_ShearForce = np.array([73.75, -120, -45, -30, 30, 61.25])
  35. # 用于弯矩计算的载荷系数,注意根据奇异函数规则表更新系数,与剪力的载荷系数有所不同
  36. matrix_Load_For_Moment = np.array([73.75, -120, -45, -15, 15, 61.25])

  37. # 创建外部载荷位置矩阵,数量、数值可根据具体案例修改
  38. matrix_Load_Loaction = np.array([0, 2, 4, 6, 9, 12])

  39. # 创建阶次矩阵,数量、数值可根据具体案例修改
  40. matrix_n = np.array([0, -1, 0, 1, 1, 0])

  41. # 定义横坐标x的起点、终点、细分数量,细分数量影响计算精度
  42. x = np.linspace(0, 12, 5000)
  43. # 为shear_force_values生成与x矩阵相同的全零数组
  44. shear_force_values = np.zeros_like(x)

  45. # 为moment_values生成与x矩阵相同的全零数组
  46. moment_values = np.zeros_like(x)

  47. # 开始遍历矩阵
  48. for i in range(len(matrix_Load_Loaction)):
  49.     P_Shear = matrix_Load_For_ShearForce[i] # 创建P并将负载矩阵中的序号为i元素依次赋值给P
  50.     P_Moment = matrix_Load_For_Moment[i] # 创建P并将负载矩阵中的序号为i元素依次赋值给P
  51.     a = matrix_Load_Loaction[i] # 创建a并将负载位置矩阵中的序号为i元素依次赋值给a
  52.     n = matrix_n[i] # 创建n并将阶次矩阵中的序号为i元素依次赋值给n

  53. # 将shear_force的函数变成一个可以接受数组作为输入的向量化函数shear_force_values  
  54. # 将x、a和n作为参数传递给向量化的shear_force函数。
  55. # 向量化函数将对每个元素进行计算,并返回一个具有相同形状的数组,其中包含计算后的结果
  56. # shear_force_values +=将上述乘积添加到名为shear_force_values的变量中
  57. # 如果shear_force_values之前已经有值,这将进行逐元素的相加。
  58. # 这样,shear_force_values逐渐累积了每个循环迭代中的剪力值
  59.     shear_force_values += np.vectorize(shear_force)(x, a, n)
  60.    
  61. # 同上
  62.     moment_values += np.vectorize(moment_value)(x, a, n)

  63. # 这行代码的目的是计算剪力值,并将结果累积在变量shear_force_values中
  64. # 通过使用向量化函数和广播机制,可以高效地对输入数组的每个元素进行计算
  65. # 并利用向量化的特性,避免了显式地编写循环来处理数组的每个元素
  66.    
  67. def plot_shear_force_diagram(x, shear_force_values):
  68.     plt.plot(x, shear_force_values)
  69.     plt.xlabel('Position (m)')
  70.     plt.ylabel('Shear Sorce (kN)')
  71.     plt.title('Shear Force Diagram')
  72.     plt.grid(True)

  73. def plot_moment_diagram(x, moment_values):
  74.     plt.plot(x, moment_values)
  75.     plt.xlabel('Position (m)')
  76.     plt.ylabel('Moment Values (kN·m)')
  77.     plt.title('Moment Diagram')
  78.     plt.grid(True)
  79.    
  80. # 创建一个包含两个子图的图形
  81. fig, axs = plt.subplots(2)

  82. # 在第一个子图中绘制剪力图
  83. plt.sca(axs[0])
  84. plot_shear_force_diagram(x, shear_force_values)
  85. plt.ylim(-100, 100)
  86. plt.yticks(np.arange(0, 120, 40))

  87. # 在第二个子图中绘制弯矩图
  88. plt.sca(axs[1])
  89. plot_moment_diagram(x, moment_values)
  90. plt.ylim(-100, 100)
  91. plt.yticks(np.arange(0, 500, 100))

  92. # 调整子图之间的间距
  93. plt.subplots_adjust(hspace=1)

  94. # 显示图形
  95. plt.grid(True)
  96. plt.show()
复制代码

本帖子中包含更多资源

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

x
确保自己处于饭圈儿与米店,哈哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-1-10 15:14:15 | 显示全部楼层
本帖最后由 零件工程师 于 2024-1-10 15:15 编辑

再优化一下老的Mathcad文件,总得来讲还是Mathcad编起来简单的多,然而Python免费。


哈哈,从Excel,到Mathcad,最终到Python,这个帖子算是完结了,问题结束。

本帖子中包含更多资源

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

x

点评

大家一起进步  发表于 2024-1-11 09:31
大侠真棒,吾辈楷模  发表于 2024-1-11 09:23
确保自己处于饭圈儿与米店,哈哈
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|机械荟萃山庄 ( 辽ICP备16011317号-1 )

GMT+8, 2024-4-29 18:03 , Processed in 0.098279 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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