Seite 1 von 1

Interpolation

Verfasst: Montag 9. Februar 2015, 18:08
von Lienz20013
Hallöchen, ich habe Daten die ich mit log log darstelle. Jetzt möchte ich diese Daten in einem bestimmten Bereich Interpolieren. Ich will zwischen einem Minimum und Maximum Interploieren versucht habe ich bis jetzt das:

Code: Alles auswählen

a_fc = plt.subplot(gs[0,0])

for row in range(30):
    f3_1, Pxx_spec = signal.welch(data_FBGS2[:,row], fs, 'flattop', 4096, 
                                scaling='spectrum')

    f_new= 1/(f3_1[1:]*3600)
    Pxx = Pxx_spec[1:]
    a_fc.loglog(f_new, np.sqrt(Pxx),'k-',zorder=3, )


    import numpy.polynomial.polynomial as poly

    #Regression
    
    xmax,xmin = 23.92,0.04    #Der Bereich in dem Interpoliert werden soll. Wo gebe ich mein Minnimu umd Maximum ein?
    logx,logy = np.log(f_new,np.log(Pxx)

    coeffs = np.polyfit(logx,logy,deg=1)
    poly = np.poly1d(coeffs)

    yfit = lambda f_new: np.exp(poly(np.log(f_new)))

    plt.loglog(f_new[0:],yfit(f_new),'m-')
So wie es jetzt ist Interpoliert er über den gesamten Bereich.
Und gibt es einen fit der mir eine Potenzfunktion also sowas wie f^(5/3) ausgiebt bis jetz wird das ja über Polynome gelöst

Re: Interpolation

Verfasst: Montag 9. Februar 2015, 21:41
von Lienz20013
OK, wie man es als potenzfunktion schreibt habe ich raus. Jetzt ist die Frage wie kann ich in bestimmten Intervallen interpolieren??? Kann mir jemand helfen??

Re: Interpolation

Verfasst: Dienstag 10. Februar 2015, 08:40
von MagBen
Hier sind Beispiele zu verschiedenen Interpolationen mit Scipy:
http://docs.scipy.org/doc/scipy/referen ... olate.html

Wenn Du Hilfe zu Deinem Code haben möchtest, ist es wichtig, dass Du ein vollständiges und lauffähiges Beispiel postest (inklusive Testdaten). Lass alles weg, was nichts mit dem Problem zu tun hat.

Re: Interpolation

Verfasst: Dienstag 10. Februar 2015, 09:13
von Lienz20013
Ok, also ich versuchs noch mal. ICh habe x und y Daten und nun möchte ich Interpolieren aber nicht im Bereich von allen x Werten sondern im Bereich von x=>23.92 bis x=<1000.
Bis jetzt habe ich so über alle x Werte Interpoliert:

Code: Alles auswählen

import numpy.polynomial.polynomial as poly
import numpy as np

x = array([  6.82666667e+02,   3.41333333e+02,   2.27555556e+02, ...,
         3.33659172e-01,   3.33496173e-01,   3.33333333e-01])

y = array([  1.31784603e-03,   2.02698698e-03,   1.56655180e-03, ...,
         2.19345177e-07,   2.73519120e-07,   1.84548300e-07])


#xmax,xmin = 23.92,0.04    Der Bereich in dem Interpoliert werden soll. Wo gebe ich mein Minnimu umd Maximum ein?

logx,logy = np.log(x),np.log(y)
 
coeffs = np.polyfit(logx,logy,deg=1)
poly = np.poly1d(coeffs)

Re: Interpolation

Verfasst: Dienstag 10. Februar 2015, 10:07
von MagBen
Wenn die x-Werte in aufsteigender Reihenfolge sortiert wären, dann kannst Du folgendermaßen einen eingeschränkten Bereich von x,y-Werten erhalten:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,6*np.pi,1000)
y = np.sin(x)

# 1.1<=x<=4.5
i1 = np.searchsorted(x, 1.1)
i2 = np.searchsorted(x, 4.5)
print( x[i1], x[i2])

x2 = x[i1:i2]
y2 = y[i1:i2]

plt.figure()
plt.plot(x2, y2)
plt.show()

In Deinem Code sind die x-Werte aber in absteigender Reihenfolge. Das bringt nur zusätzliche Komplikationen, die Reihenfolge der x- und der y-Werte würde ich deshalb umdrehen:

Code: Alles auswählen

x_b = x[::-1]
y_b = y[::-1]