0% found this document useful (0 votes)
21 views10 pages

Polarisation Data

The document provides polarization data for several asteroids, including Ceres, Io, Massalia, Kalliope, Pax, and Lutetia. It includes the polarization curve parameters and inversion angle for each asteroid. It also gives the formula used to calculate these parameters and provides Python code to fit polarization curves to observational data points for each asteroid in order to determine the optimal parameters that produce the best fit. An example is shown for fitting the Ceres data. The document concludes with an example of how to perform a chi-square test to evaluate the goodness of fit for a polarization curve using Python.

Uploaded by

Nobe Felix
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views10 pages

Polarisation Data

The document provides polarization data for several asteroids, including Ceres, Io, Massalia, Kalliope, Pax, and Lutetia. It includes the polarization curve parameters and inversion angle for each asteroid. It also gives the formula used to calculate these parameters and provides Python code to fit polarization curves to observational data points for each asteroid in order to determine the optimal parameters that produce the best fit. An example is shown for fitting the Ceres data. The document concludes with an example of how to perform a chi-square test to evaluate the goodness of fit for a polarization curve using Python.

Uploaded by

Nobe Felix
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

Table for Polarization Data of Asteroids

Name of the Inversion


asteroid Z a1 a2 angle, αinv Slope (h) α min Pmin α max Pmax
(in degrees) (in degrees) (in degrees)

Ceres 0.1596 0.6505 0.912 18.38 14.95 7.2 -1.589 96.75 28.632

Io 0.1801 0.8476 0.929 19.17 13.652 8.82 -1.285 97.29 32.142

Massalia 0.1000 0.8889 1.000 20.38 7.086 9.55 -0.689 100.72 17.531

Kalliope 0.1143 0.8340 0.9504 21.09 9.28 9.55 -0.973 99.45 20.237

Pax 0.1524 1.0251 1.000 28.20 12.79 14.23 -1.58 103.88 25.873

Formula Used :
a) The slope h at the inversion angle is given by -

b) Linear polarization P in terms of slope (h) :


POLARIZATION CURVES OF SOME ASTEROIDS
PYTHON CODE TO FIND THE PARAMETERS
(Z , a1 , a2, Inversion Angle) :
For example: Finding the parameters for Asteroid Ceres.
import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import differential_evolution

# Given data points

data_points = [(9.53, -1.4), (15.24, -0.83), (16.15, -0.59), (17.02, -0.23), (18.39, 0.03),

(18.53, 0.01), (18.89, 0.15), (19, 0.16), (20.85, 0.69), (23.12, 1.4),

(16.75, -0.31), (16.75, -0.3), (5.15, -1.49), (5.15, -1.51), (21.85, 0.95),

(11.07, -1.56), (21.23, 0.84), (20.91, 0.4), (4.24, -1.56), (4.22, -1.45),

(23.08, 1.3), (18.67, 0.15), (17.31, -0.21), (15.11, -0.76), (12.05, -1.26),

(9.95, -1.65), (8.88, -1.66), (8.08, -1.69), (7.69, -1.71), (1.11, -0.65),

(1.3, -0.71), (4.33, -1.48), (9.96, -1.58), (20.6, 0.66), (19.88, 0.45),

(5.93, -1.69), (7.5, -1.66), (7.5, -1.61), (11.5, -1.28), (11.5, -1.37),

(14.7, -0.52), (14.7, -0.67), (10.4, -1.56), (10.4, -1.51), (7.4, -1.46),

(7.4, -1.32), (7.1, -1.73), (7.1, -1.72), (6.9, -1.52), (6.9, -1.43),

(6.7, -1.57), (6.7, -1.57), (7.3, -1.96), (7.3, -1.87), (8.3, -1.54),

(8.3, -1.65), (8.8, -1.8), (8.8, -1.4), (7.1, -1.61), (7.1, -1.52),

(8.3, -1.56), (8.3, -1.41), (9.4, -1.49), (9.4, -1.45), (9.1, -1.36),

(9.1, -1.39), (8.7, -1.51), (8.7, -1.52), (10.2, -1.53), (10.9, -1.42),

(10.9, -1.42), (11.8, -1.33), (11.8, -1.27), (2.71, -1.04), (2.71, -1.05),

(17.29, -0.2), (17.29, -0.23), (7.3, -1.64), (7.3, -1.63), (19.46, 0.24),

(19.46, 0.26), (4.3, -1.4), (4.3, -1.36), (3.2, -1.19), (3.5, -1.12),

(6.37, -1.67), (18.3, 0.04), (18.3, -0.06), (16.75, -0.31), (16.75, -0.3),

(5.15, -1.49), (5.15, -1.51)]

