地学概論

実習: HR図をつくる (その2)

[その1]も参照してほしい。

ひきつづき恒星のHR図をつくるのだが、今回は、手作業では困難な多数のデータを図示してみる。

その1の「参考教材例」でふれた

を参考にして、R で作図してみる。


データ: ヒッパルコス星表

ヒッパルコスは古代ギリシャの天文学者だが、 その名まえが、現代のヨーロッパ宇宙機構(ESA)による恒星位置測定用衛星の名まえに採用された。 ここでいう「ヒッパルコス星表」はその衛星を使った研究プロジェクトの成果である。

このデータは公開されていて、日本の国立天文台の次のところに(も)ある。

この hip_main.dat.gz というファイルは、gzip というソフトウェアで圧縮されていて、 GNUソフトウェアにふくまれる (Linuxではかならずある) gunzip で展開すると、 hip_main.dat というテキストファイルになる。

これを、Okamoto さんと Ueno さんにならって、awk [オーク] というプログラム言語で加工し、 Ueno さんが抽出したのとだいたい同じ、次の項目を抽出した。 【ただし、天球上の星のみかけの位置をあらわす 赤経・赤緯は、 Ueno さんは、天文観測の慣例にしたがった表現 (赤経は時間の時・分・秒、赤緯は角度の度・分・秒) によっているが、 hip_main.dat には角度の「度」単位の小数で表現された項目もあるので、わたしはそちらをえらんだ。】

スペクトル型も書きだしたほうがよいかもしれないが、今回は省略した。

hip_main.dat には、数値項目の値がはいっておらず、空白になっているところがある。 上記 2~8 のいずれかの項目が空白である行は、採用しない。

年周視差の値が負になっている行も、採用しない。

誤差の大きいデータを採用しないという観点から、 年周視差の相対誤差(「年周視差の標準誤差」を年周視差でわったもの) が 0.1 以上のものと、 色指数B-Vの誤差が 0.1 以上であるものは、採用しないことにした。 【この条件は、Okamoto さんにならったものだが、Okamoto さんは、色指数についても相対誤差による基準をつかっていた。 色指数は 0 にちかい値をとりうる量なので、相対誤差によるよりも標準誤差による基準がよいと判断した。】

その結果を CSV (コンマくぎりのテキストファイル) で書きだした。(ファイル名の「hip」のあとに下線文字「_」がある。)

1行が1つの星のデータをあらわし、20542 行ある。

実習にはつかわないが、抽出につかった awk プログラムもリンクしておく。 (Linux上で「awk -f extract.awk hip_main.dat > hip_work.csv」として実行した。)

残念ながら、星の名まえは、hip_main.dat に ふくまれていないので、hip_work.csv にもない。

つぎのサイトの「ヒッパルコス星表」のページの「恒星名データ」のところに、 3215個の星についての、ヒッパルコス星表 ID と 星座のメンバーという形の星の名 との対応表 hip_name.csv (文字コード UTF-8) がある。

つぎのサイトには、みかけの明るい星についての、星の固有名とヒッパルコス星表IDとの対照表がある。


数量の計算

絶対等級をもとめる

みかけの等級 vmag と 年周視差 prlx から計算する。標準的な公式はつぎのようなものである。

絶対等級 = みかけの等級 + 5 + 5 × log10(年周視差), (ただし、年周視差の単位は角度の秒)

R のプログラムでは次の形になる。 ここでは、年周視差が、角度のミリ秒の単位であたえられているので、1.0e3 がかかっている。 (あとにつけるプログラム例では、さらに、df$prlx が数値であることを明示するために as.numeric(df$prlx) としているが、 いまの hip_work.csv に対しては、そうしなくてもよい。)

amag <- df$vmag + 5 + 5*log10(df$prlx/1.0e3)

有効放射温度をもとめる

色指数(B-V)から有効放射温度を概算する。色指数が小さい(青い)ほど温度が高い。 ここでは、Wikipedia 英語版 [[Color index]] の記事に採用されている Ballesteros (2012) の式を採用する。

T = 4600 K × ( 1/(0.92×(B-V) + 1.7) + 1/(0.92×(B-V) + 0.62) )

