Python 板


LINE

N body simulation 自己也有点兴趣所以试着看了一下 import numpy as np #Numpy是科学计算常用的套件,运算量大时会比原生list快 particle = np.random.standard_normal((nParticles, 3)) #三维阵列, 存放 nParticles个球的x,y,z座标 #ex. nParticles = 100 #这边是用随机产生的座标 particlev = np.zeros_like(particle) #存放每个球的速度的阵列,形状跟particle一样 #初始值为零 def nbody_np(particle, particlev): # NumPy arrays as input ''' 从初始条件开始,计算每个球受的重力 时间轴每次增加0.01,总共跑五次 ''' t0 = time.time(); nSteps = 5; dt = 0.01 particle_result = np.zeros(nParticles,3,nSteps+1) #原本我贴的例子只告诉你花多少时间算 #这里用particle_result记录每个时间点的球的位置 particle_log = np.copy(particle) #从起始点开始 for step in range(1, nSteps + 1, 1): Fp = np.zeros((nParticles, 3)) #每个球受的重力 for i in range(nParticles): dp = particle - particle[i] #计算第i个球到每个球之间的距离 #也就是dx, dy, dz drSquared = np.sum(dp ** 2, axis=1) #(dx)^2 + (dy)^2 +(dz)^2 h = drSquared * np.sqrt(drSquared) #原程式错了 #不是相加而是相乘 #数值运算有解析度问题 #这边设定重力不能小於10^-10 #至於重力为什麽是1/(r^(3/2)), #是假设重力常数跟所有球的质量都是1 #3/2次方的原因是来自向量方程式 drPowerN32 = 1. / np.maximum(h, 1E-10) Fp += -(dp.T * drPowerN32).T #最後每个球会受到所有球的重力所以要相加 particlev += dt * Fp #球的速度在t+dt後就是原速度+dt*重力 particle_log += particlev * dt particle_result[:,:,step] += particle_log #球的新位置是 原位置+球的速度*dt return particle_result python科学运算原则上能向量化就向量化 除非是用c之类的编译语言写否则尽量避免for loop会比较好 向量化之後应该没有帮每个球取名的必要吧? 至於Nbody simulation如果球不是一个质点的情况 你的运动方程式会更复杂喔,不知道高中物理现在是有没有这麽难 XD ※ 引述《lefan (红气球雯雯)》之铭言: : 谢谢Neisseria大介绍globals函数让我解决了帮球自动取名的问题 : 但又碰上新的问题, : 我希望在每一个回圈中,自动把每个球的位置塞入新的list中, : 好让我可以每个回圈重新计算球与球间的距离。 : 若不用回圈我会这样写: : b_new_pos_list = [] : b_new_pos_list.append(ball_0.pos) : b_new_pos_list.append(ball_1.pos) : b_new_pos_list.append(ball_2.pos) : b_new_pos_list.append(ball_3.pos) : 相同的,我想利用for loop自动把每个球的位置放入b_new_pos_list中 : 因此我尝试这样写。 : b_new_pos_list=[] : for N in range(0,4,1): : b_new_pos_list.append(ball_N.pos) : 但当然还是不行,因为系统没办法自动判断出ball_N.pos指的就是 : ball_0~3.pos : 再次感谢。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 130.203.95.180
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1453395445.A.6EB.html
1F:推 alen332l: 推 01/22 09:25
2F:推 hsnusonic: 推 01/22 09:54
3F:推 lefan: 感谢。 01/22 10:42







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP