|
|
Interpolation auf feinem Rechengitter |
|
nebula |

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 19.02.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2008b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 11:57
Titel: Interpolation auf feinem Rechengitter
|
 |
|
 |
|
Guten Morgen zusammen,
ich bin nun schon seid Längerem an einer Matlab-Routine am Rumbasteln....
Es soll folgendes passieren:
Ich lese mir Simulationsergebnisse (Koordinaten und Geschwindigkeiten) aus Ansys CFX in mein Matlab Progrämmchen ein. -> das klappt auch wunderbar. Diese Simulationsdaten werden, da es in Zukunft tonnenweise Gitterpunkte geben wird, in Cell Arrays übergeben. Anschließend werden die relevanten Größen entdimensioniert.
Der nächste Schritt ist nun folgender und auch problematischer, hier wäre eine Hilfestellung extrem wünschenswert
Das Rechengitter, welches aus Ansys CFX stammt, ist NICHT äquidistant, weswegen es schwierig wird in Matlab weitere Berechnungen durchzuführen. Meine Idee daher: in MATLAB soll nun ein feineres äquidistantes Gitternetz (im angehängten Bild ROT) über das bestehende "alte" CFX- Netz (schwarz) gelegt werden. Die nun unbekannten Größen in den Zwischengitterpunkten im feineren MATLAB- Gitter sollen dann mittels linearer Interpolation interpoliert werden. Natürlich soll der gesamte Bereich mit dem neuen MATLAB- Gitter versehen werden...
Meine ursprüngliche Idee ist: ich genereiere mir zwei "diskrete" Koordinatenrichtungen, sprich Zeilenvektoren (im Programm Zeilen 77 und 78 ) und mache einfach eine lineare Interpolation mit interp1 (Zeilen 81-86)... da gibt es aber das Problem, dass die interpolierten Daten nun NaNs aufweisen, die mir die ganze Physik zerstören.... Eine Splineinterpolation macht auch keinen Sinn, da ich KEINE Polynome haben möchte, sondern diskrete Punkte.
Meine bisherigen Versuche mit Meshgrid und griddata scheitern schon alleine an den ziemlich großen 10000x10000 Matrizen, die in Zukunft noch viel, viel größer werden...
Ist es daher zweckmäßig mir "was eigenes" programmieren zu müssen oder gibt es da jemanden, der eine ähnliche Problematik erfolgreich lösen konnte???
Ich bin für jede Hilfe sehr dankbar!
Beschreibung: |
|
 Download |
Dateiname: |
Programm.zip |
Dateigröße: |
308.18 KB |
Heruntergeladen: |
460 mal |
Beschreibung: |
|
 Download |
Dateiname: |
matlabgitter.png |
Dateigröße: |
51.94 KB |
Heruntergeladen: |
704 mal |
|
|
|
|
|
Thomas84 |

Forum-Meister
|
 |
Beiträge: 546
|
 |
|
 |
Anmeldedatum: 10.02.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 15:44
Titel:
|
 |
|
|
nebula |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 19.02.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2008b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 16:57
Titel:
|
 |
Verdammt... bei R2008b kann ich "TriScatteredInterp" offenbar gar nicht nutzen...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 17:21
Titel:
|
 |
Hallo,
um auf das ursprüngliche Problem zurückzugehen: wenn interp1 NaN zurückgibt, dann bedeutet das i.d.R., dass man Werte außerhalb des Bereichs angefordert hat, für den es Werte gibt.
In dem Fall kannst du als Zusatzoption 'extrap' angeben, um trotzdem Werte zu bekommen. Es muss dir aber klar sein, dass Interpolation außerhalb des Datenbereichs (d.h. im Grunde Extrapolation) ein absolutes Glückspiel ist.
Grüße,
Harald
|
|
|
nebula |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 19.02.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2008b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 17:47
Titel:
|
 |
Das mit der Extrapolation ist mir schon klar, weswegen ich auch logischerweise keine durchführen werde...
Interessanterweise ist es so, wenn ich meine "Originaldaten" aus CFX mal plotte, gibt das die Gitterpunkte wieder, wie sie sein sollen, sprich: die Geometrie sieht genauso aus, wie in CFX- Post.
Wende ich nun die Interpolation interp1 auf mein feineres Gitter an und plotte diese beiden neuen Größen, so ist die Geometrie anscheinend zerschossen. Ich erhalte nicht die entsprechende Geometrie, sondern einfach eine kryptische Kurve bestehend aus zig Punkten. Erklären kann ich mir das gerade nicht, da die Syntax formal richtig ist.
In dem Codeschnipsel ist Yf0 ein 23006x1 Cell Array und zy 1x23006, genau wie Zf0 und zz...
Langsam glaube ich, dass ich hier auf dem Holzweg bin...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 23:53
Titel:
|
 |
Hallo,
ich verwende interp1 bevorzugt so, dass ich auch noch x-Werte mit übergebe, an denen ausgewertet werden soll, aber das mag eine persönliche Präferenz sein.
Was mich mehr wundert: Yf0 sollte an sich ein Double Array sein.
Grüße,
Harald
|
|
|
nebula |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 19.02.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2008b
|
 |
|
|
 |
|
Verfasst am: 20.02.2013, 11:27
Titel:
|
 |
|
 |
