Fluid 发表于 2023-10-9 16:07
大侠那个c矩阵转置,看得出来是老手,不过Mathcad这软件想把结果自动生成一列还真没啥好方法,只能这样转置。 本帖最后由 Fluid 于 2023-10-9 16:51 编辑
零件工程师 发表于 2023-10-9 16:43
大侠那个c矩阵转置,看得出来是老手,不过Mathcad这软件想把结果自动生成一列还真没啥好方法,只能这样转 ...
大侠我之前说过mathcad是你教我的, 我计算能力很差, 只能用用软件了.
可以这样, 就直接将结果指定给未知数了. 但必须是结果出来了,在等式的最前面加 := , 再把未知数矩阵写在:=前面,等式成立.
本帖最后由 零件工程师 于 2024-1-9 11:33 编辑
Fluid 发表于 2023-10-9 16:50
大侠我之前说过mathcad是你教我的, 我计算能力很差, 只能用用软件了.
可以这样, 就直接将结果指定给未知 ...
大侠,我用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()
# 用于弯矩计算的载荷系数,注意根据奇异函数规则表更新系数,与剪力的载荷系数有所不同
matrix_Load_For_Moment = np.array()
# 创建外部载荷位置矩阵,数量、数值可根据具体案例修改
matrix_Load_Loaction = np.array()
# 创建阶次矩阵,数量、数值可根据具体案例修改
matrix_n = np.array()
# 定义横坐标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 # 创建P并将负载矩阵中的序号为i元素依次赋值给P
P_Moment = matrix_Load_For_Moment # 创建P并将负载矩阵中的序号为i元素依次赋值给P
a = matrix_Load_Loaction # 创建a并将负载位置矩阵中的序号为i元素依次赋值给a
n = matrix_n # 创建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)
plot_shear_force_diagram(x, shear_force_values)
plt.ylim(-100, 100)
plt.yticks(np.arange(0, 120, 40))
# 在第二个子图中绘制弯矩图
plt.sca(axs)
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() import math
import sympy
# 将角度转换为弧度
angle_a = 55# 输入角度a的角度制角度
angle_b = 40# 输入角度b的角度制角度
r_a = math.radians(angle_a)# 角度制转换为弧度制
r_b = math.radians(angle_b)# 角度制转换为弧度制
# 列平衡方程
F_1, F_2, P, = sympy.symbols("F_1, F_2, P")# 定义符号计算用的变量
eq1 = F_2 * math.cos(r_a) - F_1 * math.sin(r_b)# 平衡方程1
eq2 = F_2 * math.sin(r_a) + F_1 * math.cos(r_b) - P # 平衡方程2
s = sympy.solve(, , dict=True)# 求解平衡方程组
print(s)#打印结果 Fluid 发表于 2023-10-9 16:50
大侠我之前说过mathcad是你教我的, 我计算能力很差, 只能用用软件了.
可以这样, 就直接将结果指定给未知 ...
问题解决了,弯矩方程的奇异函数规则设置的有问题,应该评判n + 1是否小于0,因为剪力方程的规则中已经用过一次n了,会返回值。
# 引入外部库,创建程序环境
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 + 1 < 0:
if x == a:
return 1
elif x != a:
return 0
elif n + 1 >= 0:
if x < a:
return 0
elif x >= a:
return P_Moment * (x - a) ** ( n + 1 )
# 引入用于奇异函数计算时所需的系数矩阵
# 创建外部载荷矩阵,数量、数值可根据具体案例修改
# 用于剪力计算的载荷系数
matrix_Load_For_ShearForce = np.array()
# 用于弯矩计算的载荷系数,注意根据奇异函数规则表更新系数,与剪力的载荷系数有所不同
matrix_Load_For_Moment = np.array()
# 创建外部载荷位置矩阵,数量、数值可根据具体案例修改
matrix_Load_Loaction = np.array()
# 创建阶次矩阵,数量、数值可根据具体案例修改
matrix_n = np.array()
# 定义横坐标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 # 创建P并将负载矩阵中的序号为i元素依次赋值给P
P_Moment = matrix_Load_For_Moment # 创建P并将负载矩阵中的序号为i元素依次赋值给P
a = matrix_Load_Loaction # 创建a并将负载位置矩阵中的序号为i元素依次赋值给a
n = matrix_n # 创建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)
plot_shear_force_diagram(x, shear_force_values)
plt.ylim(-100, 100)
plt.yticks(np.arange(0, 120, 40))
# 在第二个子图中绘制弯矩图
plt.sca(axs)
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() 本帖最后由 零件工程师 于 2024-1-10 15:15 编辑
再优化一下老的Mathcad文件,总得来讲还是Mathcad编起来简单的多,然而Python免费。
哈哈,从Excel,到Mathcad,最终到Python,这个帖子算是完结了,问题结束。
页:
1
[2]