概述
描述
花粉等悬浮在流体中的微粒都会做一个无规则的运动,这就是布朗运动。我们可以使用随机数来模拟这种运动。微粒的开始坐标为(0,0),随后随机选择运动方向和运动距离。假设当前坐标为(Xold,Yold),Xold在[-1,1]列表中随机选择出运动的方向Dx、在[1,2,3,4,5,6,7,8,9,10]列表中随机选择出水平移动的距离Hx,则Xnew=Xold+Dx*Hx。Yold坐标也一样,独立于Xold选择运动方向Dy和运动距离Vy,则有Ynew=Yold+Dy*Vy。这样微粒就会移动到新坐标(Xnew,Ynew)。
题目要求:
- 输入一个整数sd作为随机数的种子
- 模拟微粒五次无规则运动,将坐标依次存入列表,并打印列表(形如:[(0, 0), (2, 6), (7, -4), (17, 6), (24, -3), (15, -12)])
- 计算微粒5次布朗运动所形成的坐标的欧式距离之和(二维坐标(x1,y1)与(x2,y2)的欧式距离为sqrt((x1-x2)**2 +(y1-y2)**2))。结果保留两位小数输出。
输入格式
输入为一个整数,例如(-5)。
输出格式
输出为两行,第一行是微粒五次运动后的坐标值形成的列表,形如:[(0, 0), (2, 6), (7, -4), (17, 6), (24, -3), (15, -12)];第二行是五次运动的欧式距离之和(保留两位小数)。
输入输出示例
输入 | 输出 | |
示例 1 | 2 | [(0, 0), (2, 6), (7, -4), (17, 6), (24, -3), (15, -12)] 55.78 |
示例2 | -5 | [(0, 0), (-6, 6), (-5, 7), (-13, 15), (-3, 25), (4, 18)] 45.25 |
import random
import math
random.seed(int(input()))
tup1 = (0,0)
arr = list()
arr.append(tup1)
for i in range(5):
Xold = arr[i][0]
Dx = random.choice([1,-1])
Hx = random.choice([1,2,3,4,5,6,7,8,9,10])
Xnew = Xold + Dx * Hx
Yold = arr[i][1]
Dy = random.choice([1,-1])
Vy = random.choice([1,2,3,4,5,6,7,8,9,10])
Ynew = Yold + Dy * Vy
tup1 = (Xnew,Ynew)
arr.append(tup1)
print(arr)
sum = 0
for i in range(5):
temp = math.sqrt((arr[i][0] - arr[i+1][0])**2 + (arr[i][1] -arr[i+1][1])**2)
sum = sum + temp
print(round(sum,2))
最后
以上就是重要啤酒为你收集整理的模拟布朗运动的全部内容,希望文章能够帮你解决模拟布朗运动所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复