Interpolation

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

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
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

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??
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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.
a fool with a tool is still a fool, www.magben.de, YouTube
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

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)
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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]
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten