Как случайным образом выбрать элемент из списка, а затем использовать простую формулу для изменения этого значения (и делать это в цикле for)?

#python #physics

Вопрос:

Я выполняю задание по генерации частиц внутри коробки (двумерной). Теперь эти частицы должны двигаться внутри коробки, чтобы можно было рассчитать изменение энергии. Алгоритм должен просто изменять положение одной частицы за раз, а затем вычислять скорость. Таким образом, можно рассчитать кинетическую энергию. Может быть, проще просто включить описание алгоритма (Монте-Карло):

введите описание изображения здесь

Моя проблема или вопрос в том, что я хочу выбрать один из элементов в списке, изменить этот элемент/положение в соответствии с:

Способ перемещения
введите описание изображения здесь

Если я смогу это сделать, то скорость можно будет найти, взяв разницу в положении и разделив ее на время. Поэтому я хочу, чтобы цикл for проходил случайным образом по всем позициям и вычислял энергию. Теперь я могу рассчитать скорость только для одной и той же частицы. Вот мой код:

 import random import numpy as np import matplotlib.pyplot as plt  r_1=random.uniform(0,1) r_2=random.uniform(0,1)  N=20 LX=10 LY=10 a=1 b=0.5 dt=0.01 x=np.zeros(N) y=np.zeros(N) vx=np.zeros(N) vy=np.zeros(N)   for i in range(N):  x[i]=random.uniform(0,LX)  y[i]=random.uniform(0,LY)  l=random.choice(range(len(x)))  for l in range(N):  l=random.choice(range(len(x)))  x_initial=x[l]  #k=random.choice(range(len(y)))  x[l]=x[l] (r_1-0.5)*b  x_final=x[l]  vx[l]=(x_final-x_initial)/dt   print(vx)  

Комментарии:

1. random.choice выбирает случайный элемент из списка.

2. Я не понимаю, в чем твоя проблема? ваш алгоритм, похоже, делает то, что вы хотите

3. Я мог бы предложить вам использовать одну матрицу для положения x,y с формой Nx2 и одинаковыми скоростями (вы можете одновременно изменять xpos и ypo). Также я думаю, что вам нужно определить r_1,r_2 внутреннюю часть цикла for, чтобы она менялась при каждой частице.

4. Похоже, код делает то, о чем вы просите..

5. random.choice(range(len(x))) это просто более дорогой способ сказать random.randint(0,len(x)-1) .