# Convert data points into arrays for curve fitting

x_data = np.array([point[0] for point in data_points])

y_data = np.array([point[1] for point in data_points])

# Define the function for fitting

def y_function(x, a1, a2, Z, x0):

return Z * (180 + np.cos((x) * (np.pi / 180) / 2)) * (

(np.sin((x) * (np.pi / 180))) ** a1) * (np.sin(((x - x0) * (np.pi / 180)) / a2))

# Define the objective function for optimization


def objective(params):

a1, a2, Z, x0 = params

y_predicted = y_function(x_data, a1, a2, Z, x0)

return np.sum((y_predicted - y_data)**2) # Sum of squared differences as objective

# Define parameter ranges for optimization

param_ranges = [(0.0, 1.6), (0.9, 1.0), (0.0, 5), (0.0, 50.0)]

# Perform the differential evolution optimization

result = differential_evolution(objective, param_ranges)

# Extract optimized parameters

a1_opt, a2_opt, Z_opt, x0_opt = result.x

# Create an array of x values from 0 to 180 degrees

x_values = np.linspace(0, 180, 500)

# Calculate fitted y values using the optimized parameters

y_values_fit = y_function(x_values, a1_opt, a2_opt, Z_opt, x0_opt)

# Plot the original data and the fitted curve

plt.scatter(x_data, y_data, label='Data Points')

plt.plot(x_values, y_values_fit, label='Fitted Curve', color='red')

plt.xlabel("x (degrees)")

plt.ylabel("P %")

plt.title("Polarization curve of Ceres")

plt.legend()

plt.grid(True)

plt.xlim(0, 180)

plt.show()

# Print the optimized parameters

print("Optimized Parameters:")

print("a1:", a1_opt)

print("a2:", a2_opt)

print("Z:", Z_opt)

print("x0:", x0_opt)
Similarly Data Points for Other Asteroids:
1) For Asteroid Massalia :

data_points = [(2.6, -0.47), (2.6, 0.22), (22.38, 0.32), (22.38, 0.22),

(25.13, 0.57), (23.17, 0.3), (16.82, -0.28), (6.21, -0.65),

(21.36, 0.15), (19.95, 0.01), (8.8, -0.53), (8.8, -0.53),


(9, -0.67), (9.4, -0.7), (9.4, -0.65), (3.25, -0.49),
(3.25, -0.56), (2.13, -0.5), (2.13, -0.49), (1.67, -0.4),
(1.67, -0.38), (0.58, -0.41), (0.58, -0.4), (0.08, -0.09),
(0.08, -0.06), (14.7, -0.35), (14.7, -0.56), (22.38, 0.25),
(22.38, 0.18)]

2) For Asteroid Io :

data_points = (7.26, -1.39),(10.13, -1.27),(10.81, -1.19),(11.95, -0.94),(13.11, -0.99),(15.03, -0.91),(15.13, -0.88),(15.49,


-0.84),(21.99, 0.95),
(26.37, 2.2),(5.1, -1.25), (1.72, -0.55),(1.72, -0.5),(4.95, -0.97),(4.95, -1.03),(13.18, -1.25),(13.18, -0.92),(16.8, -0.52),
(16.8, -0.48),(7.8, -1.17),
(16, -0.53),(24.6, 1.59),(11.7, -1.29),(20.8, 0.44),(17.9, -0.42),(21, 0.5),(26.6, 2.2)]

