留言板 留言板

N-Body仿真中的[WSC19]模式:三体问题分析

摘要

在这个项目中,我通过使用不同的统计方法、可视化算法和特征提取技术来分析n体仿真输出及其模式。使用n体模拟随机生成技术,可以生成5000个不同输出的样本。通过执行特征提取过程,在二维特征空间图上绘制了一些关于模拟的不同结果的有趣可视化。利用质量中心分布和双体质量可视化技术得出了其他结论。

介绍

在物理学和天文学中,N体模拟是对粒子动力学系统的模拟,通常受到物理力(例如重力)的影响。目前,计算能力足以处理某些类别的N-Body模拟,其中包含少量实体,且延迟时间较短。对于天文单位和千兆年等现实单位的情况,计算机无法处理其复杂性。为了避免这种计算复杂性的困难,诸如“平方反比”之类的系统相对论地将公制单位和无单位量在数学上等价。

这里有一些随机n体模拟的例子,它们具有非常混乱的行为,并且很容易在初始状态上稍作调整就改变输出。

CreateRandomBody[]:=块[{},<|“Mass”->RandomReal[{0.01,0.99}],“Position”->RandomReal[{-1,1},2],“Velocity”->RandomReal[{-1,1},2]|>]CreateRandomPivot[]:=块[{},<|“质量”->1,“位置”->{0,0},“速度”->RandomReal[{-0.25,0.25},2]|>]NBodyPlot[data_]:=参数图[Evaluate[data[All,“Position”,t]],{t,0,data[“SimulationTime”]},纵横比->自动,轴->假,PlotStyle->{厚度[0.025],厚度[0.025m],厚度+0.025]}]表[光栅化[NBody图[NBody仿真[“平方反比”,{CreateRandomPivot[],CreateRandomBody[],CreateRandomBody[]},10]],ImageSize->Small],8]//安静

要执行相同的可视化和过程,请下载本文中提供的笔记本。笔记本包含您需要的所有数据集和文件。

启发式数据=“…”;NBParameters=“…”;NBDPaths=“…”;

“启发式数据”列表包含由“NBodyHeuristics”函数生成的启发式结果列表(请参阅“数据生成过程”),“NBParameters”列表包含初始参数列表,“NBDPath”列表包含实体的最终路径列表。每个列表都是统一的,每个列表包含5000个元素。

