欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      天體的中三體問題(推薦5篇)

      時間:2019-05-14 19:41:49下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《天體的中三體問題》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《天體的中三體問題》。

      第一篇:天體的中三體問題

      天體中的三體問題

      韓博偉談

      三體問題算是經(jīng)典力學(xué)里面的天體力學(xué)的老難題了,從牛頓那個時候起就是物理學(xué)家和數(shù)學(xué)家的惡夢。

      先說一下什么叫三體。用物理語言來說,在一個慣性參考系中有N個質(zhì)點,求解這N個質(zhì)點的運動方程就是N體問題。參考系是慣性參考系,也就是說不受系統(tǒng)外的力的作用,所有的作用力都來自于體系內(nèi)的這N個質(zhì)點之間。在天體力學(xué)里面,我們通常就只考慮萬有引力。

      用數(shù)學(xué)語言來說,經(jīng)典力學(xué)的N體問題模型就是,在三維平直空間里有N個質(zhì)點,每個質(zhì)點的質(zhì)量都已知而且不會變化。在初始時刻,所有質(zhì)點的位置和速度都已知。每個質(zhì)點都只受到來自其它質(zhì)點的萬有引力,引力大小由牛頓的同距離平方成反比的公式描述。要求解的就是,任意一個時刻,某個質(zhì)點的位置。

      N=2,就是二體問題。N=3,也就是我們要說的三體問題了。

      N=2的情況,早在牛頓時候就已經(jīng)基本解決了。學(xué)過中學(xué)物理后,大家都會知道,兩個質(zhì)點在一個平面上繞著共同質(zhì)心作圓錐曲線運動,軌道可以是圓、橢圓、拋物線或者雙曲線。

      然而三體運動的情況就糟糕得多。攻克二體問題后,牛頓很自然地開始研究三體問題,結(jié)果也是十分自然的——頭痛難忍。牛頓自述對付這種頭痛的方法是:用布帶用力纏緊腦袋,直至發(fā)暈為止—雖則這個辦法治標(biāo)不治本而且沒多少創(chuàng)意,然而畢竟還是有效果的。

      其實,三體運動已經(jīng)是對物理實際簡化得很厲害了。比如說對質(zhì)點,自轉(zhuǎn)啦、形狀啦我們統(tǒng)統(tǒng)不用考慮。但是只要研究實際的地球運動,就已經(jīng)比質(zhì)點復(fù)雜得多。比如說,地球別說不是點,連球形都不是,粗略看來是個赤道上胖出來一圈的橢球體。于是,在月球引力下,地球的自轉(zhuǎn)軸方向就不固定,北極星也不會永遠(yuǎn)是那一顆。而考慮潮汐作用時,地球都不能看成是“硬”的了,地球自轉(zhuǎn)也因此越來越慢。

      然而即使是極其簡化了的三體問題,牛頓、拉格朗日、拉普拉斯、泊松、雅可比、龐加萊等等大師們?yōu)檫@個祭壇獻(xiàn)上了無數(shù)腦汁也未能將它攻克。

      當(dāng)然,努力不會完全白費的,許多有效的近似方法被鼓搗了出來。對于太陽系,攝動理論就是非常有效的解決問題的近似方法。而對于地月系統(tǒng),則可以先把地球和月球看作是二體系統(tǒng),再考慮太陽引力的影響?!霸铝晾@著地球轉(zhuǎn),地球繞著太陽轉(zhuǎn)”的理論計算已經(jīng)作得非常精確,上下幾千年的日食月食都能很好地預(yù)測。而對一顆受到行星引力干擾的彗星,人們也能算出一段時間內(nèi)很精確的軌道,比如天文學(xué)家可以提前幾年就預(yù)測出彗星撞木星。而且,太陽系的穩(wěn)定性也在很大程度上得到了證明,比如說大行星的軌道變化大體上是周期性的,不會始終單向變化下去直到行星系統(tǒng)解體。

      為了解三體問題,那就考慮再簡化些吧。認(rèn)為一個質(zhì)點的質(zhì)量非常小,從而它對其它兩個質(zhì)點的萬有引力可以忽略。這樣一來,三體問題就簡化成了“限制性三體問題”。實際上,這個簡化等于是先解一個二體問題,然后再加入一個質(zhì)量很小的質(zhì)點,再解這個質(zhì)點在二體體系中的運動方程。

      然而,即使這樣也還是太復(fù)雜了。于是,再作簡化,就得到了“平面限制性三體問題”,就是要求三個質(zhì)點都在同一個平面上。然而,即使是對這樣極度簡化的模型,也還是沒有解析通解,也就是得到一個普遍適用的公式是不可能的。

      對“平面限制性三體問題”再作簡化,認(rèn)為兩個大質(zhì)點作圓周運動,就是“平面圓型限制性三體問題”。1772年,拉格朗日在這種限制條件下找到了5個特解,也就是著名的拉格朗日點。比如下面這張圖上,木星和太陽連線上有L1,L2,L3三個拉格朗日點,而在木星軌道上則有L4,L5這兩個點,和太陽以及木星構(gòu)成等邊三角形。L1,L2,L3是不穩(wěn)定的,如果小質(zhì)點離開這三個點,就會越跑越遠(yuǎn)。L4,L5則是穩(wěn)定的。

      本來,拉格朗日點多少顯得有點象數(shù)學(xué)游戲,但是自然界證明,穩(wěn)定解在太陽系里確實存在實例。對于木星來說,L4和L5上各有一群小行星,就是著名的特洛伊群和希臘群小行星。

      從數(shù)學(xué)方法來說,解2體問題的方法是解微分方程組,通過求積分的方式可以圓滿解決,得到解析解。很自然的,物理學(xué)家和數(shù)學(xué)家們也用這種方法去對付三體問題。1772年,拉格朗日就已經(jīng)把三體問題的18個方程簡化成了只有6個。然而,進(jìn)步到此為止了。19世紀(jì)末期的研究更是給了數(shù)學(xué)家們一連串打擊。布倫斯(1887),龐加萊(1889)和潘勒斯(1898)年給出了一個比一個更嚴(yán)格的證明,堵死了求積分的許多途徑。1941年西格爾干脆證明了代數(shù)積分法的死刑,宣布找到足夠的代數(shù)積分是不可能的。當(dāng)然,三體問題的數(shù)學(xué)研究不是除了失敗外就一無所有,它還是帶來了許多新發(fā)現(xiàn),比如混沌理論就是從它的廢墟中誕生的。

      當(dāng)然,我們還只是談到了牛頓力學(xué)。如果考慮到廣義相對論的修正,那就更糟糕了,連二體問題都只有近似解。而且,廣義相對論的二體問題也不穩(wěn)定,由于發(fā)射引力波損失能量,兩個星體遲早會撞在一起,雖說要等的時間可能比宇宙壽命還長。

      在牛頓的經(jīng)典力學(xué)體系里面,對三體問題的簡化可以用下面這張圖大體表示一下(在這里把月球火箭的軌道計算作為一個三體運動的一個實際應(yīng)用的例子,實際上比三體運動還要復(fù)雜)

      二十世紀(jì)50年代后,數(shù)學(xué)家們多了一個新幫手:計算機(jī)。于是,兩個新辦法出來了,一個是用級數(shù)表示積分(簡單代數(shù)積分不指望了),另一個則干脆是使用數(shù)值方法求近似解。

      級數(shù)解在理論上獲得了很大成功,比如在限制性圓型三體問題中,已經(jīng)證明了所需要的積分是存在的(但是另一方面早就證明了用代數(shù)公式是不能表達(dá)的)。這些積分可以用冪級數(shù)表達(dá),而且證明了冪級數(shù)是收斂的。但是這些冪級數(shù)收斂得太慢了,比如對拉格朗日點,為了達(dá)到可以接受的精度,至少要取10^80000項!而整個宇宙中的粒子數(shù)也就10^80個的樣子。

      計算機(jī)的加盟使人們對三體問題不是那么無助了。雖然沒有代數(shù)公式,但用數(shù)值算法硬算的結(jié)果,精確性也不錯。比如,發(fā)射飛船去探測其他行星就是典型的三體問題,旅行者2號說去海王星就一定到得了。再比如,太陽系大行星4000萬年內(nèi)的運動也算了出來,至少往后這段時間,太陽系的行星系統(tǒng)還不至于散架。

      讓我們看看三體問題的大致現(xiàn)狀吧:

      1.目前的研究主要集中在限制性三體問題,因為比較簡化,而且有實用價值。2.對于限制性三體問題,通過級數(shù)法證明了解的存在性(這已經(jīng)是非常大的成果了)。而且,天體力學(xué)的定性分析和天文觀測(比如地球上繁衍了幾十億年的生命)都證明了限制性三體體系的穩(wěn)定解的存在性。

      3.用解決二體問題的方法,也就是代數(shù)積分的方法被確認(rèn)不可能解決三體問題。

      4.用計算機(jī)進(jìn)行較長期的三體問題的數(shù)值計算是成功的。

      5.三體問題的算法還大有可改進(jìn)之處。畢竟,10^80000項的計算是太過于可怕了。

      回到《三體》小說,有了“秦始皇”的“人計算機(jī)系統(tǒng)”,算個簡化的三體問題還是可以的。不過,如果是小說中那種三個太陽的質(zhì)量差不多,而且相互距離也差不多的情況,他們面對的三體問題就不能簡化為限制性三體問題,計算的難度要大很多。不過,用計算機(jī)算出比較短時間的預(yù)測應(yīng)該是可行的。畢竟,天氣預(yù)報不一定非得要知道明年今天的具體天氣,能比較準(zhǔn)確知道一周天氣就不錯了(通常我們還只聽聽明天是否下雨呢)。三體人知道是不是該“脫水”或者“浸泡”就已經(jīng)很有好處了。用觀測不斷修正預(yù)測,至少對小的“亂世代”不用害怕了。

      當(dāng)然,如果三體文明只是在I/II類文明的層次,不能通過移走恒星來釜底抽薪地解決三體問題。那么,“但重要的是改變世界”這句話就仍然是正確到了殘酷的地步,預(yù)測出“三星凌空”也無助于逃脫毀滅。

      到目前為止,我們一直在用紙、筆還有計算機(jī)討論三體問題,用的都是演繹法。但不要忘了,科學(xué)方法里還有另一件更重要的武器:歸納法。我們可以用觀察和實驗,看看實際中的三體會是什么樣子。

      由于在我們?nèi)粘5某叨壬?,萬有引力弱得可以忽略,只有到了天文尺度上,引力才顯出它的威力,比如地球把我們拉在地上不放。所以,在普通的實驗室里面實現(xiàn)三體系統(tǒng)是不行的。我們只能把視線轉(zhuǎn)向天空,去考察大自然為我們安排了什么樣的實例。

      當(dāng)然,象我們已經(jīng)看到的,在太陽系里,已經(jīng)充分表現(xiàn)了限制性三體問題是有穩(wěn)定解的。但是,就基本同量級的三體又如何呢?我們可以來看看恒星。

      銀河系里的恒星不下一千億顆,象太陽這樣獨居的恒星其實是少數(shù)。恒星們總的來說還是喜歡熱鬧的。雙星的數(shù)量非常多,而且很多都已經(jīng)是幾十億年的老伴侶了(比如下面要談到的南門二A/B),等于從實驗上證明了二體系統(tǒng)的穩(wěn)定性。

      而三合星也不少見,但是一般都是一對雙星再搭上一個遠(yuǎn)距離的單星。同樣,更多數(shù)量恒星組成的聚星,也多是由雙星和單星組合而成的。應(yīng)該說這也強(qiáng)烈地暗示了,大自然也認(rèn)為三體系統(tǒng)是不穩(wěn)定的。畢竟,銀河系里的三體并不是理想的三體系統(tǒng),一則恒星可以相撞而合并,二來,一旦一顆恒星被拋出太遠(yuǎn),它就可能脫離體系而主要由銀河系的整體引力而控制了。通過這兩種方式,三體系統(tǒng)就變成了穩(wěn)定的二體系統(tǒng)了。當(dāng)然,還有“四邊形聚星”這種系統(tǒng),恒星彼此質(zhì)量相近,距離也都差不多。最著名的一個例子就是獵戶座大星云M42中心的四邊形聚星(用5厘米左右的望遠(yuǎn)鏡,放大率50~100倍就可以分辨開)。值得注意的是,這些四邊形聚星都非常年輕,比如獵戶座四邊形聚星,年齡就只有幾百萬年,對于天文學(xué)來說,這完全是嬰兒期。沒有發(fā)現(xiàn)年老的四邊形聚星,說明大自然認(rèn)為這種構(gòu)型也不穩(wěn)定,總歸會瓦解掉。

      獵戶座大星云M42的中心區(qū),圖中央的4顆亮星就是獵戶座四邊形聚星

      有意思的是,N值再增大,比如N=100級別的疏散星團(tuán)或者N=10萬級別的球狀星團(tuán),又是非常穩(wěn)定的力學(xué)體系了,年齡超過幾十億年乃至百億年的這些星團(tuán)比比皆是。當(dāng)然,過于密集的結(jié)果就是碰撞很多,球狀星團(tuán)中央就有大量碰撞后合并而成的亮星。

      昴星團(tuán)(M45),年齡約5000萬年,算是相當(dāng)年輕的疏散星團(tuán),約有100顆成員星

      球狀星團(tuán)M13,年齡超過100億年,成員星約有30萬

      第二篇:天體社團(tuán)工作總結(jié)

      草坪五中天文組2012年工作總結(jié)

      2013年到來,再回顧2012年,天文組的工作又邁上了一個新的臺階。

      學(xué)期伊始,天文組的新社員招募工作就如火如荼地展開了,經(jīng)過報名,天文組共錄取了10余名新社員。雖然學(xué)校的場地設(shè)備有限,同時作為一個剛辦起來的社團(tuán),獨立地組織天文活動是比較困難的。因此,在2012年,我們主要以參與效實中學(xué)及天協(xié)的天文觀測活動和各類講座為主,以此培養(yǎng)社員們對天文的興趣,增長知識。

      2012年五中天文組參與的主要活動如下:

      2012年4月,我們天文組剛剛成立,完成了對學(xué)生的問卷調(diào)查,開辦了適合我們學(xué)生的天文課程。

      5月21日,天文組迎來了第一次天文觀測活動,日全食觀測活動。我們?nèi)M上下從知識儲備到觀測計劃都做了周密的準(zhǔn)備可是糟糕的天氣讓我們的一切工作都顯得的徒勞。

      2012年6月6日,這是我們期盼已久的金星凌日。雖然天公不太作美,但是由于社員們的不拋棄不放棄的努力下,終于完成了這次觀測,并由社員拍下了金星凌日的實況照片

      開學(xué)后,招收社員,召開社員大會。

      10月中旬,招收新社員,老社員學(xué)習(xí)望遠(yuǎn)鏡的使用

      12月,計劃觀測木星及木衛(wèi),M45,M31,M42,由于時間和天氣原因只觀測了木星及木衛(wèi)

      這一年的每一次活動都無不透露出活動主辦學(xué)校、單位的用心,講座、觀測、宣傳、聯(lián)誼,各種各樣的活動都能在天文組中百花齊放,社員們也在其中學(xué)習(xí)到了很多在課堂中學(xué)不到的知識和技能。特別要感謝天協(xié)的各位老師、專家,以及效實中學(xué)的夏炳老師、施毅社長、趙豪奇副社長和一些骨干社員,提供給了我們許多參加精彩活動的機(jī)會。也感謝其他兄弟學(xué)校天文組各位負(fù)責(zé)老師和社長,讓我們有機(jī)會共同提高,交流心得。

      當(dāng)然,天文組的進(jìn)步也離不開每一位社員的努力,在本學(xué)期中,很多同學(xué)都積極參與到各種活動中來,為天文組增添生機(jī)。

      在新的一年,我們也將立下更高的目標(biāo),并且朝著這一目標(biāo)不懈奮斗。相信在2013年,天文組會有更好的活動,更大的成功來回報所有支持、關(guān)心天文組成長的人。

      祝愿天文組的明天如星光般燦爛!

      草坪五中天文組

      2013年3月

      第三篇:天體物理論文

      黑洞

      一直以來我對于天體物理方面最感興趣的是黑洞理論。

      黑洞是根據(jù)廣義相對論所預(yù)言的,宇宙空間中存在的一種質(zhì)量相當(dāng)大的天體,它是由質(zhì)量足夠大的恒星在核聚變反應(yīng)的燃料耗盡而死亡后,發(fā)生引力坍縮而形成。因為它的質(zhì)量非常大,所以它的引力場也非常強(qiáng),以至于任何物質(zhì)和輻射都無法逃離它的吸引,甚至連光也無法逃離。所以光無法反射出來到達(dá)我們的眼睛,因此我們看到它總是黑洞洞的,人們才給它起了個名字叫黑洞。

      黑洞并不是像地球那樣實實在在的有固定形態(tài)的星球,而是一個幾乎空空如也的天區(qū)。它是宇宙中物質(zhì)密度最高的地方,地球如果變成黑洞,只有一顆黃豆那么大。黑洞中的物質(zhì)不是平均分布在這個天區(qū)的,而是集中在天區(qū)的中心。這些物質(zhì)具有極強(qiáng)的引力,任何物體只能在這個中心外圍游弋。一旦不慎越過邊界,就會被強(qiáng)大的引力拽向中心,最終化為粉末,落到黑洞中心。黑洞是看不見的,因此科學(xué)家們只能依靠它發(fā)出的輻射和對相鄰恒星的萬有引力作用來判定它的存在。黑洞周圍由于引力強(qiáng)大的因素,理論預(yù)期會發(fā)生時間場異常現(xiàn)象。

      根據(jù)黑洞的起源和形成過程可以把他分成3類:恒星級黑洞(主要是在大質(zhì)量恒星死亡時超新星爆發(fā)過程中形成的),超大質(zhì)量的黑洞(由于星系動力學(xué),如超大質(zhì)量或相對論性恒星集團(tuán)的塌縮,或者是星系并和等原因在星系中心形成的),原初黑洞(在宇宙的密度擾動或相變過程中所所形成某些極端條件下,會形成一系列質(zhì)量分布較廣的黑洞)。黑洞只有三個物理量可以測量到:質(zhì)量、電荷、角動量。也就是說:對于一個黑洞,一旦這三個物理量確定下來了,這個黑洞的特性也就唯一地確定了,這稱為黑洞的無毛定理。關(guān)于黑洞有力學(xué)四大定律:黑洞力學(xué)第零定律,被根斯坦-斯馬爾公式,黑動力學(xué)第二定律,黑動力學(xué)第三定律。

      美國斯坦福大學(xué)的天文學(xué)研究小組在遙遠(yuǎn)的宇宙中發(fā)現(xiàn)了到目前為止堪稱最龐大最古老的黑洞。其質(zhì)量是太陽質(zhì)量的100多億倍,位于大熊座星系中央,與地球的距離約為127億光年。據(jù)來自斯坦福大學(xué)的羅格-魯曼尼表示,科學(xué)家們初步確定這個黑洞的年齡約為127億歲,也就是說,它在“大爆炸”之后10億年 內(nèi)就已經(jīng)形成了。

      美國宇航局2010年11月15日發(fā)現(xiàn)地球附近有一個年僅30歲的黑洞,這也是人類科學(xué)史上發(fā)現(xiàn)的最年輕的黑洞。這個30歲的黑洞是距離地球約5000萬光年的M100星系中的超新星“SN1979C”的余燼。

      國際天文學(xué)家通過美國宇航局斯皮策太空望遠(yuǎn)鏡的一項最新觀測結(jié)果,在宇宙中某一狹窄區(qū)域范圍內(nèi),首次同時發(fā)現(xiàn)了多達(dá)21處卻一直深度隱藏著的宇宙“類星體”黑洞群。分的證據(jù)使人們相信,在浩瀚的宇宙中,的確充滿著各種各樣未被發(fā)的巨大引力源泉--“類星體”黑洞群體。

      第四篇:天體的造句

      【注音】: tian ti

      天體解釋

      【意思】:太陽、地球、月亮和其他恒星、行星、衛(wèi)星以及彗星、流星、宇宙塵、星云、星團(tuán)等的統(tǒng)稱。

      天體造句:

      1、除非你的物理學(xué)專業(yè)極端理論化,或者是天體物理,否則你通常是可以在工業(yè)界找到一個相關(guān)的職位的。

      2、它是為進(jìn)入火星和木星之間的小行星帶中環(huán)繞一個天體的軌道而進(jìn)行的第一次探索。

      3、他發(fā)的電子郵件會告知發(fā)現(xiàn)時該天體的坐標(biāo),以便其他天文學(xué)家可以跟蹤它。

      4、綽號“復(fù)仇者”或者“死亡之星”的未被發(fā)現(xiàn)的天體可能是一顆紅矮星或者褐矮星,甚至是更暗的物質(zhì),質(zhì)量幾倍于木星。

      5、星星和星云看起來只是斑點點,或者是小片的光,但它們確實是巨大的天體。

      6、如果所有的天體移動,那他們肯定因此隨著地球而動,也就是隨著我的煙頭而動。

      7、“本質(zhì)上,該天體幾乎都存在于我們的后院?!彼a充說道。

      8、雙重星系上方的雪茄形天體是星系群中的另一個成員。

      9、如果朝正確的方位觀測,靈敏的紅外望遠(yuǎn)鏡可以捕獲這樣的天體發(fā)出的輻射。

      10、這樣的觀點也許在今日看起來相當(dāng)幼稚,那是因為現(xiàn)代的時鐘可以對時間進(jìn)行精確的記錄,而天體卻不能。

      11、萊納特說找到這些天體越來越困難,因為它們的光線及其微弱,并且內(nèi)部擁有的恒星和氣體太少,從而使得它們不為人知。

      12、技術(shù)的進(jìn)步為天體物理學(xué)引入如此多的洞察,使得天文學(xué)成為依靠密集型計算機(jī)最多的自然科學(xué)之一。

      13、如今這個天體已經(jīng)不能再承載已經(jīng)推動社會發(fā)展200年的經(jīng)濟(jì)增長模式。

      14、這些齒可以像尺子一樣用來異常精確的測量激光器、原子、天體或其它物體發(fā)出的光的頻率。

      15、雖然月球上這種相互作用過程的長期效應(yīng)并不顯見,但是“相似的過程將在整個太陽系內(nèi)部無空氣、富含硅酸鹽的天體上發(fā)生?!彼@樣說道。

      16、該星系在無月夜的夜晚可由肉眼觀測到一個小光斑,它也是不借助望遠(yuǎn)鏡能被肉眼觀測的最遠(yuǎn)天體。

      17、中國在金融上等同于宇宙間那最令人恐懼的天體嗎?

      18、其次,引力的強(qiáng)度還取決于天體之間的距離。

      19、因此,研究任何位置的未知年齡的新生黑洞是不太可能的,尤其是臨近我們的?!氨举|(zhì)上,該天體幾乎都存在于我們的后院?!彼a充說道。

      20、根據(jù)月球形成的一種理論,在數(shù)十億年前,一顆火星大小的天體與年輕的地球發(fā)生了碰撞。

      21、最終,它們會損失掉所有冰,剩余的部分則變成與小行星類似的惰性易碎天體。

      22、這類富含碳的小行星屬于太陽系最古老的天體,上面可能有水和重要礦石,還可能提供有關(guān)地球生命分子起源的線索。

      23、這臺新望遠(yuǎn)鏡被其他四臺高功能設(shè)備環(huán)繞坐落于智利阿塔卡馬沙漠中塞羅帕瑞納山頂,這兒遠(yuǎn)離城市燈火,是觀測天體奇觀最理想的所在。

      24、水銀是液態(tài)金屬,水銀,行星,是肉眼能看到的運動最快的天體,火星,鐵,為什么火星是紅色的?

      25、暗物質(zhì)和暗能量,當(dāng)前天體物理學(xué)中許多未解之謎的源頭,將出現(xiàn)在很多發(fā)生在太空和外星的故事中。

      第五篇:三體問題的仿真與實現(xiàn)

      前 言

      1.1 論文的背景

      在太陽系內(nèi)的天體都可以近似看做球形,并且與他們之間的距離相比,他們的的大小就可以忽略不計,因而他們能被看做質(zhì)點。因此,可以用現(xiàn)代動力天文學(xué)的基礎(chǔ)理論來研究這個問題。這部分的天體力學(xué)以牛頓的萬有引力理論開始。從1687年的《數(shù)學(xué)原理》出版之時開始,證實牛頓的理論是否能夠獨立的提供一個完整的關(guān)于天體如何在太空中運動的認(rèn)識是非常重要的。沿著這個思路進(jìn)行研究,我們需要根據(jù)牛頓的萬有引力定律來確定彼此吸引的n體之間的相對運動。

      牛頓曾經(jīng)用幾何學(xué)原理解決了只存在相互引力作用的兩個球的運動這一兩體問題。在1710年,Johann Bernoulli證明,在兩體問題中,一個粒子相對于另外一個粒子的運動可以被描述為一個圓錐曲線。在1734年,Daniel Bernoulli因為他關(guān)于分析處理兩體問題的研究獲得了法國科學(xué)院獎。在1744年,這個問題被Euler完全的解決了。同時對多維問題的研究也已經(jīng)在進(jìn)行中。在需要關(guān)于月球運動知識的驅(qū)動下,研究人員研究了太陽,地球和月亮構(gòu)成的三體系統(tǒng),并且月球理論很快就成為了早期研究的問題。

      在經(jīng)典力學(xué),量子力學(xué)和天文學(xué)中,三體問題是一個出名的,還沒有解決的問題,它被Whittaker描述為在所有動力學(xué)問題中最出名的問題,Hilbert認(rèn)為它是一個完美數(shù)學(xué)問題的標(biāo)準(zhǔn)。天體物理中的三體問題可以簡單的被描述為:三個天體在他們之間的相互之間的萬有引力作用下,給出各個天體的初始條件,包括三個天體的質(zhì)量、初始位置和初始速度,確定它們的后續(xù)運動,包括位置和速度隨時間的變化。

      像許多數(shù)學(xué)問題一樣,簡單的問題聲明后面往往覆蓋了問題解決方法的復(fù)雜性。雖然一體和兩體的問題能夠以封閉的形式通過初等函數(shù)方式來解決,但是三體問題是一個復(fù)雜的線性問題,沒有相似的解決方法存在。探究三體問題的方式大抵能夠分為三類:第一類是分析方法,其基本原理是把天體的坐標(biāo)和速度展開為時間或其它小參數(shù)的級數(shù)形式的近似解析表達(dá)式,討論天體的坐標(biāo)和軌道要素隨時間的變化規(guī)律;第二類是定性方法,選用微分方程的定性理論來研究很長一段時間內(nèi)三體運動的宏觀運動規(guī)律和全局性質(zhì);第三類是數(shù)值方法,這是直接依據(jù)微分方程的計算方式得出天體在特定時刻的詳細(xì)位置和速度。這三類方法各有利弊。

      因為求解三體問題的困難在于它的不確定性和不可預(yù)測性,可以考慮計算機(jī)在迭代計算中的優(yōu)勢,選擇第三類方法,基于受力分析和經(jīng)典力學(xué),求其數(shù)值解。1.2 論文相關(guān)的國內(nèi)外動態(tài)及研究價值

      從三體問題被提出的300年間,人們只發(fā)現(xiàn)3族周期性特解。在十八和十九世紀(jì),幾乎所有著名的數(shù)學(xué)家們都曾試圖解決這個問題,但是問題的進(jìn)展不大。截止到目前為止,三體問題特解的族數(shù)被擴(kuò)充到了16族。與此同時,在失敗的嘗試中,微分方程的理論不斷地發(fā)展成為數(shù)學(xué)的一門更成熟的分支。

      作為一個能被簡單描述的問題,除了其內(nèi)在的吸引力,三體問題與太陽系統(tǒng)穩(wěn)定性有著密切的聯(lián)系,這使得對三體系統(tǒng)的研究成為潛在的解決太陽系統(tǒng)穩(wěn)定性問題的解決方案。多年來,人們對這個問題進(jìn)行了大量的研究,從1750年到20世紀(jì)初,關(guān)于這個問題有800多篇援引了許多杰出的數(shù)學(xué)家和天文學(xué)家成果的論文發(fā)表。因此,除了解決一個重要的難題,更重要的是在解決問題的過程當(dāng)中產(chǎn)生了好幾種嶄新的數(shù)學(xué)思想。這些數(shù)學(xué)理論的進(jìn)步已經(jīng)深入到不同的領(lǐng)域,包括近代動力學(xué)問題的理論。三體問題的研究加深了人們對天體運動的認(rèn)識,激勵了天體力學(xué)和數(shù)學(xué)物理的進(jìn)一步成長,尤其是對人們研究太空火箭軌道和雙星演變很有幫助。1.3 本文的研究內(nèi)容

      本文決定通過計算機(jī)的數(shù)值運算,利用經(jīng)典力學(xué)中的牛頓三大定律和萬有引力定律迭代求解天體運動中的三體問題。

      同時,本文利用MATLAB的GUI功能,設(shè)計出簡潔友好的界面,并且通過動畫的方法將天體的位置和速度在空間直角坐標(biāo)系上實時的表示出來,作出了天體物理實驗用計算機(jī)模擬來進(jìn)行的嘗試。1.4 本文的創(chuàng)新之處

      首先:通過理論與實踐相結(jié)合的方式生動的展示了原本靜態(tài)的文字概念。其次:通過MATLAB的GUI界面,可以讓用戶在不必了解程序內(nèi)部實現(xiàn)的情況下,給出三個天體的初始條件,包括三個天體的質(zhì)量、初始位置和初始速度,就可以知道隨著時間的推移其宏觀的位置和速度以及運動的宏觀規(guī)律和全局性質(zhì)。同時,還可以在不同的觀察角度了解它們的運動過程。模型假設(shè)

      1)忽略相對論效應(yīng)的影響;

      2)不考慮其它天體對系統(tǒng)的作用,所處宇宙空間是各向同性的; 3)忽略宇宙空間粒子、潮汐力的影響; 4)假設(shè)運動過程中沒有能量損失;

      5)將天體視為質(zhì)點,不考慮它們在運動的過程中彼此之間的相互碰撞; 模型建立

      3.1 具體時刻的狀態(tài)

      因為三個天體的位置和速度是隨時間變化的,現(xiàn)在取很短的時間間隔t,假定這段時間間隔內(nèi)系統(tǒng)參數(shù)沒有變化,則可以考慮從系統(tǒng)每一時刻的狀態(tài)計算后下一時刻的狀態(tài)。在每一時刻,每一個天體都有各自的位置與速度,三個天體總共有六個未知量,每兩個天體之間應(yīng)用萬有引力定律和牛頓第二定律可以列出兩個方程,總共六個方程,這六個方程組成的方程組足可以求解這六個未知量。如果分割的時間間隔無限小,則可以求出精確解,但是在現(xiàn)實中這是沒法完成的。因此,我們可以將時間分成許多小部分,用計算機(jī)迭代求解,得到隨時間變化的系統(tǒng)的各個參量和系統(tǒng)的末狀態(tài)。3.2 受力分析

      如圖3-1所示,每個天體都受到其他兩個天體的萬有引力作用。為方便計算,將天體1對天體2的作用,天體2對天體3的作用,天體3對天體1的作用分別按直角坐標(biāo)系分解為f12x,f12y,f12z,f23x,f23y,f23z,f31x,f31y,f31z。由于f12=f21,f23=f32,f31=f13,可以用式子右邊等效表示左邊。

      在萬有引力f12、f23、f31作用下,天體

      1、天體

      2、天體3的加速度分別為。

      圖3-1 三體問題受力分析

      3.3 運動規(guī)律及迭代方程

      一、萬有引力定律

      二、牛頓第二定律

      三、速度迭代

      四、位置迭代

      求解時還須將加速度a,速度迭代方程,位置迭代方程按直角坐標(biāo)系分解如附錄1。

      用計算機(jī)編程求解,即可得任意時刻三個天體的位置和速度。模型求解與系統(tǒng)仿真

      4.1 編碼與運行

      (1)系統(tǒng)所需的軟、硬件

      系統(tǒng)所用的硬件是普通的PC機(jī)。本程序的編碼和界面設(shè)計部分用MATLAB進(jìn)行開發(fā)。

      (2)三體問題的編碼

      1o三個天體各個參數(shù)的初始化部分。

      函數(shù)ThreeBodyProblem_OpeningFcn(hObject, eventdata, handles, varargin)是該程序的啟動函數(shù)。初始化各個天體參數(shù)的部分已在程序代碼中標(biāo)注: function ThreeBodyProblem_OpeningFcn(hObject, eventdata, handles, varargin)ThreeBodyProblem的創(chuàng)建函數(shù),此函數(shù)沒有返回值,詳情請參見OutputFcn hObject

      圖形句柄

      eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息 varargin

      ThreeBodyProblem 的啟動參數(shù)(詳情請參見 VARARGIN)

      初始化第一個天體的質(zhì)量,位置和速度

      handles.FirstBodyMData = 0;handles.FirstBodyXData = 0;handles.FirstBodyYData = 0;handles.FirstBodyZData = 0;handles.FirstBodyUData = 0;handles.FirstBodyVData = 0;handles.FirstBodyWData = 0;

      初始化第二個天體的質(zhì)量,位置和速度

      handles.SecondBodyMData = 0;handles.SecondBodyXData = 0;handles.SecondBodyYData = 0;handles.SecondBodyZData = 0;handles.SecondBodyUData = 0;handles.SecondBodyVData = 0;handles.SecondBodyWData = 0;

      初始化第三個天體的質(zhì)量,位置和速度

      handles.ThirdBodyMData = 0;handles.ThirdBodyXData = 0;handles.ThirdBodyYData = 0;handles.ThirdBodyZData = 0;handles.ThirdBodyUData = 0;handles.ThirdBodyVData = 0;handles.ThirdBodyWData = 0;

      handles.output = hObject;

      此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject, handles);

      默認(rèn)值按鈕的回調(diào)函數(shù),用于設(shè)置三個天體的默認(rèn)參數(shù)值,并且將設(shè)置的默認(rèn)參數(shù)值顯示到圖形界面上:

      function default_Callback(hObject, eventdata, handles)hObject

      default控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      在圖形界面的第一個天體的文本輸入框內(nèi)顯示默認(rèn)的輸入值,此輸入值為太陽的參數(shù)。

      set(handles.FirstBodyM,'String',19.89);set(handles.FirstBodyX,'String',0);set(handles.FirstBodyY,'String',0);set(handles.FirstBodyZ,'String',0);set(handles.FirstBodyU,'String',0);set(handles.FirstBodyV,'String',0);set(handles.FirstBodyW,'String',0);將太陽的參數(shù)保存為“GUI數(shù)據(jù)”形式,以便共享 handles.FirstBodyMData = 19.89*10^29;handles.FirstBodyXData = 0;handles.FirstBodyYData = 0;handles.FirstBodyZData = 0;handles.FirstBodyUData = 0;handles.FirstBodyVData = 0;handles.FirstBodyWData = 0;在圖形界面的第二個天體的文本輸入框內(nèi)顯示默認(rèn)的輸入值,此輸入值為地球的參數(shù)。

      set(handles.SecondBodyM,'String',59.742);set(handles.SecondBodyX,'String',14.960);set(handles.SecondBodyY,'String',0);set(handles.SecondBodyZ,'String',0);set(handles.SecondBodyU,'String',0);set(handles.SecondBodyV,'String',29.78);set(handles.SecondBodyW,'String',0);將地球的參數(shù)保存為“GUI數(shù)據(jù)”形式,以便共享 handles.SecondBodyMData = 59.742*10^23;handles.SecondBodyXData = 14.960*10^10;handles.SecondBodyYData = 0;handles.SecondBodyZData = 0;handles.SecondBodyUData = 0;handles.SecondBodyVData = 29.78*10^3;handles.SecondBodyWData = 0;在圖形界面的第三個天體的文本輸入框內(nèi)顯示默認(rèn)的輸入值,此輸入值為月球的參數(shù)。

      set(handles.ThirdBodyM,'String',0.7349);set(handles.ThirdBodyX,'String',14.9984);set(handles.ThirdBodyY,'String',0);set(handles.ThirdBodyZ,'String',0);set(handles.ThirdBodyU,'String',0);set(handles.ThirdBodyV,'String',33.7953);set(handles.ThirdBodyW,'String',0);

      將月球的參數(shù)保存為“GUI數(shù)據(jù)”形式,以便共享 handles.ThirdBodyMData = 0.7349*10^23;handles.ThirdBodyXData = 14.9984*10^10;handles.ThirdBodyYData = 0;handles.ThirdBodyZData = 0;handles.ThirdBodyUData = 0;handles.ThirdBodyVData = 33.7953*10^3;handles.ThirdBodyWData = 0;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      2o從文本輸入框中按順序輸入三個天體的各個參數(shù)。

      第一個天體的各個文本輸入框的回調(diào)函數(shù),用于獲得文本輸入框內(nèi)輸入的值,代碼的具體解釋已在程序中給出:

      function FirstBodyX_Callback(hObject, eventdata, handles)hObject

      FirstBodyX 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.FirstBodyXData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function FirstBodyX_CreateFcn(hObject, eventdata, handles)hObject

      FirstBodyX 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function FirstBodyY_Callback(hObject, eventdata, handles)hObject

      FirstBodyY控件的句柄(詳情請參見 GCBO)

      eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.FirstBodyYData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function FirstBodyY_CreateFcn(hObject, eventdata, handles)hObject

      FirstBodyY 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC和COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function FirstBodyZ_Callback(hObject, eventdata, handles)hObject

      FirstBodyZ控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.FirstBodyZData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function FirstBodyZ_CreateFcn(hObject, eventdata, handles)hObject

      FirstBodyZ 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function FirstBodyU_Callback(hObject, eventdata, handles)hObject

      控件的句柄(詳情請參見 GCBO)FirstBodyU eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.FirstBodyUData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function FirstBodyU_CreateFcn(hObject, eventdata, handles)設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function FirstBodyX_CreateFcn(hObject, eventdata, handles)hObject

      FirstBodyU 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function FirstBodyV_Callback(hObject, eventdata, handles)hObject

      FirstBodyV控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.FirstBodyVData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function FirstBodyV_CreateFcn(hObject, eventdata, handles)hObject

      FirstBodyV 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function FirstBodyW_Callback(hObject, eventdata, handles)hObject

      FirstBodyW控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.FirstBodyWData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function FirstBodyW_CreateFcn(hObject, eventdata, handles)hObject

      FirstBodyW 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function FirstBodyM_Callback(hObject, eventdata, handles)hObject

      FirstBodyM控件的句柄(詳情請參見 GCBO)

      eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.FirstBodyMData=str2double(tempData)*10^29;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function FirstBodyM_CreateFcn(hObject, eventdata, handles)hObject

      FirstBodyM 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      第二個天體文本輸入框的回調(diào)函數(shù),用于獲得文本輸入框內(nèi)輸入的值,代碼的具體解釋已在程序中給出:

      function SecondBodyX_Callback(hObject, eventdata, handles)hObject

      SecondBodyX控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.SecondBodyXData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function SecondBodyX_CreateFcn(hObject, eventdata, handles)hObject

      SecondBodyX控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC和COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function SecondBodyY_Callback(hObject, eventdata, handles)hObject

      SecondBodyY控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.SecondBodyYData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function SecondBodyY_CreateFcn(hObject, eventdata, handles)hObject

      SecondBodyY控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function SecondBodyU_Callback(hObject, eventdata, handles)hObject

      SecondBodyU控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.SecondBodyUData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function SecondBodyU_CreateFcn(hObject, eventdata, handles)hObject

      SecondBodyU控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function SecondBodyV_Callback(hObject, eventdata, handles)hObject

      SecondBodyV控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.SecondBodyVData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function SecondBodyV_CreateFcn(hObject, eventdata, handles)hObject

      SecondBodyV控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function SecondBodyZ_Callback(hObject, eventdata, handles)hObject

      SecondBodyZ 控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.SecondBodyZData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function SecondBodyZ_CreateFcn(hObject, eventdata, handles)hObject

      SecondBodyZ控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建 提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function SecondBodyW_Callback(hObject, eventdata, handles)hObject

      SecondBodyW控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.SecondBodyWData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function SecondBodyW_CreateFcn(hObject, eventdata, handles)hObject

      SecondBodyW控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function SecondBodyM_Callback(hObject, eventdata, handles)hObject

      SecondBodyM控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.SecondBodyMData=str2double(tempData)*10^23;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function SecondBodyM_CreateFcn(hObject, eventdata, handles)hObject

      SecondBodyM控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      第三個天體文本輸入框的回調(diào)函數(shù),用于獲得文本輸入框內(nèi)輸入的值,代碼的具體解釋已在程序中給出:

      function ThirdBodyX_Callback(hObject, eventdata, handles)hObject

      ThirdBodyX控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.ThirdBodyXData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function ThirdBodyX_CreateFcn(hObject, eventdata, handles)hObject

      ThirdBodyX控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function ThirdBodyY_Callback(hObject, eventdata, handles)hObject

      ThirdBodyY控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.ThirdBodyYData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function ThirdBodyY_CreateFcn(hObject, eventdata, handles)hObject

      ThirdBodyY控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function ThirdBodyZ_Callback(hObject, eventdata, handles)hObject

      ThirdBodyZ控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.ThirdBodyZData=str2double(tempData)*10^10;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function ThirdBodyZ_CreateFcn(hObject, eventdata, handles)hObject

      ThirdBodyZ控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function ThirdBodyU_Callback(hObject, eventdata, handles)hObject

      ThirdBodyU控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.ThirdBodyUData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function ThirdBodyU_CreateFcn(hObject, eventdata, handles)hObject

      ThirdBodyU控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function ThirdBodyV_Callback(hObject, eventdata, handles)hObject

      ThirdBodyV控件的句柄(詳情請參見 GCBO)

      eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.ThirdBodyVData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function ThirdBodyV_CreateFcn(hObject, eventdata, handles)hObject

      ThirdBodyV控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function ThirdBodyW_Callback(hObject, eventdata, handles)hObject

      ThirdBodyW控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.ThirdBodyWData=str2double(tempData)*10^3;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function ThirdBodyW_CreateFcn(hObject, eventdata, handles)hObject

      ThirdBodyW控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      function ThirdBodyM_Callback(hObject, eventdata, handles)hObject

      ThirdBodyM控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符 tempData=get(hObject,'String');將字符轉(zhuǎn)換為雙精度數(shù)

      handles.ThirdBodyMData=str2double(tempData)*10^23;此前指令更改了handles,必須靠guidata指令才能把更新了的handles加以保存,以供后續(xù)使用

      guidata(hObject,handles);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function ThirdBodyM_CreateFcn(hObject, eventdata, handles)hObject

      ThirdBodyM控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      3o開始計算三個天體的實時位置和速度

      使用三個天體的各個參數(shù)進(jìn)行迭代運算,同時畫出三個天體的運行動畫。這里由于坐標(biāo)值的數(shù)量級是1010,x,y,z坐標(biāo)軸的范圍為-100~100,所以在畫圖的時候,計算出來的各個坐標(biāo)值都要除以1010。如果其中一個天體的質(zhì)量為0,那么程序?qū)⒆鰞审w問題的運算:

      function OK_Callback(hObject, eventdata, handles)hObject

      OK控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      清除坐標(biāo)系原有的內(nèi)容 cla 獲得程序使用者輸入的小球質(zhì)量、剛開始小球的位置與速度,設(shè)置萬有引力常量默認(rèn)值以及程序的運動時間 g = 6.63*10^-11;獲得輸入框中第一個天體的各個參數(shù)

      m1 = handles.FirstBodyMData;x1 = handles.FirstBodyXData;y1 = handles.FirstBodyYData;z1 = handles.FirstBodyZData;u1 = handles.FirstBodyUData;v1 = handles.FirstBodyVData;w1 = handles.FirstBodyWData;獲得輸入框中第二個天體的各個參數(shù)

      m2 = handles.SecondBodyMData;x2 = handles.SecondBodyXData;y2 = handles.SecondBodyYData;z2 = handles.SecondBodyZData;u2 = handles.SecondBodyUData;v2 = handles.SecondBodyVData;w2 = handles.SecondBodyWData;獲得輸入框中第三個天體的各個參數(shù)

      m3 = handles.ThirdBodyMData;x3 = handles.ThirdBodyXData;y3 = handles.ThirdBodyYData;z3 = handles.ThirdBodyZData;u3 = handles.ThirdBodyUData;v3 = handles.ThirdBodyVData;w3 = handles.ThirdBodyWData;

      控制迭代時間 time = 100000;

      加網(wǎng)格線 grid on

      坐標(biāo)軸顯示的空間范圍

      axis([-100 100-100 100-100 100])

      當(dāng)m1,m2,m3其中有一個為0時,程序做兩體運動。否則,程序做三體運動 if m3 == 0 && m1 ~= 0 && m2 ~=0 設(shè)置天體顏色、點型、大小等參數(shù),每次循環(huán)都重新設(shè)置整個畫面 h=line('Color',[1 0 0],'Marker','.','MarkerSize',50,'erasemode','normal');i=line('Color',[0 0 1],'Marker','.','MarkerSize',40,'erasemode','normal');

      以0.1的時間步長迭代,用k來控制迭代進(jìn)行的次數(shù) for k=0:0.1:time 設(shè)置步長 t=100000;萬有引力定律

      f12=g*m1*m2/(sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2))^3*[x1-x2,y1-y2,z1-z2];

      以下為對x軸方向的計算 牛頓第二定律 ax1=-f12(1)/m1;ax2=f12(1)/m2;坐標(biāo)值迭代

      x1=x1+u1*t+1/2*ax1*t^2;x2=x2+u2*t+1/2*ax2*t^2;速度值迭代 u1=u1+ax1*t;u2=u2+ax2*t;

      以下為對y軸方向的計算 ay1=-f12(2)/m1;ay2=f12(2)/m2;

      y1=y1+v1*t+1/2*ay1*t^2;y2=y2+v2*t+1/2*ay2*t^2;

      v1=v1+ay1*t;v2=v2+ay2*t;

      以下為對z軸方向的計算 az1=-f12(3)/m1;az2=f12(3)/m2;

      z1=z1+w1*t+1/2*az1*t^2;z2=z2+w2*t+1/2*az2*t^2;

      w1=w1+az1*t;w2=w2+az2*t;

      重置兩個小球的位置

      set(h,'xdata',x1/10^10,'ydata',y1/10^10,'zdata',z1/10^10);set(i,'xdata',x2/10^10,'ydata',y2/10^10,'zdata',z2/10^10);

      刷新畫面 drawnow

      控制速度 pause(0.01)end elseif m1 == 0 && m3 ~= 0 && m2 ~=0 設(shè)置天體顏色、點型、大小等參數(shù),每次循環(huán)都重新設(shè)置整個畫面 i=line('Color',[0 0 1],'Marker','.','MarkerSize',40,'erasemode','normal');l=line('Color',[0 1 0],'Marker','.','MarkerSize',40,'erasemode','normal');

      以0.1的時間步長迭代,用k來控制迭代進(jìn)行的次數(shù) for k=0:0.1:time 設(shè)置步長 t=100000;萬有引力定律

      f23=g*m2*m3/(sqrt((x2-x3)^2+(y2-y3)^2+(z2-z3)^2))^3*[x2-x3,y2-y3,z2-z3];

      以下為對x軸方向的計算 牛頓第二定律 ax2=-f23(1)/m2;ax3=f23(1)/m3;坐標(biāo)值迭代

      x2=x2+u2*t+1/2*ax2*t^2;x3=x3+u3*t+1/2*ax3*t^2;速度值迭代 u2=u2+ax2*t;u3=u3+ax3*t;

      以下為對y軸方向的計算 ay2=-f23(2)/m2;ay3=f23(2)/m3;

      y2=y2+v2*t+1/2*ay2*t^2;y3=y3+v3*t+1/2*ay3*t^2;

      v2=v2+ay2*t;v3=v3+ay3*t;

      以下為對z軸方向的計算 az2=-f23(3)/m2;az3=f23(3)/m3;

      z2=z2+w2*t+1/2*az2*t^2;z3=z3+w3*t+1/2*az3*t^2;

      w2=w2+az2*t;w3=w3+az3*t;

      重置三個小球的位置

      set(i,'xdata',x2/10^10,'ydata',y2/10^10,'zdata',z2/10^10);set(l,'xdata',x3/10^10,'ydata',y3/10^10,'zdata',z3/10^10);

      刷新畫面 drawnow

      控制速度 pause(0.01)end elseif m2 == 0 && m3 ~= 0 && m1 ~=0 設(shè)置天體顏色、點型、大小等參數(shù),每次循環(huán)都重新設(shè)置整個畫面 h=line('Color',[1 0 0],'Marker','.','MarkerSize',50,'erasemode','normal');l=line('Color',[0 1 0],'Marker','.','MarkerSize',40,'erasemode','normal');

      以0.1的時間步長迭代,用k來控制迭代進(jìn)行的次數(shù) for k=0:0.1:time 設(shè)置步長 t=100000;萬有引力定律

      f31=g*m3*m1/(sqrt((x3-x1)^2+(y3-y1)^2+(z3-z1)^2))^3*[x3-x1,y3-y1,z3-z1];

      以下為對x軸方向的計算 牛頓第二定律 ax1=+f31(1)/m1;ax3=-f31(1)/m3;坐標(biāo)值迭代

      x1=x1+u1*t+1/2*ax1*t^2;x3=x3+u3*t+1/2*ax3*t^2;速度值迭代 u1=u1+ax1*t;u3=u3+ax3*t;

      以下為對y軸方向的計算 ay1=+f31(2)/m1;ay3=-f31(2)/m3;

      y1=y1+v1*t+1/2*ay1*t^2;y3=y3+v3*t+1/2*ay3*t^2;

      v1=v1+ay1*t;v3=v3+ay3*t;

      以下為對z軸方向的計算 az1=+f31(3)/m1;az3=-f31(3)/m3;

      z1=z1+w1*t+1/2*az1*t^2;z3=z3+w3*t+1/2*az3*t^2;

      w1=w1+az1*t;w3=w3+az3*t;

      重置三個小球的位置

      set(h,'xdata',x1/10^10,'ydata',y1/10^10,'zdata',z1/10^10);set(l,'xdata',x3/10^10,'ydata',y3/10^10,'zdata',z3/10^10);

      刷新畫面 drawnow

      控制速度 pause(0.01)end else

      設(shè)置天體顏色、點型、大小等參數(shù),每次循環(huán)都重新設(shè)置整個畫面 h=line('Color',[1 0 0],'Marker','.','MarkerSize',50,'erasemode','normal');i=line('Color',[0 0 1],'Marker','.','MarkerSize',40,'erasemode','normal');l=line('Color',[0 1 0],'Marker','.','MarkerSize',40,'erasemode','normal');

      以0.1的時間步長迭代,用k來控制迭代進(jìn)行的次數(shù) for k=0:0.1:time 設(shè)置步長 t=100000;萬有引力定律

      f12=g*m1*m2/(sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2))^3*[x1-x2,y1-y2,z1-z2];

      f23=g*m2*m3/(sqrt((x2-x3)^2+(y2-y3)^2+(z2-z3)^2))^3*[x2-x3,y2-y3,z2-z3];

      f31=g*m3*m1/(sqrt((x3-x1)^2+(y3-y1)^2+(z3-z1)^2))^3*[x3-x1,y3-y1,z3-z1];

      以下為對x軸方向的計算 牛頓第二定律

      ax1=(-f12(1)+f31(1))/m1;ax2=(f12(1)-f23(1))/m2;ax3=(f23(1)-f31(1))/m3;坐標(biāo)值迭代

      x1=x1+u1*t+1/2*ax1*t^2;x2=x2+u2*t+1/2*ax2*t^2;x3=x3+u3*t+1/2*ax3*t^2;速度值迭代 u1=u1+ax1*t;u2=u2+ax2*t;u3=u3+ax3*t;

      以下為對y軸方向的計算 ay1=(-f12(2)+f31(2))/m1;ay2=(f12(2)-f23(2))/m2;ay3=(f23(2)-f31(2))/m3;

      y1=y1+v1*t+1/2*ay1*t^2;y2=y2+v2*t+1/2*ay2*t^2;y3=y3+v3*t+1/2*ay3*t^2;

      v1=v1+ay1*t;v2=v2+ay2*t;v3=v3+ay3*t;

      以下為對z軸方向的計算 az1=(-f12(3)+f31(3))/m1;az2=(f12(3)-f23(3))/m2;az3=(f23(3)-f31(3))/m3;

      z1=z1+w1*t+1/2*az1*t^2;z2=z2+w2*t+1/2*az2*t^2;z3=z3+w3*t+1/2*az3*t^2;

      w1=w1+az1*t;w2=w2+az2*t;w3=w3+az3*t;

      重置三個小球的位置

      set(h,'xdata',x1/10^10,'ydata',y1/10^10,'zdata',z1/10^10);set(i,'xdata',x2/10^10,'ydata',y2/10^10,'zdata',z2/10^10);set(l,'xdata',x3/10^10,'ydata',y3/10^10,'zdata',z3/10^10);

      刷新畫面 drawnow

      控制速度 pause(0.01)end end

      4o關(guān)閉按鈕的回調(diào)函數(shù),用來結(jié)束程序,關(guān)閉圖形界面

      function Close_Callback(hObject, eventdata, handles)hObject

      Close控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      清除清空當(dāng)前畫圖窗口,以方便畫新的圖形 clf;關(guān)閉界面 close;

      5o改變觀察者的視角,可以從各個角度觀察三體的運行狀態(tài)

      用于控制方向角的滑鍵的回調(diào)函數(shù),用于同步方位角文本輸入框中顯示的數(shù)值,同時改變觀察者的觀察方位角:

      function azSlider_Callback(hObject, eventdata, handles)hObject

      azSlider控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前滑鍵的值 az=get(hObject,'Value');將字符轉(zhuǎn)換為雙精度數(shù)

      el=str2double(get(handles.elEditText,'String'));改變方位角輸入文本框的顯示數(shù)值,此數(shù)值為當(dāng)前滑鍵所代表的值 set(handles.azEditText,'String',num2str(az));改變觀察視角 view([az,el]);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function azSlider_CreateFcn(hObject, eventdata, handles)hObject

      azSlider控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 滑塊控件通常有一個淺灰色的背景

      if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor',[.9.9.9]);end

      用于控制方位角的文本輸入框的回調(diào)函數(shù),用于同步方位角滑鍵的值,同時改變觀察者的方位角:

      function azEditText_Callback(hObject, eventdata, handles)hObject

      azEditText控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符。同時,將字符轉(zhuǎn)換為雙精度數(shù) az=str2double(get(hObject,'String'));改變方位角滑鍵的值 set(handles.azSlider,'Value',az);獲得當(dāng)前的仰角

      el=str2double(get(handles.elEditText,'String'));改變觀察視角 view([az,el]);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function azEditText_CreateFcn(hObject, eventdata, handles)hObject

      azEditText控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      用于控制仰角的滑鍵的回調(diào)函數(shù),用于同步仰角文本輸入框中顯示的數(shù)值,同時改變觀察者的仰角:

      function elSlider_Callback(hObject, eventdata, handles)hObject

      elSlider控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前滑鍵的值 el=get(hObject,'Value');將字符轉(zhuǎn)換為雙精度數(shù)

      az=str2double(get(handles.azEditText,'String'));改變仰角輸入文本框的顯示數(shù)值,此數(shù)值為當(dāng)前滑鍵所代表的值 set(handles.elEditText,'String',num2str(el));改變觀察視角 view([az,el]);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼

      function elSlider_CreateFcn(hObject, eventdata, handles)hObject

      elSlider控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 滑塊控件通常有一個淺灰色的背景

      if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor',[.9.9.9]);end

      用于控制仰角的文本輸入框的回調(diào)函數(shù),用于同步仰角滑鍵的值,同時改變觀察者仰角:

      function elEditText_Callback(hObject, eventdata, handles)hObject

      elEditText控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      獲得當(dāng)前輸入框的輸入字符。同時,將字符轉(zhuǎn)換為雙精度數(shù) el=str2double(get(hObject,'String'));改變仰角滑鍵的值

      set(handles.elSlider,'Value',el);獲得當(dāng)前的方位角

      az=str2double(get(handles.azEditText,'String'));改變觀察視角 view([az,el]);

      設(shè)置完所有屬性后,在對象的創(chuàng)建過程中執(zhí)行以下代碼 function elEditText_CreateFcn(hObject, eventdata, handles)hObject

      elEditText控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,它會在調(diào)用完所有的CreateFcn函數(shù)后創(chuàng)建

      提示: 可編輯文本框控件通常在窗口上有一個白色的背景,更多詳情請參見ISPC 和 COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

      set(hObject,'BackgroundColor','white');end

      用于恢復(fù)默認(rèn)方位角和仰角的默認(rèn)值按鈕的回調(diào)函數(shù),用于將方位角恢復(fù)為默認(rèn)值-37.50,仰角恢復(fù)為默認(rèn)值300,同時更新方位角滑鍵的值,方位角文本輸入框顯示的值,仰角滑鍵的值,仰角文本輸入框顯示的值: function ViewDefault_Callback(hObject, eventdata, handles)hObject

      ViewDefault控件的句柄(詳情請參見 GCBO)eventdata

      保留在MATLAB里面的參數(shù),它的作用是方便后面的程序使用 handles

      GUI界面的句柄,可以通過它獲取整個界面的信息(詳情請參見GUIDATA)

      設(shè)置方位角滑鍵的數(shù)值為方位角的默認(rèn)值 set(handles.azSlider,'Value',-37.5);設(shè)置方位角文本框中顯示的數(shù)值為方位角的默認(rèn)值 set(handles.azEditText,'String',-37.5);設(shè)置仰角滑鍵的數(shù)值為仰角的默認(rèn)值 set(handles.elSlider,'Value',30);設(shè)置仰角文本框中顯示的數(shù)值為仰角的默認(rèn)值 set(handles.elEditText,'String',30);改變觀察視角 view([-37.5,30]);4.2 基于MATLAB的三體問題的運行成果

      程序的初始圖形界面如圖4-1,在圖形界面右端文本輸入框可以依次輸入程序運行所需的各個參數(shù)值,包括三個天體的質(zhì)量,初始位置和初始速度。默認(rèn)的參數(shù)值為:m1為太陽的質(zhì)量,m2為地球的質(zhì)量,m3為月球質(zhì)量,x2的值為日地的平均距離,v2為地球繞太陽公轉(zhuǎn)的平均線速度值,x3的值為日月的平均距離,v3為月球相對于太陽的平均線速度值。同時,文本輸入框內(nèi)標(biāo)注了所輸入數(shù)值的數(shù)量級。比如:當(dāng)你在m1文本輸入框內(nèi)輸入19.89,那么程序中實際使用到的數(shù)值是19.89 1029。

      圖4-1 輸入?yún)?shù)

      點擊“使用默認(rèn)值”按鈕,如圖4-2,界面三個天體文本輸入框內(nèi)顯示三個天體各個參數(shù)的默認(rèn)值。

      圖4-2 輸入默認(rèn)值

      單擊“開始”按鈕,程序開始讀取文本輸入框中程序使用者輸入的各個參數(shù)(如果不作變動的話,程序使用默認(rèn)的參數(shù)值),按照萬有引力和牛頓第二定律公式進(jìn)行迭代計算,確定每經(jīng)過一個時間步長t時,三個天體的實時位置和速度,并且在坐標(biāo)系中即時顯示,。如圖4-3,我們就可以看到三個天體運動的動畫(在某些情況下,天體會運動到坐標(biāo)軸外邊去)。

      圖4-3 顯示動畫

      當(dāng)程序的使用者改變?nèi)齻€天體的初始位置和速度是,便可以得到各種不同的運行結(jié)果。

      如圖4-4,在控制視角儀表板中點擊方位角和仰角滑鍵可以改變觀察者的觀測點。同時,在滑鍵右邊的文本輸入框內(nèi),可以實時顯示當(dāng)前的方位角與仰角。在方位角和仰角的文本輸入框內(nèi)輸入方位角和仰角也可以改變觀察者的觀察位置,并且在文本框內(nèi)輸入的數(shù)值可以實時的同步到滑鍵上,改變滑鍵的位置。

      圖4-4 改變觀察視角

      結(jié) 論

      本論文先從研究三體問題的理論知識和背景入手,通過查閱文獻(xiàn)和在互聯(lián)網(wǎng)上搜索關(guān)于三體問題的相關(guān)資料,了解到了三體問題相關(guān)國內(nèi)外的最新動態(tài)。

      在論文中,詳細(xì)介紹了什么是三體問題,三體問題的背景以及解決三體問題所面臨的難題。論文除了對三體問題的基本概念的研究,還設(shè)計了MATLAB程序,用三體問題的數(shù)值解法,作出了三體問題的模擬動畫。通過MATLAB設(shè)計的GUI界面,可以使使用者在不必考慮程序內(nèi)部實現(xiàn)的情況下,給出三個天體的初始條件,包括三個天體的初始位置和初始速度,模擬三個天體的運動情況。

      在書寫論文和編譯程序的過程中,我學(xué)到了很多東西,培養(yǎng)了我分析研究事情嚴(yán)謹(jǐn)?shù)膽B(tài)度和創(chuàng)新精神,增加了我的對程序開發(fā)的動手能力,也減少了對于新知識新領(lǐng)域的學(xué)習(xí)的恐懼感,非常有利于我現(xiàn)在的學(xué)習(xí)和工作。

      參考文獻(xiàn)

      [1] A treatise on the analytical dynamics of particles and rigid bodies, 4th edition, E.T Whittaker, Cambridge University Press(1937).[2]李銀山.三體問題綜述[D].遼陽職業(yè)技術(shù)學(xué)院.111000;

      [3] 李明濤,鄭建華,于錫崢等.受攝三體問題研究[J].中國空間科學(xué)技術(shù):2008,6:14108;

      [5] 楊遠(yuǎn)玲,聶清香,吳曉梅等.N體問題的幾種數(shù)值算法比較[J].計算物理:2005,23(5):599-602;

      [6] Mauri Valtonen,Hannu Karttunen.The Three-Body Problem[M].America:Cambridge University Press.2006;

      [7] 李立康, 於崇華, 朱政華.微分方程數(shù)值解法[M].上海: 復(fù)旦大學(xué)出版社, 1999; [8] 彭芳麟, 管靖, 胡靜, 盧圣治.MATLAB 編程應(yīng)用, 理論力學(xué)計算機(jī)模擬[M].北京: 清華大學(xué)出版社, 2002;

      [9] 易照華.天體力學(xué)基礎(chǔ)[J].南京: 南京大學(xué)出版社, 1993 , 39–44;

      [10] 黃元義.平面圓型限制性三體問題的運動方程[D].宜賓師專學(xué)報(自然科學(xué)版), 2(1995);

      [11] 易照華, 李廣宇, Gerhard HEINZEL,等.共軌限制性三體問題及其應(yīng)用[J].中國科學(xué): 物理學(xué) 力學(xué) 天文學(xué), 2010, 40: 121 – 127;

      下載天體的中三體問題(推薦5篇)word格式文檔
      下載天體的中三體問題(推薦5篇).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        哥白尼與“天體運行論”

        哥白尼與《天體運行論》 記得小時候,在小學(xué)自然課本上學(xué)到,太陽系有九大行星(現(xiàn)在應(yīng)該是八大行星了),九大行星都圍繞著太陽進(jìn)行運轉(zhuǎn)。我們理所當(dāng)然地認(rèn)為這是正確的。但是如果回......

        從地球到宇宙-宇宙天體比大小

        從地球到宇宙,宇宙天體比大小 宇宙間有許許多多的天體,每個天體的尺寸也是特別懸殊的,今天就讓我們給這些天體比比個頭兒,看看誰大誰小~ ARE YOU READY?系上你的安全帶,宇宙之旅開......

        高一物理《天體運動》教學(xué)反思5篇

        高一物理《天體運動》教學(xué)反思 高一物理《天體運動》教學(xué)反思天體運動這章實際上是前面一章勻速圓周運動的延續(xù)。將地面上物體的運動規(guī)律拓展到太空當(dāng)中的歌行星之間,它們遵......

        奇妙的天體物理中心作文400字5篇

        奇妙的天體物理中心作文400字 我們來到廣州大學(xué)“天體物理中心”,剛一下車----咦?怎么似曾相識? 我?guī)е蓡柾白撸瑏淼揭黄盏?,扭頭一看,那是什么?----對面一棟樓的頂部有一個蒙......

        《滿足孩子們對天體知識的渴求》教案設(shè)計

        目標(biāo):1.對白天、黑夜交替的現(xiàn)象與原因感興趣。2.交流有關(guān)地球、太陽轉(zhuǎn)動的知識。準(zhǔn)備:地球儀、手電;白天先生、黑夜小姐活動過程:(一) 地球與地球儀1. 討論地球儀。這是什么?與地球......

        如何用FTP訪問高能物理與相關(guān)學(xué)科數(shù)據(jù)庫中高能天體物理數(shù)據(jù)子庫

        如何建立VPN用戶環(huán)境 虛擬專用網(wǎng)絡(luò)(VPN,Virtual Private Network)是對通過共享或公共網(wǎng)絡(luò)并使用封裝、加密和身份驗證進(jìn)行鏈接的公司網(wǎng)絡(luò)的一種擴(kuò)展。實際上,這意味著遠(yuǎn)程用戶可......

        中國航天器首次實現(xiàn)地外天體軟著陸-中國航天報社-中國航天科技集團(tuán)

        中國航天器首次實現(xiàn)地外天體軟著陸 江雪瑩版號 : 1 版名 : 頭版 日期 : 20131216 引題 : 嫦娥落月宮 五星耀虹灣 期號 : 2528 副題 : 探月工程嫦娥三號任務(wù)取得圓滿成功 標(biāo)......

        人教版《行星的運動》教案。各科學(xué)家研究天體過程介紹。大全

        億庫教育網(wǎng)http://004km.cn 百萬教學(xué)資源免費下載 §6--1行星的運動 課時計劃:2節(jié) 累計課時: 授課時間: 月 日 授課類型:講授課 知識目標(biāo) 通過學(xué)習(xí)物理學(xué)史的知識,使......