运行给出 如下错误:C:\Users\ym\anaconda3\python.exe D:\python\结构力学计算001.py Traceback (most recent call last): File "D:\python\结构力学计算001.py", line 25, in <module> f[i:i+2, 0] += q*h/2*np.array([[1], [1]]) ValueError: non-broadcastable output operand with shape (2,) doesn't match the broadcast shape (2,2)
时间: 2024-02-28 12:52:14 浏览: 26
这个错误说明你的代码中存在维度不匹配的问题。在第25行中,你尝试使用一个形状为(2, 1)的列向量与一个形状为(2, 2)的矩阵相乘,并将结果赋值给一个形状为(2,)的向量,导致维度不匹配。可以使用reshape()函数将列向量转换为形状为(2, 1)的矩阵,以保证维度匹配。修改后的代码如下:
```
import numpy as np
# 定义输入参数
L = 10.0 # 梁的长度
E = 200.0e9 # 弹性模量
I = 0.0001 # 惯性矩
q = 1000.0 # 均布荷载
# 定义离散节点
n = 10 # 离散节点数
x = np.linspace(0, L, n)
# 定义刚度矩阵和载荷向量
K = np.zeros((n, n))
f = np.zeros((n, 1))
# 计算刚度矩阵和载荷向量
for i in range(n-1):
h = x[i+1] - x[i]
k1 = E*I/h**3*np.array([[12, 6*h, -12, 6*h],
[6*h, 4*h**2, -6*h, 2*h**2],
[-12, -6*h, 12, -6*h],
[6*h, 2*h**2, -6*h, 4*h**2]])
K[i:i+4, i:i+4] += k1
f[i:i+2, 0] += q*h/2*np.array([[1], [1]]).reshape(2, 1) # 将列向量转换为矩阵
# 边界条件
K[0, 0] = 1.0
K[-1, -1] = 1.0
f[0, 0] = 0.0
# 解线性方程
u = np.linalg.solve(K, f)
# 计算内力和变形
N = np.zeros((n, 1))
M = np.zeros((n, 1))
theta = np.zeros((n, 1))
for i in range(n-1):
h = x[i+1] - x[i]
B = 1/h*np.array([-6/h, -3, 6/h, -3])
N[i:i+4, 0] = E*I*B.dot(u[i:i+4, 0])
M[i:i+4, 0] = E*I/h**2*np.array([12, 6*h, -12, 6*h]).dot(u[i:i+4, 0])
theta[i:i+4, 0] = 1/h*np.array([-6/h, -4, 6/h, -2]).dot(u[i:i+4, 0])
# 输出结果
print("Displacement:")
print(u)
print("Axial force:")
print(N)
print("Bending moment:")
print(M)
print("Deflection angle:")
print(theta)
```
运行后应该就不会出现这个错误了。