#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)
.