2017-10-18 6 views
-1

J'ai fait ma première interpolation avec numpy.polyfit() et numpy.polyval() pour 50 valeurs de longitude pour une orbite complète du satellite.Comment faire une seconde interpolation en python

Maintenant, je veux juste regarder une fenêtre de 0-4.5 degrés de longitude et faire une seconde interpolation de sorte que j'ai 6.000 points pour la longitude dans la fenêtre.

J'ai besoin d'utiliser l'équation/courbe de la première interpolation pour créer la deuxième parce qu'il n'y a qu'un seul point dans la plage de la fenêtre. Je ne suis pas sûr de savoir comment faire la deuxième interpolation.

Entrées:

lon = [-109.73105744378498, -104.28690174554579, -99.2435132929552, -94.48533149079628, -89.91054414962821, -85.42671400689177, -80.94616150449806, -76.38135021210172, -71.6402674905218, -66.62178379632216, -61.21120467960157, -55.27684029674759, -48.66970878028004, -41.23083703244677, -32.813881865289346, -23.332386757370532, -12.832819226213942, -1.5659455609661785, 10.008077792630402, 21.33116444634303, 31.92601575632583, 41.51883213364072, 50.04498630545507, 57.58103957109249, 64.26993028992476, 70.2708323505337, 75.73441871754586, 80.7944079829813, 85.56734813043659, 90.1558676264546, 94.65309120129724, 99.14730128118617, 103.72658922048785, 108.48349841714494, 113.51966824008079, 118.95024882101737, 124.9072309203375, 131.5395221402974, 139.00523971191907, 147.44847902856114, 156.95146022590976, 167.46163867248032, 178.72228750873975, -169.72898181991064, -158.44642409799974, -147.8993300787564, -138.35373014113995, -129.86955508919888, -122.36868103811106, -115.70852432245486] 

myOrbitJ2000Time = [ 20027712., 20027713., 20027714., 20027715., 20027716., 
     20027717., 20027718., 20027719., 20027720., 20027721., 
     20027722., 20027723., 20027724., 20027725., 20027726., 
     20027727., 20027728., 20027729., 20027730., 20027731., 
     20027732., 20027733., 20027734., 20027735., 20027736., 
     20027737., 20027738., 20027739., 20027740., 20027741., 
     20027742., 20027743., 20027744., 20027745., 20027746., 
     20027747., 20027748., 20027749., 20027750., 20027751., 
     20027752., 20027753., 20027754., 20027755., 20027756., 
     20027757., 20027758., 20027759., 20027760., 20027761.] 

code:

deg = 30 #polynomial degree for fit 
fittime = myOrbitJ2000Time - myOrbitJ2000Time[0] 

'Longitude Interpolation' 
fitLon = np.polyfit(fittime, lon, deg) #gets fit coefficients 
polyval_lon = np.polyval(fitLon,fittime) #interp.s to get actual values 


'Get Longitude values for a window of 0-4.5 deg Longitude' 
lonwindow =[] 

for i in range(len(polyval_lon)): 
    if 0 < polyval_lon[i] < 4.5:   # get lon vals in window 
     lonwindow.append(polyval_lon[i]) #append lon vals 

lonwindow = np.array(lonwindow) 

Répondre

0

valeurs d'abord, générer les coefficients d'ajustement polynomiale en utilisant l'ancien temps (axe x) et la longitude interpolées (y- axis).

import numpy as np 
import matplotlib.pyplot as plt 

poly_deg = 3 #degree of the polynomial fit 
polynomial_fit_coeff = np.polyfit(original_times, interp_lon, poly_deg) 

Ensuite, utilisez np.linspace() pour générer des valeurs arbitraires de temps en fonction du nombre de points de désir dans la fenêtre.

start = 0 
stop = 4 
num_points = 6000 
arbitrary_time = np.linspace(start, stop, num_points) 

Enfin, utilisez les coefficients d'ajustement et le temps arbitraire pour obtenir les valeurs de longitude et l'intrigue réelle interpolée (axe y).

lon_intrp_2 = np.polyval(polynomial_fit_coeff, arbitrary_time) 

plt.plot(arbitrary_time, lon_intrp_2, 'r') #interpolated window as a red curve 
plt.plot(myOrbitJ2000Time, lon, '.') #original data plotted as points