2021年認證杯SPSSPRO杯數學建模
B題 依巴谷星表中的畢星團
原題再現:
??依巴谷衛星(High Precision Parallax Collecting Satellite,縮寫為 Hip-parcos),全稱為“依巴谷高精度視差測量衛星”,是歐洲空間局發射的一顆天體測量衛星,用以精確測量恒星的視差和自行。通過視差可以推斷出恒星距地球的距離。
??畢星團位于金牛座,是離地球最近的疏散星團。其成員星在 300 個以上,有多顆肉眼可見的亮星。對畢星團的研究已經持續了許多年,包括確定它的距離,構建演化的模型,確認或排除成員,以及研究各成員星的特性等。依據依巴谷衛星的觀測數據,我們可以以相當高的精度測量相關各星的距離和運動情況,以對畢星團進行更加精確的研究。
??在依巴谷衛星的觀測數據中,畢星團中的亮星平均視差在 22 毫角秒左右,意味著其平均距離在 45 秒差距左右。我們在依巴谷星表中選擇了 2719顆恒星,選擇的標準是視差在 20–25 毫角秒之間(也就是距離地球在 40–50秒差距之間),其中包括了許多畢星團的成員。
??這個數據集有如下字段:
??1. HIP:星體編號
??2. Vmag:視星等
??3. RA:赤經(度)
??4. DE:赤緯(度)
??5. Plx:視差角(毫角秒),1000/Plx 即為目標離觀測點的距離(秒差距)
??6. pmRA:恒星自行的 RA 分量(毫角秒/年)
??7. pmDE:恒星自行的 DE 分量(毫角秒/年)
??8. e_Plx:Plx 的測量誤差(毫角秒)
??9. B-V:恒星的色指數
??第二階段問題:在1869年,RichardA.Proctor觀測到有一些距離畢星團相對較遠的恒星,在空間中有著與畢星團相似的運動。此后的天文學家將這些恒星的集合稱為畢宿星流。有人猜測這是一個更大的星團(被稱為畢宿超級星團)在部分解體以后的遺跡,也有觀點認為其中的大部分恒星來自不同的起源。
??請你建立合理的數學模型,在依巴谷衛星的數據集中尋找畢宿星流的成員星。由于畢宿星流在空間中相對分散,要求對其成員星進行謹慎的界定。并請參考其赫–羅圖來研究畢宿星流和畢星團的來源是否一致。
整體求解過程概述(摘要)
??星流的研究一直是恒星的演化和銀河系暗暈的形狀等領域的重要研究對象。成員星辨認的準確性直接影響星團和星流基本物理參數的估計。本文主要建立的DBSCAN優化算法,基于依巴谷衛星的觀測數據篩選出了畢宿星流成員星,并繪制了畢宿星流的赫羅圖來研究畢宿星流和畢星團的來源是否一致。
??針對問題一,需要在依巴谷衛星的數據集中尋找畢宿星流的成員星。首先,本文通過所提供的數據集中的e_Plx的測量誤差對Plx視差角的數據進行誤差處理,將不符合畢星團視差角的數據剔除。接著,通過恒星的自行的RA分量和DE分量建立二維坐標,運用DBSCAN 聚類算法初步篩選相似運動的恒星。接著,通過赤經、赤緯和視差角的相關數據并運用三維坐標轉換公式計算出篩出的恒星在三維空間下的位置分布,在三維空間下運用DBSCAN算法進行第二次聚類。其中DBSCAN算法中的兩個重要參數Eps和Minpts 通過對K-dist 圖的一維聚類得出。最終篩選出具有相似運動的恒星為470顆。然后,通過赤經、赤緯和視差角的相關數據,對初步篩選出的470顆恒星進行二次篩選。利用DBSCAN聚類算法,在470顆恒星中篩選出了308顆畢星團成員星。最后,將所篩選出的畢星團成員星從初步篩選出的470顆恒星中剔除,最終得到162顆畢宿星流成員星。
??為了保證本文篩選出的成員星的準確,本文通過計算所篩選出的畢星團成員星的平均視差數據與題干中所給的數據相比較,其誤差不超過 0.4%。所以本文所篩選的畢星團成員星準確度極高,則本文所建立的算法有一定的可行性,可以間接證明所篩選出的畢宿星流成員星是可靠的。
??針對問題二,需要參考赫羅圖來研究畢宿星流和畢星團的來源是否一致。首先,將問題一中篩選出來的候選成員星的視星等通過普森公式求出各個侯選星成員星的絕對星等。接著,通過色指數與溫度公式求出各個侯選星成員星的溫度。最后以絕對星等為縱坐標,恒星表面溫度為橫坐標繪制出畢星團成員星的赫羅圖和畢宿星流成員星的赫羅圖。最后,將繪制的兩張赫羅圖繪制在同一坐標系內,通過觀察發現兩張赫羅圖高度重合,所以可以證明畢宿星流和畢星團的來源一致。
??本文在最后對模型的優缺點進行分析。
模型假設:
??1、假設本題附件中所提供的觀測數據具有準確性和可靠性;
??2、假設中模型所涉及的成員星數量在短期內是不發生變化的,即不考慮星團內部成員的反復相撞造成星團成員緩慢地“蒸發”等非一般狀況的發生;
??3、恒星的自行或視向速度都滿足高斯分布;
??4、假設畢星團的每顆成員星的自行速度基本相同;
??5、假設分析數據時的計算誤差是可以忽略的,也包括小數的取舍。
問題分析
??本題要求我們探索畢宿星流成員星的辨認,并參考其赫羅圖來研究畢宿星流和畢星團的來源是否一致。由于恒星的位置分布不均,我們考慮對DBSCAN聚類算法進行改進。根據題干可知,畢宿星流為一些距離畢星團相對較遠的恒星,在空間中有著與畢星團相似的運動。本文首先考慮運用恒星自行的RA分量和恒星自行的DE分量將恒星樣本進行第一次聚類,得到運動相似的恒星。接著以畢星團為分布較為緊密的球狀星團為依據,用赤經、赤緯和視差角三個量將已進行初步篩選的的恒星進行再次篩選,所篩選出的為畢星團成員星。最終剩余的恒星則為畢宿星流成員星。再依據候選成員星的Vmag視星等和B-V色指數通過普森公式和B-V色指數與溫度的函數關系求出絕對星等與溫度。最后以絕對星等為縱坐標,溫度為橫坐標繪制赫羅圖。
論文縮略圖:
程序代碼:
function[IDX, isnoise]=DBSCAN(X, epsilon, MinPts) C=0; n=size(X, 1); IDX=zeros(n, 1); % 初始化全部為0,即全部為噪音點 D=pdist2(X, X); visited=false(n, 1); isnoise=false(n, 1); for i=1:n if ~visited(i) visited(i)=true; Neighbors=RegionQuery(i); if numel(Neighbors)<MinPts % X(i, :) is NOISE isnoise(i)=true; else C=C+1; ExpandCluster(i, Neighbors, C); end end end function ExpandCluster(i, Neighbors, C) IDX(i)=C; k=1; while true j=Neighbors(k); if ~visited(j) visited(j)=true; Neighbors2=RegionQuery(j); if numel(Neighbors2)>=MinPts Neighbors=[Neighbors Neighbors2]; %#ok end end if IDX(j)==0 IDX(j)=C; end k=k + 1; if k > numel(Neighbors) break; end end end function Neighbors=RegionQuery(i) Neighbors=find(D(i, :)<=epsilon); end end
function PlotClusterinResult(X, IDX) k=max(IDX); Colors=hsv(k); Legends= {
}
; for i=0:k Xi=X(IDX==i, :); if i~=0 Style='x'; MarkerSize=8; Color=Colors(i, :); Legends { end+1
}
=['Cluster #' num2str(i)]; else Style='o'; MarkerSize=6; Color=[0 0 0]; if ~isempty(Xi) Legends { end+1
}
='Noise'; end end if ~isempty(Xi) plot(Xi(:, 1), Xi(:, 2), Style, 'MarkerSize', MarkerSize, 'Color', Color); end hold on; end hold off; axis equal; grid on; legend(Legends); legend('Location', 'NorthEastOutside'); end
clc;
clear all pmra=xlsread(''); pmde=xlsread('); X=[pmra, pmde]; for t=1:1748 for k=1:1748 p(k, t)=sqrt((X(t, 1)-X(k, 1))^2+(X(t, 2)-X(k, 2))^2); end end P=sort(p);
%進行排序 A=1:1748;
figure('color', 'w'); subplot(4, 2, 1); plot(P(:, 1)/10, A, 'k');
ylabel('點數'); xlabel('距離'); title('1-dist') subplot(4, 2, 2); plot(P(:, 2)/10, A, 'k');
ylabel('點數'); xlabel('距離');
title('2-dist') subplot(4, 2, 3); plot(P(:, 3)/10, A, 'k');
ylabel('點數'); xlabel('距離');
title('3-dist') subplot(4, 2, 4); plot(P(:, 4)/10, A, 'k');
ylabel('點數'); xlabel('距離');
title('4-dist') subplot(4, 2, 5); plot(P(:, 5)/10, A, 'k');
ylabel('點數'); xlabel('距離');
title('5-dist') subplot(4, 2, 6); plot(P(:, 6)/10, A, 'k');
ylabel('點數'); xlabel('距離');
title('6-dist') subplot(4, 2, 7); plot(P(:, 7)/10, A, 'k');
ylabel('點數'); xlabel('距離');
title('7-dist') subplot(4, 2, 8); plot(P(:, 8)/10, A, 'k');
ylabel('點數'); xlabel('距離');