3) For Asteroid Lutetia :

data_points = [
(2.51, -0.73), (3.89, -0.71), (7.18, -1.36), (9.66, -1.39), (11.59, -1.42),
(13.49, -1.29), (16.57, -0.93), (19.57, -0.67), (22.69, -0.31), (22.47, -0.26),
(5.95, -1.19), (16.47, -1.02), (27.79, 0.66), (28.32, 0.71), (29.12, 0.77),
(7.5, -1.34), (7.5, -1.38), (1.3, -0.4), (26.8, 0.21), (10.1, -1.12),
(8.75, -1.36), (2.05, -0.64), (2.05, -0.66), (2.43, -0.72), (2.43, -0.74),
(18.8, -0.56), (20.3, -0.46), (4.5, -1.09), (4.5, -1.12), (17.38, -0.72),
(17.4, -0.72), (27.87, 0.76), (27.87, 0.74), (14.8, -1.25), (13.1, -1.29),
(5.46, -1.17), (5.86, -1.13), (6.26, -1.18), (16.8, -0.82), (12.4, -1.2)
]

4) For Asteroid Pax :

data_points = [(2.63, -0.3), (3.45, -0.55),(3.72, -0.59),


(6.52, -1.25),(6.7, -1.09),(7.26, -1.16), (11.16, -1.83),(13.81, -1.49),
(14.57, -1.66),(14.94, -1.62),(15.19, -1.67), (17.01, -1.49),(19.92, -1.16),(19.96, -1.21),(20.39, -1.27),
(22.27, -0.89),(20, -1.33),20, -1.35),(20.1, -1.35),(20.1, -1.36),(20.2, -1.35),(20.2, -1.26),(20.3, -1.28),(20.3, -1.34),
(20.7, -1.14),(20.7, -1.22),(31, 0.66),(31, 0.63),(31.9, 0.86),
(3.72, -0.52),(3.72, -0.6),(22.27, -0.89),(20.39, -1.27),(17.01, -1.49),(14.94, -1.62),(14.57, -1.66),
(7.26, -1.16),(6.52, -1.25),(17.7, -1.47)]

5) For Asteroid Kalliope :

data_points = [
(18.7, -0.32), (6.04, -0.93), (7.18, -1.03), (12.79, -0.92),
(16.02, -0.52), (7.48, -0.93), (17.8, -0.57), (17.8, -0.54),
(13.5, -0.7), (13.7, -0.71), (13.7, -0.89), (14, -0.77),
(6.5, -0.85), (7.4, -0.81), (12.49, -0.98), (12.49, -1.14),
(13.25, -1), (13.25, -0.96), (14, -0.73), (6.8, -0.9),
(5.2, -0.81), (7.3, -0.87), (7.3, -0.9), (15.4, -0.61)]
Chi-Square Test for Goodness of Curve: (Using Python)
import numpy as np
from scipy.stats import chisquare

# Given observed and expected values


observed_values = [, , ,, , , , .........]

expected_values = [, ,, , ,, ,. ...............]

# Perform the Chi-Square goodness of fit test


chi_square_statistic, p_value = chisquare(observed_values, expected_values)

# Print the results


print("Chi-Square Statistic:", chi_square_statistic)
print("P-Value:", p_value)

# Interpret the results


alpha = 0.01 # Significance level
if p_value < alpha:
print("Reject null hypothesis: The observed and expected distributions are significantly different.")
else:
print("Fail to reject null hypothesis: The observed and expected distributions are not significantly
different.")

1) Chi Square Test for data of Asteroid Ceres:


INPUT:
import numpy as np
from scipy.stats import chisquare

# Given observed and expected values


