Логическая ошибка в симуляции Python - PullRequest
0 голосов
/ 20 июня 2011

Предполагается, что эта программа на питоне имитирует объект, сбрасываемый с 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 ]

1 голос
/ 20 июня 2011

Ваши диапазоны неверны - posArray проиндексирован от 0 до 2 (поэтому posArray [0] = x, posArray [1] = y, posArray [2] = z).Кроме того, вы распечатываете матрицу каждый раз, так что там вы увидите много None.

Вы также помещаете 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)
1 голос
/ 20 июня 2011

Я не уверен, что у вас есть правильный вопрос?Как вы оцениваете неудачу?Это потому, что вы печатаете PositionMatrix каждый раз?

Похоже, ничего нет, потому что вы печатаете 3k None каждой итерации.Измените строку кода с:

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

Результат был

none count 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)
0 голосов
/ 20 июня 2011

Я не знаю, является ли это единственной или даже самой важной проблемой в вашем коде, но вы начинаете свои диапазоны с 1. Это означает, что вы никогда не просматриваете первый элемент массивов, индекс 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...