|
Ich stehe jetzt gerade auf dem Schlauch, was du mit einem Double Array meinst: Meinst du ein 2 dimensionales Array, sprich: Ich habe in dem Cell Array Yf0 X- und Y- Werte abgelegt oder wie?
Vielleicht sollte ich etwas genauer beschreiben, was ich mit dem linearen Interpolieren meine: Ich habe also eine Liste mit Koordinaten, z.B. Yf0 aus CFX vorliegen. Diese Koordinatenliste ist mir zu grob aufgelöst. Also möchte ich gerne zwischen jedem Punkt aus Yf0 noch ein paar mehr Punkte haben, die ich linear interpolieren will. In dem "Bildchen" sind die "0" die alten Stützpunkte aus Yf0 und die "x" die Zwischengitterpunkte, die ich aus den alten Daten interpolieren will.
Ich bin gerade verwirrt: Wenn ich nun also nur mein Raster für Yf0 verfeinern will, wozu brauche ich dann in dem Double Array z.B. die X- Koordinaten aus Xf0?
Die allgemeine Syntax ist doch:
wobei yi mein Interpolationsvektor an den Punkten xi ist. Der Stützstellenvektor x ist doch optional, d.h. wenn Y eine Matrix ist, dann wird die Interpolation spaltenweise ausgeführt.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.02.2013, 14:01
Titel:
|
 |
Hallo,
ich habe da gerade etwas mit der Syntax durcheinandergebracht. Dennoch bringt uns das vielleicht weiter.
Deine Syntax nimmt nun an, dass die Y-Werte zu x-Werten 1:N (N = Anzahl der Zeilen von Y) gehören. Ist das zutreffend? Wenn nicht, musst du die x-Werte als erstes Argument übergeben. Der Klarheit halber würde ich das immer tun.
Grüße,
Harald
|
|
|
nebula |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 19.02.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2008b
|
 |
|
|
 |
|
Verfasst am: 20.02.2013, 14:15
Titel:
|
 |
|
 |
|
Ich habe heute morgen vor der Mittagspause hier ein wenig rumgebastelt. Folgendes ist nach längerem Basteln zustande gekommen:
Meine (Roh-)Daten aus Ansys CFX, die in den Cell Arrays Yf0 und Zf0 abgelegt sind, sind ja keine Funktionen, sondern eine Menge an Punktkoordinaten. Dabei ist weiter zu beachten, dass diese Punktkoordinaten NICHT eindeutig sind, sondern ich habe z.B. 2 gleiche Yf0- Werte für einen Zf0- Wert. Die Mathematik schreibt einem vor, dass man zu jedem Yf0- Wert genau einen Zf0- Wert braucht. Also muss ich mir überlegen, dass die Y- und Z-Werte also Funktionen eines 3. Parameters "t" sind. Also muss ich dann MATLAB sagen, dass es die Interpolationen von (t,y) und (t,z) machen soll.
Damit das klappt, entnehme ich meine nn Datenpunkte in der Reihenfolge der CFX-Importdatei. Ich setze dabei voraus, dass das Zusammenfügen meiner neuen Datenpunkte (Y,Z) auch weiterhin meine CFX- Geometrie widerspiegeln. Als nächstes führe ich einen Parametervektor t=1:nn ein und meine verfeinerte Schrittweite T=1:stepsize:nn.
Prinzipiell macht dieser Algorithmus schon etwas ähnliches, was ich wirklich haben möchte... das eizige Problem ist, dass die itertierten Vektoren "Yfip" und "Zfip" immer noch nicht-äquidistant sind, ich aber für die weiteren Berechnungen äquidistante Gitterpunkte benötige. Gibt es da noch eine Möglichkeit diesen Code zu optimieren?
Viele Grüße
Sebastian
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.02.2013, 17:01
Titel:
|
 |
Hallo,
die interpolierten y-Werte sind ja normal nicht äquidistant, lediglich die x-Werte, zu denen sie gehören (wenn man das so will).
Wenn ich das richtig verstehe:
Momentan bekommst du Yfip für äquidistante T.
Wenn du für äquidistante Yfip die entsprechenden T haben willst, musst du im Grunde nur x- und y-Werte vertauschen
wobei mich die Verwendung von 'nearest' etwas verwundert.
Grüße,
Harald
|
|
|
nebula |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 8
|
 |
|
 |
Anmeldedatum: 19.02.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2008b
|
 |
|
|
 |
|
Verfasst am: 20.02.2013, 17:42
Titel:
|
 |
|
 |
|
Hi,
also ich habe bei interp1 mit den Interpolationsmethoden ein bisschen herumgespielt und bin zu dem Ergebnis gekommen, dass bei der Standardeinstellung -> linear meine zu simulierende Strömung merkwürdige Löcher aufweist. Auch alle anderen Methoden führen zu ähnlich absurden und daher physikalisch falschen Ergebnissen. Die einzige Methode, die mein Strömungsfeld korrekt abbildet ist offenbar 'nearest', auch wenn's dich verwundert
Ich für meinen Teil bin nun aber auch zufrieden mit der Interpolation, da ich mein Gitternetz nun einigermaßen Vergröbern/ Verfeinern kann.
Zum Thema von vorhin: Irgendwie war ich so auf die Koordinaten der Geometrie fixiert, dass ich schlichtweg vergessen hatte, mir die resultierende Strömung anzugucken... und um die geht es in meiner vorliegenden Arbeit in der Hauptsache! Die Geometrie spielt nur eine untergeordnete Rolle. Also wenn ich mir die Strömungsplots angucke und natürlich auch vorher brav die Geschwindigkeiten nach o.g. Schema interpoliere, so habe ich dann ein äquidistantes Gitter vorliegen.
Ich denke mal, das Thema ist somit auch geklärt!
Vielen Dank für die Hilfestellungen/ Anregungen
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|