Interpolation zwischen zwei Kurven (matlab)
Ok, Jungs. Ich habe Folgendes problem:
Habe ich die Daten von der folgenden Handlung.
So dass die Daten-Datei von dieser plot enthält drei Spalten.
Die 2. und 3. diejenigen, die die x -, y-Punkte. Und der 1. eines ist, welches system diese Punkte gehören.
In diesem Fall die roten sind für das system von 20 Jahren. Die blauen für die 30 Jahre.
Was ich will, zu finden ist die Kurve bei 25 Jahren. Also, wenn ich das Grundstück es sein sollte zwischen den roten und blauen Kurven.
Ich habe keine Ahnung, wie interpolieren Sie die Daten, um zu erhalten, was ich will. Eigentlich möchte ich haben für 21,22,...29 Jahre, ich denke, wenn wir es finden können, für eine Zeit, in der zwischen diesen beiden, dann die Methode sollte funktionieren für alle Zeit zwischen 20 und 30.
PS: ich denke, die interpolation für jede Kurve (in diesem Fall rot oder blau) ist ganz einfach. Einfach mit interp1(x,y,xx) funktioniert. Aber was passiert mit den anderen "dimension" (M)
Daten.
20.0000 3.4076 0
20.0000 3.4226 99.5405
20.0000 3.4701 196.3360
20.0000 3.5592 287.0781
20.0000 3.6248 328.8516
20.0000 3.6643 348.3373
20.0000 3.7091 367.2823
20.0000 3.7591 385.4784
20.0000 3.8077 402.7170
20.0000 3.8957 437.5221
20.0000 4.0314 506.9907
30.0000 3.6335 0
30.0000 3.6373 49.8884
30.0000 3.6488 99.5405
30.0000 3.6685 148.5936
30.0000 3.7363 243.2204
30.0000 3.7876 287.7398
30.0000 3.8537 329.6097
30.0000 3.8935 349.9452
30.0000 3.9384 368.9776
30.0000 3.9892 387.2576
30.0000 4.0410 404.5759
30.0000 4.1350 439.5416
30.0000 4.2153 474.2420
30.0000 4.2813 509.3309
- Was sind deine Daten-Spalten ? Sie definieren eine Oberfläche (3D-Objekte, die die Spalten repräsentieren die x -, y-und z-Koordinate) oder einfach eine Reihe von entkoppelten Daten Spalten mit der ersten Spalte als X-Koordinate ?
- Naja, eigentlich das 2. und 3. Spalten sind die, die Definition eines üblichen x-Y-Ebene ((x,y) Punkte). Und die erste Spalte ist eigentlich das "system" diese (x,y) Punkte gehört. Aber ist ziemlich einfach, Interpolation in der xy-Ebene, aber nicht in der "3D" ein, wenn ich betrachten die erste Spalte als eine andere variable. Ich bin nicht sicher, ob meine Antwort dir hilft, lass es mich wissen.
- Naja, ich bin noch nicht sicher, um vollständig zu verstehen, was erwarten Sie von der interpolation. Als eine erste Andeutung, die, basierend auf Ihren letzten Kommentar, ich würde Ihnen empfehlen, zu prüfen, Ihre erste Spalte als eine Art
Z
Ebene/dimension (vertauschen von Spalten wenn nötig), und sehen, ob das hilft. Aber letztlich, denke ich, sollten Sie Bearbeiten Ihre ursprüngliche Frage und besser definieren Ihr problem. - Ok, ich werde. Aber ich sehe nicht den Unterschied, ich meine die position der Spalten ist irrelevant? Ich habe keine Ahnung. Ich dachte, es ist. (Aber danke ich werde es beheben asap)
- ja, in eine rein mathematische Weise die position der Spalte, ist irrelevant. Ich wurde gerade darauf hindeutet, dass helfen, zu erklären/verstehen, was physikalische "Ding", jede Spalte darstellen. Es ist nicht notwendig, um Sie zu tauschen, aber eine bessere Erklärung, was Sie sind und was die interpolation soll erreicht werden, dass nötig wäre, um deine Frage zu beantworten.
- Getan. Ist es klarer jetzt?. Ich bin Total verloren.
- Hi @Nikko, ist es klarer (mir sowieso), aber Sie haben nicht erwähnt, wie du interpolieren linear, etc. Dies ist eine wichtige information. Vielleicht haben Sie nicht wissen, die Antwort, aber dann sind wir auch nicht 🙂 Können Sie auch die Daten einer Tabelle (oder einer Teilmenge davon)?
- Ist dies alle Informationen, die Sie haben oder gibt es einen anderen parameter, als diese zu Linien, dass die Kurve, muss versehen sein mit? Auch es ist ein bisschen schwer zu passen 2 Punkte, also, wenn eine Funktion gegeben ist, willst du eine lineare interpoltation?
- Danke Jungs für Eure Antworten. Ich habe keine Präferenz auf, wie dieses problem zu lösen. Ich will nur eine (kontinuierliche, wenn möglich) - Kurve zwischen diesen zwei. Für alle "M" - Wert zwischen M[20,30]. Also @darthbith lineare wäre ok. und ich habe die data.@patrik auch neben den Datenpunkten (x,y) die anderen parameter ist "M". Jetzt habe ich die Daten vielleicht klarer ist. Was meinst du zu fit 2 Punkte?. Jede Kurve interpoliert werden können, so kann ich durchgehend eine für jeden Satz.Vielleicht kann auch helfen.
- Viel klarer in der Tat. Es ist auch gut zu sehen die plots. Ich sehe, Sie haben eine unterschiedliche Anzahl von Punkten zwischen Ihren 2 definierte Kurve. Es wird wahrscheinlich helfen, reinterp jede Kurve auf eine gemeinsame X-oder Y In deinem Beispiel-Kurve, ich kann nicht sicher sein, dass für die X-span, aber ich sehe jede Kurve hat den gleichen Y-Spanne (von 0 bis 500). Also würde ich empfehlen, zuerst resample Ihre vorhandenen Kurven auf eine gemeinsame Y-raster (die Sie verwenden können, interp1 für die). Dann wird für jedes 'Y' Linie, Sie haben eine entsprechende X-Wert für jede Zeit (und interpolieren kann X-Werte für den von Ihnen gewünschten Zeiten dazwischen).
- nette Idee (Interpolation zuerst in der Y-dominion für jeden Satz). Aber der andere Teil ist verwirrend für mich, kannst du das mal erklären bitte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich, suchen Sie in der Matlab-Dokumentation fand ich eine einfachere Möglichkeit. Sie können die Funktion nutzen,griddata. (Der doc in der matlab-Hilfe zeigt visuelles Beispiel). Das resampling auf einem gemeinsamen Netz und die interpolation ist eingebettet in die Funktion.
Die Letzte Zeile des Codes zeigt dieses Diagramm:
Alle Ihre interpolierten Daten sind in der XI-matrix. Die Art und Weise, um Sie abzurufen, hängt davon ab, wie Sie organisieren wollen, Sie letztendlich.
EDIT:
Alle interpolierten Daten in einer einzigen Tabelle
InterpData
auf die gleiche Weise organisiert, die Ihre ursprüngliche Tabelle, verwenden Sie die folgende:In Bezug auf die
NaN
s. Sie wird kommen, Sie zu stören jedes mal, wenn Sie Sie bitten, zu tun, eine interpolation, die außerhalb des ursprünglich bekannten Werten.Zum Beispiel, wenn Sie Ihre Zeit in den ursprünglichen Daten ist in [20 bis 30] Intervall, matlab gerne interpolieren, alles, was in diesem Intervall, aber zurück
NaN
wenn Sie Fragen, um einen Wert zurückzugeben, für die Zeit = 19 zum Beispiel. Gleiches gilt fürY
, die Gitter, auf denen zu interpolieren, werden in der ersten Reihe. (wie in dieser Implementierung verwenden wir ein Basis-Gitter, gebildet vonTime
(Spalte 1) undY
(Spalte 3), interpoliert dieX
Spalte).Versuchen, diesen code implementiert @Hoki 's Kommentar:
Sie interpolieren die gegeben
M
Vektoren zu finden, diex
koordinieren eine Reihe vony
Werte - dies sind dieinterp1
Linien. Dann werden Sie Linear interpoliert als Funktion vonm
zwischen den interpoliertenx
-Koordinaten.