File:3bodyproblem.gif
頁面內容不支援其他語言。
3bodyproblem.gif (780 × 246 像素,檔案大小:1.56 MB,MIME 類型:image/gif、循環、201 畫格)
摘要
描述3bodyproblem.gif |
English: A system of 3 bodies interacting gravitationally is (famously) chaotic. A system of 3 bodies interacting elastically isn't. Time in this animations is increasing from top right to down left along the diagonal, to show the evolution of the two systems. |
日期 | |
來源 | https://twitter.com/j_bertolotti/status/1044947721696808961 |
作者 | Jacopo Bertolotti |
授權許可 (重用此檔案) |
https://twitter.com/j_bertolotti/status/1030470604418428929 |
Mathematica 11.0 code
(*Staring positions in a triangle*) x10 = -1; y10 = -1; x20 = 1; y20 = -1; x30 = 1; y30 = 1; (*Initial total momentum is zero, so the center of mass does not \ drift away*) vx10 = 0.2; vy10 = 0; vx20 = -0.1; vy20 = 0; vx30 = 0; vy30 = -0.1; (*max time the system evolves (in arbitrary units)*) T = 40; (*All three bodies have the same mass*) m1 = 1; m2 = 1; m3 = 1; (*Setting up of the equations copied from \ http://demonstrations.wolfram.com/PlanarThreeBodyProblem/ There are more elegant and compact ways of doing this, but I wasn't \ interested in optimizing the code.*) nds = NDSolve[ {x1'[t] == vx1[t], y1'[t] == vy1[t], x2'[t] == vx2[t], y2'[t] == vy2[t], x3'[t] == vx3[t], y3'[t] == vy3[t], m1 vx1'[t] == -(( m1 m2 (x1[t] - x2[t]))/((x1[t] - x2[t])^2 + (y1[t] - y2[t])^2)^(3/2)) - ( m1 m3 (x1[t] - x3[t]))/((x1[t] - x3[t])^2 + (y1[t] - y3[t])^2)^( 3/2), m1 vy1'[t] == -(( m1 m2 (y1[t] - y2[t]))/((x1[t] - x2[t])^2 + (y1[t] - y2[t])^2)^(3/2)) - ( m1 m3 (y1[t] - y3[t]))/((x1[t] - x3[t])^2 + (y1[t] - y3[t])^2)^( 3/2), m2 vx2'[t] == ( m1 m2 (x1[t] - x2[t]))/((x1[t] - x2[t])^2 + (y1[t] - y2[t])^2)^( 3/2) - (m2 m3 (x2[t] - x3[t]))/((x2[t] - x3[t])^2 + (y2[t] - y3[t])^2)^(3/2), m2 vy2'[t] == ( m1 m2 (y1[t] - y2[t]))/((x1[t] - x2[t])^2 + (y1[t] - y2[t])^2)^( 3/2) - ( m2 m3 (y2[t] - y3[t]))/((x2[t] - x3[t])^2 + (y2[t] - y3[t])^2)^( 3/2), m3 vx3'[t] == ( m1 m3 (x1[t] - x3[t]))/((x1[t] - x3[t])^2 + (y1[t] - y3[t])^2)^( 3/2) + (m2 m3 (x2[t] - x3[t]))/((x2[t] - x3[t])^2 + (y2[t] - y3[t])^2)^(3/2), m3 vy3'[t] == ( m1 m3 (y1[t] - y3[t]))/((x1[t] - x3[t])^2 + (y1[t] - y3[t])^2)^( 3/2) + (m2 m3 (y2[t] - y3[t]))/((x2[t] - x3[t])^2 + (y2[t] - y3[t])^2)^(3/2), x1[0] == x10, y1[0] == y10, x2[0] == x20, y2[0] == y20, x3[0] == x30, y3[0] == y30, vx1[0] == vx10, vy1[0] == vy10, vx2[0] == vx20, vy2[0] == vy20, vx3[0] == vx30, vy3[0] == vy30}, {x1, x2, x3, y1, y2, y3, vx1, vx2, vx3, vy1, vy2, vy3}, {t, 0, T}]; funsToPlot = {{x1[t], y1[t]}, {x2[t], y2[t]}, {x3[t], y3[t]}} /. nds[[1]]; evo = Table[funsToPlot /. {t -> j}, {t, 0, T, 0.01}]; dim = Dimensions[evo][[1]]; (*For the elastic force case I used a Verlet integration, as this \ case is numerically very stable.*) np = 3; k0 = 1; (*Same initial condition as the gravitational case*) pos = {{x10, y10}, {x20, y20}, {x30, y30}}; v0 = {{vx10, vy10}, {vx20, vy20}, {vx30, vy30}}; acc = Table[ Sum[If[j == k, 0, -k0 (pos[[j]] - pos[[k]])], {k, 1, np}], {j, 1, np}]; dt = 0.005; posold = pos; pos = posold + v0 dt + acc/2 dt^2; range = 5; evoe = Reap[Do[ acc = Table[Sum[ If[j == k, 0, -k0 (pos[[j]] - pos[[k]])], {k, 1, np}], {j, 1, np}]; posoldold = posold; posold = pos; pos = 2 posold - posoldold + acc dt^2; Sow[pos]; , dim];][[2, 1]]; plots = Table[ GraphicsRow[{ Show[ ListPlot[{evo[[All, 1]][[1 ;; j]], evo[[All, 2]][[1 ;; j]], evo[[All, 3]][[1 ;; j]]}, PlotStyle -> {Purple, Orange, Cyan}, PlotRange -> {{-range, range}, {-range, range}}, Joined -> True, Axes -> False, PlotLabel -> "Gravitational 3-body problem", LabelStyle -> {Bold, Black}], Graphics[{PointSize[0.03], Purple, Point[evo[[All, 1]][[j]]], Orange, Point[evo[[All, 2]][[j]]], Cyan, Point[evo[[All, 3]][[j]]]} , PlotRange -> {{-range, range}, {-range, range}}], ImageSize -> Medium ] , Show[ ListPlot[{evoe[[All, 1]][[1 ;; j]], evoe[[All, 2]][[1 ;; j]], evoe[[All, 3]][[1 ;; j]]}, PlotStyle -> {Purple, Orange, Cyan}, PlotRange -> {{-range, range}, {-range, range}}, Joined -> True, Axes -> False, PlotLabel -> "Elastic 3-body problem", LabelStyle -> {Bold, Black}], Graphics[{PointSize[0.03], Purple, Point[evoe[[All, 1]][[j]]], Orange, Point[evoe[[All, 2]][[j]]], Cyan, Point[evoe[[All, 3]][[j]]]} , PlotRange -> {{-range, range}, {-range, range}}], ImageSize -> Medium ] }], {j, 1, dim, 20}]; ListAnimate[plots]
授權條款
我,本作品的著作權持有者,決定用以下授權條款發佈本作品:
![]() ![]() |
此檔案在創用CC CC0 1.0 通用公有領域貢獻宣告之下分發。 |
在此宣告之下分發本作品者,已依據各國著作權法,在全世界放棄其對本作品所擁有的著作權及所有相關相似的法律權利,從而將本作品貢獻至公有領域。您可以複製、修改、分發和演示該作品,用於任何商業用途,所有這些都不需要請求授權。
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse |
![]() |
圖片審查員Ronhjones,確認本圖片於2018年10月19日可在下列站點找到並符合所選許可證:
https://twitter.com/j_bertolotti/status/1044947721696808961 |
說明
添加單行說明來描述出檔案所代表的內容
在此檔案描寫的項目
描繪內容
26 9 2018
image/gif
1,634,680 位元組
246 像素
780 像素
檔案歷史
點選日期/時間以檢視該時間的檔案版本。
日期/時間 | 縮圖 | 尺寸 | 使用者 | 備註 | |
---|---|---|---|---|---|
目前 | 2018年9月26日 (三) 14:03 | ![]() | 780 × 246(1.56 MB) | Berto | User created page with UploadWizard |
檔案用途
下列頁面有用到此檔案:
全域檔案使用狀況
以下其他 wiki 使用了這個檔案:
- en.wikipedia.org 的使用狀況
- eo.wikipedia.org 的使用狀況
- pt.wikipedia.org 的使用狀況
- ro.wikipedia.org 的使用狀況
- ru.wikipedia.org 的使用狀況
- uz.wikipedia.org 的使用狀況
- vi.wikipedia.org 的使用狀況
詮釋資料
此檔案中包含其他資訊,這些資訊可能是由數位相機或掃描器在建立或數位化過程中所新增的。若檔案自原始狀態已被修改,一些詳細資料可能無法完整反映出已修改的檔案。
GIF 檔案備註 | Created with the Wolfram Language : www.wolfram.com |
---|