Rのプログラムでは次の形になる。有効放射温度 (単位 K) を temp_eff とした。

temp_eff <- 4600 * ( 1/(0.92*df$bminusv+1.7) + 1/(0.92*df$bminuxv+0.62) )

文献

光度 (太陽を1とした相対値) をもとめる

絶対等級 amag から、つぎの式でもとめることができる。 ただし、太陽の絶対等級 4.83 をつかう。 0.4 は、等級が5だけふえると光度が100分の1になることを10の指数でまとめたもの。

光度(相対値) = 10 (4.83 - 絶対等級) × 0.4

Rのプログラムでは次の形になる。光度(相対値)を rel_luminos とした (relative luminosity の略)。

rel_luminos <- 10^((4.83-amag)*0.4)

半径 (太陽を1とした相対値) を概算する

放射輝度は有効放射温度の4乗に比例する。光度は放射輝度に表面積をかけたものである。 表面積は半径の2乗に比例する。 以上のことから、光度 (相対値) と有効放射温度から、半径 (相対値) を概算することができる。 ただし、太陽の有効放射温度 5800 K をつかう。平方根を便宜上「sqrt()」と書いておく。

半径(相対値) = ((太陽の有効放射温度/有効放射温度)2 × sqrt(光度(相対値))

Rのプログラムでは次の形になる。半径(相対値)を rel_radius とした。

rel_radius <- ((5800/temp_eff)^2) * sqrt(rel_luminos)


Rによる実習

プログラム例

プログラムの実行手順

教材準備のつごうで、Windows上での実行のばあいについて説明する。

[R言語を使ってみる]のページと基本的に同じなので、くわしくはそちらを見てほしい。

Linux上で実行するばあいに変更するところ

発展としてできそうなこと

なにかの条件にあてはまる星だけを表示すること。 手順の紹介を用意できなかったが、Rの機能に関心のある人は試みてほしい。

できればやりたいが、まだ用意できていないこと


表計算ソフトウェアによる作図

Excelなどの表計算ソフトウェアでも、「散布図」の機能をつかえば、H-R図をつくることができる。 過去にこころみた手順が [(2020年度春学期) : HR図をつくる (その2)]の ページにある。 ただし、そのときとは、入力データの構成を変えてしまったので、 今回の入力データでは作業手順をいくらか変える必要がある。 とくに、実視等級、有効放射温度などの計算をくみこむ必要がある。 Ueno さんは計算を Excel の中で VBA 言語によってやっているが、 わたしは、上記の R プログラムでしているのと同じ計算ならば、 計算式をセルに書きこむ形のほうがよいと思う。 (Ueno さんの色のきめかたを採用したばあいは、やや複雑になるので、プログラムを組む必要があるかもしれない。)

たとえば、hip_work.csv の内容をそのまま、ワークシートの A..H 列に読みこんだとしよう。 たぶん、つぎのようにすれば各変数の値を計算することができると思う。ただし、まだ動作確認していない。

I列で絶対等級を計算する。
セル「I1」に 「=D1 + 5 + 5*log10(E1/1.0e3)」を入れ、その内容をI列の各行にコピーする。 (log10という関数があることを前提としている。) コピーすると、参照されたセル番号「D1」「E1」は、その位置に応じて書きかわっていく。それを見こんだ計算式である。 以下同様。

J列で有効放射温度を概算する。
セル「J1」に「=4600 * ( 1/(0.92*G1+1.7) + 1/(0.92*G1+0.62) )」を入れ、その内容をJ列の各行にコピーする。

K列で光度 (太陽を1とした相対値) を計算する。
セル「K1」に「=10^((4.83-I1)*0.4)」を入れ、その内容をK列の各行にコピーする。 (「^」(山形)が べき乗の演算子であることを前提としている。)

L列で半径 (太陽を1とした相対値) を概算する。
セル「L1」に「=((5800/J1)^2) * sqrt(K1)」を入れ、その内容をK列の各行にコピーする。 (「^」(山形)が べき乗の演算子であること、sqrtという関数があることを前提としている。)


2021-11-15
増田 耕一 (MASUDA Kooiti)
[「地学概論」日程と各回の内容] [今学期の授業教材ページ] [地学の教材目次ページ]