Астрозадача №1: 

Решение

import numpy as np
import matplotlib.pyplot as plt

# Импортируем данные из файлов
M=np.loadtxt("data_M.txt",delimiter='\t', dtype=np.float)
B_V=np.loadtxt("data_B_V.txt",delimiter='\t', dtype=np.float)
M_1=np.loadtxt("data_M_1.txt",delimiter='\t', dtype=np.float)
B_V_1=np.loadtxt("data_B_V_1.txt",delimiter='\t', dtype=np.float)

# Создаём списки данных
B_V = list(B_V) + list(B_V_1)
M = list(M) + list(M_1)

# Рассчитываем температуру согласно формуле
Kel = []
for i in B_V:
    Kel.append(float(4600*(1/(0.92*i+1.7)+1/(0.92*i+0.62))))
    
# Создаём массив цветов rgb
RGB = np.zeros((len(B_V),3))

for i in range(0,len(Kel),1):
    Kel[i] = Kel[i] / 100
    
    # Вычисление красного
    if Kel[i] <= 66:
        Red = 255
    else:
        Red = Kel[i] - 60
        Red = 329.698727446*Red**(-0.1332047592)
        if Red < 0:
            Red = 0
        if Red > 255 :
            Red = 255
    r = Red / 255
    
    # Вычисление зелёного
    if Kel[i] <= 66:
        Green = Kel[i]
        Green = 99.4708025861 * np.log(Green) - 161.1195681661
        if Green < 0:
            Green = 0 
        if Green > 255:
            Green = 255
    else:
        Green = Kel[i] - 60 
        Green = 288.1221695283 * Green**(-0.0755148492)
        if Green < 0:
            Green = 0 
        if Green > 255:
            Green = 255
    g = Green / 255
    
    # Вычисление синего
    if Kel[i] >= 66:
        Blue = 255
    else:
        if Kel[i] <= 19:
            Blue = 0 
        else:
            Blue = Kel[i] - 10
            Blue = 138.5177312231 * np.log(Blue) - 305.0447927307
            if Blue < 0:
                Blue = 0
            if Blue > 255:
                Blue = 255
    b = Blue / 255
    # Заполняем массив цветов rgb 
    RGB[i]=[r,g,b]
    
    # Возвращаем значения температуры к первоначальным
    Kel[i] = Kel[i] * 100
    
# Построение диаграммы
plt.style.use(['dark_background'])
fig = plt.figure(figsize=(12,12), frameon=True)
plt.title('Диаграмма Герцшпрунга-Рассела', fontsize=25)
plt.ylim(20,-20) 
plt.xlim(20000,1000)
plt.scatter(Kel,M,s=0.02, c = RGB)
plt.xlabel("Температура, K", fontsize=15)
plt.ylabel("Абсолютная звёздная величина", fontsize=15)
plt.show()
Made with Slides.com