Interpolieren c#

kise1990

Ensign
Registriert
Okt. 2014
Beiträge
191
hallo,

ich stehe gerade auf dem Schlauch und hoffe das mich einer von euch da runter schupsen kann. Ich habe eine Tabelle mit 3 Werten einmal %, °C und dann den nach zu korrigierenden Wert. Diese Werte habe ich einer Liste übergeben und anschließend ein paar mal sortiert. Mittels der Linearen Interpolation möchte ich mich jetzt an die zwischen Werte annähern. Meinen Überlegungen zu folge muss ich jetzt 5x interpolieren ( mit der Formel : y(x) = y0 + ((y1 - y0) / (x1 - x0)) * (x - x0)) um alle werte darstellen zu können. Nun meine frage, wie muss ich dabei vorgehen? brauche ich dann 5x 5 unterschiedliche Variablen für die einzelnen fälle? Angenommen ich nehme zwei zwischenwerte wo nicht in der Tabelle eingetragen sind ( 97,5% und 52,5°C) diese Werte habe ich ausgewählt da sie genau zwischen den punkten 100% und 95% bzw. zwischen 55°C und 50°C sitzen. Dann muss ich 5 mal interpolieren damit ich auch die gesuchten Werte bekomme, nur wie stell ich das Code technisch an?

Code:
class Interpolation
    {
        static double interpolate(double x0, double y0, double x1, double y1, double x)
        {
            return y0 + ((y1 - y0) / (x1 - x0)) * (x - x0);
        }
    }
 
Also kommt drauf an:

Sind das Meßwerte, oder aus Meßwerten errechnete Daten? Musst du einen "Fehler" mit angeben?

Willst du von einem Wert zum nächsten Wert eine Grade ziehen (aus der man dann Funktionswerte holen kann)?
ODER:
Willst du einen generellen Fit an ALLE Werte anbringen (sofern diese wirklich einer Funktion f(x)=m * x +b entsprechen) ?
 
hey,

aus Messwerten errechnete Daten. Einen Fehler muss ich nicht angeben. Ich würde mal sagen zwischen den Werten eine Gerade ziehen und dann den gesuchten Zwischenwert einem Punkt auf der Gerade zuweisen. So sieht die Ausgangstabelle aus:

_____ |100% 95% 90% 85% 80% 70% 60% 50% 40% 30% 20% 10%
55°C |16,0 7,0 3,0 2,0 0,0 -1,0 -2,0 -3,0 -5,0 -7,0 -10,0 -16,0
50°C |14,0 6,0 3,0 2,0 0,0 -1,0 -2,0 -3,0 -4,0 -6,0 -8,0 -14,0
45°C |12,0 5,0 2,0 1,0 0,0 -1,0 -1,0 -2,0 -4,0 -5,0 -7,0 -12,0
40°C |10,0 4,0 2,0 1,0 0,0 -1,0 -1,0 -2,0 -3,0 -4,0 -6,0 -10,0
35°C |8,0 3,0 1,0 1,0 0,0 -1,0 -1,0 -1,0 -2,0 -3,0 -5,0 -8,0

und jetzt interpoliert auf die werte 97,5% und 52,5°C

_____ |100% 97,5% 95%
55°C |16 11,5 7
52,5°C|15 10,75 6,5
50°C |14 10 6

denke jetzt kann man sich das ganze etwas besser vorstellen. Also man muss erst die 15 berechnen dann die 11,5 anschließend die 10, ... die gesuchten 10,75 und um das ganze zu vervollständigen halt noch die 6,5 bei 95%.
 
Zuletzt bearbeitet:
Beispiel für 55 °C

WertX0(95%) = 7,0
WertX1(100%) = 16,0
deltaWert = WertX1 - WertX0 = 9
deltaX = X1 - X0 = 100% - 95% = 5%
deltaPerX= deltaWert / deltaX = 1,8

jetzt kannst du für jedes beliebige X den Wert anhand der ermittelten Steigung zwischen 95% und 100 % ermitteln.

97,5 % errechnen ...

newX = 97,5%
newDeltaX = newX - X0 = 97,5% - 95% = 2,5%
WertNewX = WertX0 + (newDeltaX * deltaPerX) = 7,0 + (2,5% * 1,8) = 7,0 + 4,5 = 11,5


genau nach der Methode mache ich Resampling bei Audiomessdaten (eigentlich müsste man Splineinterpolation machen, aber die Abweichung ist sehr gering und der Fehler so vertretbar im vergleich zum Mehraufwand bei Splineinterpolation)
Ich entwickle Signalanalysesoftware (also FFT, digitale Filter, Pegel, Übertragungsfunktionen, DSP, Resampling, Morphing)
 
Zurück
Oben