J'essaie de combler les lacunes entre deux courbes en utilisant une spline en Python. Je voudrais que ma nouvelle ligne corresponde au dégradé des courbes d'origine à chaque extrémité. Le problème provient du besoin de valeurs x croissantes monotones dans les routines spline scipy.interpolate. Le code ci-dessous est un exemple de ce que j'ai à faire. Deux courbes en bleu ('ligne 1' et 'ligne 2') sont ce que j'ai et (quelque chose comme) ce que je voudrais en spline est montré par la ligne 'Wanted'.Python gradient spline correspondant
Quelqu'un at-il des suggestions comment je pourrais faire à ce sujet?
import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate as interp
line1_x = np.array([4.0e8, 4.7e8, 5.5e8, 6.6e8, 8.0e8, 1.0e9, 1.4e9, 2.0e9, 3.6e9,
9.5e9])
line1_y = np.array([5500., 5000., 4500., 4000., 3500., 3000., 2500., 2000., 1500.,
1000.])
line2_x = np.array([1.010e10, 1.060e10, 1.081e10, 1.084e10, 1.076e10, 1.064e10,
1.055e10, 1.050e10, 1.051e10, 1.057e10, 1.067e10, 1.079e10,
1.091e10, 1.102e10, 1.112e10])
line2_y = np.array([350., 361., 372., 385., 395., 407., 418., 430., 442., 454.,
466., 478., 490., 503., 515.])
desired_x = np.array([1.112e10, 1.117e10, 1.121e10, 1.116e10, 1.087e10, 1.027e10,
9.869e9, 9.5e9])
desired_y = np.array([515., 536., 575., 645., 748., 891., 962., 1000.])
plt.plot(line1_x, line1_y, 'b-', label='Line 1')
plt.plot(line2_x, line2_y, 'b-', label='Line 2')
plt.plot(desired_x, desired_y, 'r--', label='Wanted')
plt.legend(loc=0)
Spline Fig Example http://i67.tinypic.com/jajbmc.jpg
Choisissez un algorithme approprié de [ici] (http://docs.scipy.org/doc/scipy-0.14.0/reference/interpolate.html) – sascha
Malheureusement, je ne pouvais pas faire fonctionner les algorithmes de scipy.interpolate "out of the box" comme je le souhaite. Je pense que c'est à cause du besoin de x d'augmenter. Heureusement j'ai trouvé un travail autour duquel je vais décrire dans une réponse. Merci pour votre suggestion. –