observed_values = [1.511429980808971, 0.7274026377994142, 0.5361049176946999,
0.3380420588974957, 0.0026100414030186918, 0.03933738475355394,
0.13536868244312086, 0.1651642882041291, 0.6970218623389757,
1.4244080456893826, 0.4010632290100095, 0.4010632290100095,
1.5083175308986083, 1.5083175308986083, 1.0077064210196807,
1.3768357158516276, 0.8132242049453645, 0.715216184457039,
1.418774335932147, 1.4163767609736502, 1.4109178318153563,
0.07641195418196504, 0.26882074469444855, 0.7533692833510139,
1.2599674778519443, 1.4809170852644316, 1.5490564684299655,
1.5786452070002706, 1.5860625175597918, 0.7207039579192821,
0.7902375297165525, 1.4293236299543908, 1.480132657853211,
0.6218369507682818, 0.41101649114626687, 1.5572275608800599,
1.5879488674301057, 1.5879488674301057, 1.3284359135437045,
1.3284359135437045, 0.8329866016484226, 0.8329866016484226,
1.4429987567055278, 1.4429987567055278, 1.5884781758081437,
1.5884781758081437, 1.588113810391808, 1.588113810391808,
1.5862133129463927, 1.5862133129463927, 1.5829564743752322,
1.5829564743752322, 1.5886840922736485, 1.5886840922736485,
1.5724039488901567, 1.5724039488901567, 1.5528603150324998,
1.5528603150324998, 1.588113810391808, 1.588113810391808,
1.5724039488901567, 1.5724039488901567, 1.5198994411901392,
1.5198994411901392, 1.5376517448650602, 1.5376517448650602,
1.5573551415253164, 1.5573551415253164, 1.4605094620375387,
1.3947024177710379, 1.3947024177710379, 1.2919906052090722,
1.2919906052090722, 1.17223793798744, 1.17223793798744,
0.27364518098932106, 0.27364518098932106, 1.5886840922736485,
1.5886840922736485, 0.292030626092276, 0.292030626092276,
1.4258505792681002, 1.4258505792681002, 1.266290513351504,
1.3164127669324406, 1.5745430312570272, 0.020816093232539697,
0.020816093232539697, 0.4010632290100095, 0.4010632290100095,
1.5083175308986083, 1.5083175308986083]

expected_values = [
1.4, 0.83, 0.59, 0.23, 0.03, 0.01, 0.15, 0.16, 0.69, 1.4, 0.31, 0.3,
1.49, 1.51, 0.95, 1.56, 0.84, 0.4, 1.56, 1.45, 1.3, 0.15, 0.21, 0.76,
1.26, 1.65, 1.66, 1.69, 1.71, 0.65, 0.71, 1.48, 1.58, 0.66, 0.45,
1.69, 1.66, 1.61, 1.28, 1.37, 0.52, 0.67, 1.56, 1.51, 1.46, 1.32,
1.73, 1.72, 1.52, 1.43, 1.57, 1.57, 1.96, 1.87, 1.54, 1.65, 1.8,
1.4, 1.61, 1.52, 1.56, 1.41, 1.49, 1.45, 1.36, 1.39, 1.51, 1.52,
1.53, 1.42, 1.42, 1.33, 1.27, 1.04, 1.05, 0.2, 0.23, 1.64, 1.63,
0.24, 0.26, 1.4, 1.36, 1.19, 1.12, 1.67, 0.04, 0.06, 0.31, 0.3,
1.49, 1.51]

# Perform the Chi-Square goodness of fit test


chi_square_statistic, p_value = chisquare(observed_values, expected_values)

# Print the results


print("Chi-Square Statistic:", chi_square_statistic)
print("P-Value:", p_value)

# Interpret the results


alpha = 0.01 # Significance level
if p_value < alpha:
print("Reject null hypothesis: The observed and expected distributions are significantly different.")
else:
print("Fail to reject null hypothesis: The observed and expected distributions are not significantly different.")

OUTPUT :

2) Chi Square Test for data of Asteroid Io:


INPUT :
import numpy as np
from scipy.stats import chisquare

