numpy as np # import numpy agar memiliki kemampuan untuk membentuk objek N-dimensional array.
from math import sin, cos, pi # berfungsi untuk menjalankan fungsi trigonometri.
from prettytable import PrettyTable # berfungsi untuk melakukan visualisasi tabel.
from scipy.integrate import quad, trapz, simps # berfungsi untuk melakukan integrasi tunggal, integrasi aturan Trapezoidal, dan integra
import scipy.interpolate # berfungsi untuk membuat fungsi berdasarkan data points yang tetap.
import matplotlib.pyplot as plt # import matplotlib.pyplot untuk melakukan visualisasi data.
import pandas as pd # import pandas untuk melakukan proses analisis data.
from scipy.interpolate import interp1d # berfungsi untuk melakukan interpolasi data.
from scipy.optimize import curve_fit # berfungsi untuk menghasilkan nilai optimal untuk fungsi pemetaan.
#10320023
#Muhammad Akmal Husain
23%3
#Pendefinisian Presamaan Regresi yang digunakan
def f(x, a1, a0):
return a1*x + a0
#Sumbu x adalah log massa total dan Sumbu y adalah Magnitudo Multak Bolometrik
x = np.array([-1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8])
y = np.array([11.3, 10.3, 9.4, 8.1, 6.6, 4.7, 2.7, 0.8, -0.9, -2.4, -3.9, -5.4, -6.8, -8.1, -9.5])
#Membuat Regresi Linier
init_vals = [1, 1] #Inisiasi titik pertama pada grafik
poptl, pcov = curve_fit(f, x, y, p0=init_vals) # Mmebuat garis regresi
print('Best parameter values: {}'.format(poptl)) #Mmngeluarkan nilai hasil dari regresi
#Membuat 50 titik data baru dalam rentang data
xfitted = np.linspace(x[0], x[len(x)-1], 50) #Sebenarnya tidak perlu 50 titik data yang terpenting adalah jumlah titik datanya tidak ku
#Membuat grafik regresinya
plt.plot(x, y, 'o', label = 'data log(miu) vs Mbol $(x_i,y_i)$', c = 'black')
plt.plot(xfitted, f(xfitted, *poptl), '-', label = 'fit $f(x_i)$')
plt.xlabel('Log(miu)')
plt.ylabel('Mangitudo Mutlak Bolometrik')
plt.legend()
plt.show()
#Memasukkan nilai-nilai yang terdapat di data yang disajikan di Tugas
m1 = 3.7 #Magnitudo Visual bintang 1 epsilon hydrae
m2 = 4.8 #Magnitudo Visual bintang 2 epsiolan Hydrae
P = 15.0 #Periode dari bintang ganda
alpha = 0.21 #Nilai sudut dari paralaks
BC1 = -0.18 #Koreksi Bolometrik bintang 1
BC2 = -0.09 #Koreksi Bolometrik bintang 2
n = -7.8625/-2.5 #Nilai log total massa per -2.5 pada rumus pogson
Miu = 2
print(f'------------------------------------------------------------------------------')
print(f'iteration\tMiu1\t\tMiu2\t\tParalaks\t\tJarak')
print(f'------------------------------------------------------------------------------')
#Pengulangan untuk menemukan nilai paralaks dan massa 1 dan massa 2 dari bintang ganda epsilon hydrae
for i in range(30):
par = alpha/(((Miu)*(P**2))**(1/3)) #Rumus paralaks dynamika
dis = 1/par #Rumus jarak dengan satuan parsek
#Rumus Pogson untuk mencari magnitudo mutlak dari masing-masing bintang
M_1 = 5 - (5*np.log10(dis)) + m1
M_2 = 5 - (5*np.log10(dis)) + m2
#Rumus untuk mencari magnitudo mutlak bolometrik dari bintang 1 dan bintang 2
M1B = M_1 - BC1
M2B = M_2 - BC2
#Rumus untuk mencari luminositas bintang dengan satuan luminositas matahari
L1 = 10**((M1B - 4.74)/-2.5)
L2 = 10**((M2B - 4.74)/-2.5)
#Rumus Hubungan Luminositas dengan Massa dengan satuan massa matahari
Miu1 = L1**(1/n)
Miu2 = L2**(1/n)
#Membuat nilai total massa bintang ganda yang baru
Miu = Miu1+Miu2
i+=1
#Mengeluarkan nilai-nilai massa bintang dan paralaks bintang
print(f'{i}\t\t{Miu1:.11f}\t{Miu2:.11f}\t{par:.11F}\t{dis:.11f}')
------------------------------------------------------------------------------
------------------------------------------------------------------------------