我有两个循环,分别针对不同的x和y坐标运行,并且针对每个不同的(x,y)坐标,使用矩阵方法求解力1和力2的线性方程,即,如果Ax求A的逆=C。对于每个循环,它给出一个矩阵形式的答案,其中第一个元素是力1,第二个元素是力2。这是我的代码:
import numpy as np
from scipy import linalg
def Force():
Force1 = np.zeros((160,90))
Force2 = np.zeros((160,90))
for x in np.arange(0,16.1,0.1):
for y in np.arange(1,9.1,0.1):
l1 = np.hypot(x,y)
l2 = np.hypot(15-x,y)
A = np.array([[(x/l1),((x-15)/l2)],[(y/l1),(y/l2)]])
c = np.array([[0],[70*9.81]])
F = linalg.solve(A,c)
Force1[x,y] = F[0]
Force2[x,y] = F[1]
print("Force 1 = {} \nForce 2 = {}\n".format(F[0], F[1]))
因此在每个点(x,y)上求解矩阵[[Force 1],[Force 2]]。现在,我想将所有Force1(s)附加到Force1 [x,y]的列表中,并类似地添加到Forces2(s),以便可以这样做
plt.imshow[Force1]
plt.imshow[Force2]
绘制2个热图。我将如何去做?
答案 0 :(得分:0)
这解决了您的问题-您试图将其分配给float类型的Force1
和Force2
中的索引。我已经将for循环更改为用户enumerate
,并调整了分配,以便它分配了F[0][0]
和F[1][0]
。
import numpy as np
from scipy import linalg
def Force():
Force1 = np.zeros((160,90))
Force2 = np.zeros((160,90))
for i, x in enumerate(np.arange(0,16,0.1)):
for j, y in enumerate(np.arange(1,9,0.1)):
l1 = np.hypot(x,y)
l2 = np.hypot(15-x,y)
A = np.array([[(x/l1),((x-15)/l2)],[(y/l1),(y/l2)]])
c = np.array([[0],[70*9.81]])
F = linalg.solve(A,c)
Force1[i, j] = F[0][0]
Force2[i, j] = F[1][0]
# print("Force 1 = {} \nForce 2 = {}\n".format(F[0], F[1]))
plt.imshow(Force1)
plt.show()
plt.imshow(Force2)
plt.show()
Force()
生成的图是:
和