# Given observed and expected values

observed_values = [1.2528251522519573, 1.2629123666786914, 1.2341330230579746,


1.1602862162612484, 1.0530521298619286, 0.8068074016566974, 0.7916914337356448,
0.7354303233630103, 0.7506876711427439, 2.209314154086596, 1.0948175395272834,
0.5375705868056552, 0.5375705868056552, 1.0786425032021485, 1.0786425032021485,
1.0455654302094155, 1.0455654302094155, 0.5066762487612798, 0.5066762487612798,
1.2715046962476446, 0.6508241277875397, 1.5791996484434934, 1.1791885244036557,
0.414971902336448, 0.2860968532479688, 0.46949253065872526, 2.2950510288424804]

expected_values = [
1.39, 1.27, 1.19, 0.94, 0.99, 0.91, 0.88, 0.84, 0.95, 2.2,
1.25, 0.55, 0.5, 0.97, 1.03, 1.25, 0.92, 0.52, 0.48, 1.17,
0.53, 1.59, 1.29, 0.44, 0.42, 0.5, 2.2
]

# Perform the Chi-Square goodness of fit test


chi_square_statistic, p_value = chisquare(observed_values, expected_values)
# Print the results
print("Chi-Square Statistic:", chi_square_statistic)
print("P-Value:", p_value)

# Interpret the results


alpha = 0.01 # Significance level
if p_value < alpha:
print("Reject null hypothesis: The observed and expected distributions are significantly different.")
else:
print("Fail to reject null hypothesis: The observed and expected distributions are not significantly different.")

OUTPUT :

3) Chi Square Test for data of Asteroid Massalia:


INPUT:

import numpy as np
from scipy.stats import chisquare
# Given observed and expected values
observed_values = [0.3535382213943299, 0.3535382213943299, 0.26771982448087384,
0.26771982448087384, 0.699959220936218, 0.3844566129559023,
0.3732340655939114, 0.6136402176764025, 0.12613123449879096,
0.05222467457066634, 0.684751801625554, 0.684751801625554,
0.6865524407514936, 0.6886102976088556, 0.6886102976088556,
0.4157515248612433, 0.4157515248612433, 0.3037121883002023,
0.3037121883002023, 0.25061445090228424, 0.25061445090228424,
0.10338361242441164, 0.10338361242441164, 0.01820073226378521,
0.01820073226378521, 0.5293727748045136, 0.5293727748045136,
0.26771982448087384, 0.26771982448087384]
expected_values = [
0.47, 0.22, 0.32, 0.22, 0.57, 0.3, 0.28, 0.65, 0.15, 0.01,
0.53, 0.53, 0.67, 0.7, 0.65, 0.49, 0.56, 0.5, 0.49,
0.4, 0.38, 0.41, 0.4, 0.09, 0.06, 0.35, 0.56, 0.25, 0.18]

# Perform the Chi-Square goodness of fit test


chi_square_statistic, p_value = chisquare(observed_values, expected_values)

# Print the results


print("Chi-Square Statistic:", chi_square_statistic)
print("P-Value:", p_value)

# Interpret the results


alpha = 0.01 # Significance level
if p_value < alpha:
print("Reject null hypothesis: The observed and expected distributions are significantly different.")
else:
print("Fail to reject null hypothesis: The observed and expected distributions are not significantly different.")

OUTPUT :
4) Chi Square Test for data of Asteroid Pax:
INPUT:
import numpy as np
from scipy.stats import chisquare

# Given observed and expected values