NBParametersDataset=数据集@NBParameters;{NBPBodyA,NBPBody B,NBPBondy C}=表格[NBParametersDataset[[All,t]],{t,1,3}];{allDoubleFalse、allSingleFalse、pivotDiverged、allContained、allDivergent}=表[Join@@Position[HeuristicData,t],{t{{假,真,假}|{假}}];{所有双错误点、所有单错误点、全部包含点、所有分叉点、数据透视分叉点}=表[Thread[{Normal[NBPBodyB[x,“Mass”]],Normal[NBABodyC[x,”Mass“]}],{x,{allDoubleFalse,allSingleFalse,all Contained,allDivergent,pivotDiverged}}];ListPlot[{allContainedPoints,allDivergentPoints,pivotDivergedPoints,All DoubleFalsePoints},PlotStyle->{RGBColor[0.9,0.9,0.9],{PointSize[0.01],Blue},{PointSize[001],Red},}PointSize[20.01],Orange},AspectRatio->Automatic,PlotTheme->“Detailed”,PlotLegends->{“All Bodyes Contained”,“All bodyes Diverged”,“Pivot Divered”,“两个不同的物体”},PlotLabel->“最轻物体的质量和稳定性”,LabelStyle->{16,GrayLevel[0]},ImageSize->{500,500}]

通过这张图,我们可以直观地看到,较轻物体的质量与系统的稳定性之间存在关联。最轻的物体在模拟中最稳定,这意味着它们不会从系统中“弹射”出来。

现在,让我们用$\frac{\sum_{i=j}^nm_ix_i}{\sum_{i=j}^nm_i}$计算质心之间的距离,$m_i$是单个物体的质量,$x_i$作为空间中的位置。

centerOfMass=线程〔{Normal@NBParametersDataset〔〔All,All,“Mass”〕,NBDPaths}〕;centerOfMasses=表格[(centerOf Mass[[n]][[1]]*centerOf2 Mass[[n]][2]]//总计)/总计[centerOF Mass[[2]]],{n,1,Length[NBParametersDataset]}];distancesCOM=映射线程[表[EuclideanDistance[#1,#2[[n]]],{n,1,3}]&,{centerOfMasses,NBDPaths}];直方图[Flatten@distancesCOM,PlotLabel->“重心到物体的距离之和[Unitless]”,LabelStyle->{16,GrayLevel[0]},PlotTheme->“详细”,ColorFunction->Function[{height},RGBColor[0,1*height,1],ImageSize->{750500}]

这个直方图清楚地表明,从质量中心到物体的距离有一条对数曲线,事实上对数正态分布[]可以使用匹配分布查找分布[].

并且,通过用对数标度绘制直方图,我们获得了正态分布。

直方图[扁平@距离COM,{“日志”,20},绘图标签->“从质心到物体的距离总和\[对数缩放,无单位]“,标签样式->{16,灰度[0]},PlotTheme->“详细”,ColorFunction->函数[{height},RGB颜色[0,1*height,1]],图像大小->{850,500}]

一个有趣的可视化是FeatureSpacePlot所有模拟的光栅化。这将给我们一个有趣的视角来观察模拟的更大画面。

rasterizeList=Rasterize[NBodyPlot[NBodySimulation[“Inverse Square”,#,10]]//@Normal[RandomSample[NBParametersDataset,250]]//安静;FeatureSpacePlot[rasterizeList[[1;;200]],LabelingSize->30,ImageSize->{800,800},PlotLabel->“250个三体仿真的特征空间”,LabelStyle->{16,GrayLevel[0]}]

基于此功能空间图[],我们可以推断出,大多数混沌模拟都位于边界上,而发散模拟总是在物体发散的一侧。

结论

在本项目中,我的结论是,由于n体模拟的混沌特性,神经网络和聚类分类等算法的适用性很难实现,此类系统的波动性不允许进行分类。在图形和分布中可以实现一些推断,例如在较低质量下的稳定性,以及系统的接近质心。

一个有趣的研究扩展是对更大的系统进行同样的分析,例如五体问题。在一个更健壮的计算机中,可以进行更多的模拟,并且可以设想更清晰的相关性和曲线。

[可选]如何生成数据

为了生成本项目中使用的所有数据,可以执行这些单元格,请注意,本节是一个附录,没有必要,因为本日志中已经包含了5000个示例数据。

batchPath=笔记本目录[]{generatedData,heuristicData,nbdpathsData,bodyData,bodisData}=表格[{},{5}];NBodyHeuristics[positionsList_,maxSpace_:8]:=块[{emptyList={},车身A=位置列表[1],车身B=位置列表[2],车身C=位置列表[[3]]},如果[maxSpace>=bodyA[[1]>=-maxSpace\[And]maxSpace>=bodyA[[2]>=-maxSpace,emptyList=联接[emptyList,{True}],emptyList=联接[空列表,{False}]];如果[maxSpace>=bodyB[[1]]>=-maxSpace\[And]maxSpace>=bodyB[2]]>=-maxSpace,emptyList=联接[emptyList,{True}],emptyList=联接[空列表,{False}]];如果[maxSpace>=bodyC[[1]]>=-maxSpace\[And]maxSpace>=bodyC[2]]>=-maxSpace,emptyList=联接[emptyList,{True}],emptyList=联接[空列表,{False}]];返回[emptyList];]GenerateNBodySimulations[nsimulations_,time_]:=执行[AbortProtect[PrintTemporary[Style[“\[DoubleRightArrow]”,15,橙色],“”,“生成”,动态[Length[heuristic Data]],“”,样式[“NBodySimulations”,橙色],“”,进度指示器[外观->“渗透”,图像大小->{60,20}]];bodyData={CreateRandomPivot[],CreateRandomBody[],创建RandomBody[]};generatedData=NBodySimulation[“平方反比”,bodyData,time]//安静;heuristicData=Append[heuristic Data,NBodyHeuristics[generatedData[All,“Position”,generatedData[“SimulationTime”]]];nbdpathsData=Append[nbdpatssData,generatedData[All,“Position”,generated Data[“SimulationTime”]]];bodysData=附加[bodysData,bodyData];清除所有[generatedData,bodyData],刺激];GenerateNBodySimulations公司[100,10]导出[batchPath<>“HeuristicData_”<>ToString[batchCounter]<>“.mx”,HeuristicData];导出[batchPath<>“NBDPaths_”<>ToString[batchCounter]<>“.mx”,nbdpathsData];导出[batchPath<>“NBParameters_”<>ToString[batchCounter]<>“.mx”,bodysData];{generatedData,heuristicData,nbdpathsData,bodyData,bodisData}=表格[{},{5}];batchCounter++;
附件:
发布人:卡布罗
2个答复
排序依据:

在此处输入图像描述-恭喜你!这篇文章现在在我们的员工挑选以您的个人资料上的徽章区分的列特色贡献者! 谢谢你,继续努力,并考虑为笔记本存档!

发布人:编辑委员会

真 的!那太酷了。

对此讨论的答复
可以使用标记语法.
回复预览
附件
删除
放弃

组摘要 组摘要