传递矩阵法计算曲轴扭振的python程序
时间: 2023-08-23 10:08:13 浏览: 63
传递矩阵法是一种常用的计算曲轴扭振的方法,可以用Python编写实现。下面是一个基本的程序示例:
``` python
import numpy as np
# 输入参数
N = 4 # 曲轴分段数
J = 0.1 # 曲轴转动惯量
k = 5 # 弹簧刚度
c = 0.02 # 阻尼系数
F = 10 # 外加扭矩
# 计算传递矩阵
w = np.sqrt(k/J) # 自然频率
r = c/(2*np.sqrt(J*k)) # 阻尼比
beta = F/(k*J) # 扭转角度
A = np.array([[0, 1], [-w**2, -2*r*w]])
B = np.array([0, beta*w**2])
C = np.array([1, 0])
D = 0
# 计算传递矩阵
def transfer_matrix(A, B, C, D, N):
T = np.zeros((2*N+1, 2*N+1))
T[0:2, 0:2] = A
T[0:2, 2] = B
T[2, 0:2] = C
for i in range(1, N):
T[2*i:2*i+2, 2*i-2:2*i+2] = A
T[2*i:2*i+2, 2*i+2] = B
T[2*i+2, 2*i:2*i+2] = C
return T
T = transfer_matrix(A, B, C, D, N)
# 计算解析解
eigvals, eigvecs = np.linalg.eig(T)
index = np.argsort(np.abs(eigvals))
eigvals = eigvals[index]
eigvecs = eigvecs[:, index]
u0 = eigvecs[0, :]
u = np.zeros((2*N+1,))
for i in range(2*N+1):
u[i] = u0 @ np.linalg.matrix_power(T, i) @ np.array([0, 1])
# 计算扭转角
theta = beta * np.sum(u[0::2])
print('扭转角度为:%.4f' % theta)
```
在这个程序中,我们先输入了曲轴的一些基本参数,如分段数、转动惯量、弹簧刚度、阻尼系数和外加扭矩等。然后,根据这些参数计算出传递矩阵,并使用传递矩阵法求出解析解。最后,根据解析解计算出扭转角。
需要注意的是,这个程序只是一个基本的示例,实际应用中可能需要根据具体情况进行修改和优化。