observed_values = [0.5056461433196421, 0.6476217680623554, 0.6923977770364556,
1.0956083683874374, 1.1175772712854173, 1.1827798645744196,
1.5013033086664855, 1.5785231469857286, 1.579486088631466,
1.5765189088400378, 1.5732386994630418, 1.5183244795966206,
1.3172469207047128, 1.3135155916248293, 1.271754948468391,
1.0539125562701095, 1.3097581368297195, 1.3097581368297195,
1.3002502358065424, 1.3002502358065424, 1.2905791702326106,
1.2905791702326106, 1.2807450292705491, 1.2807450292705491,
1.2397795740875261, 1.2397795740875261, 0.6824098584222275,
0.6824098584222275, 0.9255285737465244, 0.6923977770364556,
0.6923977770364556, 1.0539125562701095, 1.271754948468391,
1.5183244795966206, 1.5765189088400378, 1.579486088631466,
1.1827798645744196, 1.0956083683874374, 1.4832356058229434]
expected_values = [ 0.3, 0.55, 0.59, 1.25, 1.09, 1.16, 1.83, 1.49, 1.66, 1.62,
1.67, 1.49, 1.16, 1.21, 1.27, 0.89, 1.33, 1.35, 1.35, 1.36,
1.35, 1.26, 1.28, 1.34, 1.14, 1.22, 0.66, 0.63, 0.86, 0.52,
0.6, 0.89, 1.27, 1.49, 1.62, 1.66, 1.16, 1.25, 1.47]
# Perform the Chi-Square goodness of fit test
chi_square_statistic, p_value = chisquare(observed_values, expected_values)

# Print the results


print("Chi-Square Statistic:", chi_square_statistic)
print("P-Value:", p_value)

# Interpret the results


alpha = 0.01 # Significance level
if p_value < alpha:
print("Reject null hypothesis: The observed and expected distributions are significantly different.")
else:
print("Fail to reject null hypothesis: The observed and expected distributions are not significantly different.")

OUTPUT :

5) Chi Square Test for data of Asteroid Kalliope:


INPUT :
import numpy as np
from scipy.stats import chisquare

# Given observed and expected values


observed_values = [0.35148805740532535, 0.8632273227062648, 0.9227196194967849, 0.8931380632050743,
0.657257018188712, 0.9344324846161309, 0.46486765893285115, 0.46486765893285115,
0.8542406653420298, 0.8419412959051, 0.8419412959051, 0.8223968418472689,
0.890136672330792, 0.9314661109346126, 0.907316155012869, 0.907316155012869,
0.868788278114057, 0.868788278114057, 0.8223968418472689, 0.9055553747994329,
0.8035470151713636, 0.9275978154200629, 0.9275978154200629,
0.7140722195492033]
expected_values = [
0.32, 0.93, 1.03, 0.92, 0.52, 0.93, 0.57, 0.54,
0.7, 0.71, 0.89, 0.77, 0.85, 0.81, 0.98, 1.14,
1, 0.96, 0.73, 0.9, 0.81, 0.87, 0.9, 0.61
]
# Perform the Chi-Square goodness of fit test
chi_square_statistic, p_value = chisquare(observed_values, expected_values)

# Print the results


print("Chi-Square Statistic:", chi_square_statistic)
print("P-Value:", p_value)

# Interpret the results


alpha = 0.01 # Significance level
if p_value < alpha:
print("Reject null hypothesis: The observed and expected distributions are significantly different.")
else:
print("Fail to reject null hypothesis: The observed and expected distributions are not significantly different.")

OUTPUT:

APPENDIX : Program to find the value of function w.r.t at different angles :

import numpy as np

x_degrees = np.array([ Enter the angle values in degreees, , , ,.....


, , , , , ,, , , ............
]
)
# Input values from the user
z = float(input("Enter value for z: "))
a1 = float(input("Enter value for a1: "))
a2 = float(input("Enter value for a2: "))

# Calculate y values
y = z * (180 + np.cos((x_degrees) * (np.pi / 180) / 2)) * ((np.sin((x_degrees) * (np.pi / 180))) ** a1) * (
np.sin(((x_degrees – INVERSION ANGLE) * (np.pi / 180)) / a2))

# Convert negative y values to positive


y = np.abs(y)

# Print generated y values as a comma-separated array


print("Generated y values (positive) as a comma-separated array:")
print(', '.join(map(str, y)))

You might also like