Python模拟中的逻辑错误

时间:2011-06-20 19:24:43

标签: python simulation

这个python程序应该模拟一个被50米建筑物抛出的物体,具有一些初始速度和恒定的重力加速度。 我使用数组来存储不同的组件,但是当我的计算时间时,我得到的矩阵并没有像它应该的那样。实际上,得到的矩阵在很大程度上仍然是空的。什么可能导致这个问题?

 x = z = vz = vy = ax = ay = time = 0.0
 y = 50 #Initial Height: 50 meters
 vx = 25 #Initial velocity in the x direction: 25 m/s
 az = -9.8 #Constant acceleration in the z direction: -9.8 m/s^2
 deltaTime = .000001

 #Initializes a matrix with 3 columns and 1000 rows for each column: Will hold the corresponding x,y,z coordinate of the particle at time t
 positionMatrix = [[None]*1000 for x in range(3)] 

 posArray = [x, y, z] 
 velArray = [vx, vy, vz] 
 accArray = [ax, ay, az]
 timeArray = [i*deltaTime for i in range(1000)]

 j = 1 #time increment

 for j in range (1,500): #j is the time increment
     for i in range (1,3): #i is each component (x, y, z)

         #x = x + vx*time + .5*ax*(time*time); #y = y + vy*time + .5*ay*(time*time); #z =    z + vz*time + .5*az*(time*time)
         positionMatrix[i][j] = posArray[i] + velArray[i] * timeArray[j] +  1/2*accArray[i] * timeArray[j] * timeArray[j]
         print(positionMatrix)

3 个答案:

答案 0 :(得分:1)

我不确定你有问题吗?你怎么判断失败?是因为你每次打印出positionMatrix吗?

看起来没什么,因为你每次迭代打印3k无。更改您的代码行:

print(positionMatrix)

print(positionMatrix[i][j])

我做了

cnt=0
for j in range (1,500): #j is the time increment
  for i in range (1,3): #i is each component (x, y, z)
    positionMatrix[i][j] = posArray[i] + velArray[i] * timeArray[j] +  1/2*accArray[i] * timeArray[j] * timeArray[j]
    if(positionMatrix[i][j] == None):
        cnt +=1
print 'none count' , cnt

结果是

  

无计数0

所以你可以看到每一行都被设置为某种东西。至少你正在处理的那个,从0开始你的范围(不要指定1)。

for j in range (500): #j is the time increment
  for i in range (3): #i is each component (x, y, z)

答案 1 :(得分:1)

你的范围是错误的 - posArray从0到2被索引(所以posArray [0] = x,posArray [1] = y,posArray [2] = z)。此外,您每次都打印出矩阵,因此您会看到很多无。

你还在数组中放了1000行,但之后只填充其中的500行。

您应该用以下代码替换最后一段代码:

 for j in range (1000):
     for i in range (3):
         positionMatrix[i][j] = posArray[i] + velArray[i] * timeArray[j] +  1/2*accArray[i] * timeArray[j] * timeArray[j]

 print(positionMatrix)

答案 2 :(得分:0)

我不知道这是你代码中唯一甚至是最重要的问题,但是你的范围是1开始。这意味着你永远不会遍历数组的第一个元素,索引为0。