WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gegriddete Geodaten nach Werten durchsuchen

 

Herbert

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 16:50     Titel: Gegriddete Geodaten nach Werten durchsuchen
  Antworten mit Zitat      
Hallo!

Ich habe ein Problem und hoffe mir kann hier jemand helfen. Es gilt eine große x,y,z-Matrix zu analysieren. In der Matrix stehen Temperaturmesswerte. Ich suche nun die Tiefe (Z-Koordinate) einer bestimmten Grenztemperatur in jedem y-Schnitt....

Leider wäre es ja nun ein großer Zufall wenn diese Grenztemperatur exakt an einem Gitterpunkt vorliegen würde, deswegen sind alle meine Versuche mit
Code:
find(tempData == grenzTemp)
fehlgeschlagen.

Muss ich jetzt händisch wischen allen gitterpunkten interpolieren um die Grenztemperaturen zu finden? Nicht nur dass das Seiten Code produziert, das ist doch auch tierisch rechenintensiv, oder?


Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2011, 17:12     Titel:
  Antworten mit Zitat      
Hallo,
was genau verstehst du unter Grenztemperatur? Ich bin um ehrlich zu sein nicht ganz sicher, nach was du suchen willst.
Suchst du alle Werte über einer bestimmten Grenze, dann setze einfach in find() ein >= Zeichen.
Oder handelt es sich nur um kleine Rundungs- bzw. Rechenungenauigkeiten deiner Daten bzw. durch Matlab aufgetreten?
Oder willst du wissen, wo der Übergang zu einer bestimmten Temperatur stattfindet? Das könnte dann, je nachdem wie die Daten aufgebaut sind, etwas komplizierter werden. Wird dieser Wert nur einmal überschritten bzw. ist bekannt wie oft er überschritten wird usw.
Könntest du das etwas genauer definieren?
mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Herbert

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2011, 01:42     Titel: Hier mehr Details
  Antworten mit Zitat      
Hallo Ajax!

Zunächst mal DANKE für die Antwort! Konkret geht es um Messdaten in einem Wasserbecken. Nur habe ich halt nicht zu allen Orten einen Messwert, sondern nur an bestimmten Gitterpunkten. So ist die 300 Meter tiefe Wassersäule nur auf 40 Leveln aufgelöst, das bedeutet ich habe in der Tiefe nur all 300/40 Meter einen Messwert.

Jetzt suche ich sozusagen eine bestimmte isotherme im ganzen Becken (Frage: Wie tief liegt die 0.3°C Wasserschicht?) Im Idealfall fürde ich am ende gerne einen Oberflächenplott ideser Schicht im Becken haben. Ist das Problem damit besser beschrieben?

Nun ist natürlich an keinem Messpunkt die Temperatur exakt 0.3°... Der Wert liegt halt immer zwischen zwei Gitterpunkten.
Ich stelle mir jetzt vor dass ich zwischen den Gitterpunkten interpoliere um herauszufinden wo genau zwischen diesen Punkten denn die gesuchte Temperatur erreicht wird (meinetwegen nur linear interploiert)

Aber dabei komm ich nicht weiter..
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2011, 09:12     Titel:
  Antworten mit Zitat      
Hallo,
also wenn ich dich richtig verstehe, dann hast bzw. willst du eine Art "Höhenprofil" für bestimmte Temperaturen. Du hast ein Wasserbecken, bei dem an definierten Orten an verschiedenen Tiefen jeweils die Temperaturen gemessen wurden. Und nun willst du eine Art Oberfläche durch eine bestimmte Temperatur in dieses Becken legen. Stimmt das soweit (ist ein bißchen blöd in Worte zu fassen... Wink ).

Also - falls ich es richtig verstanden habe - musst du zwei Mal interpolieren. Die erste Interpolation ist ein-dimensional entlang der Temperaturmessungen an jedem Ort. Hierzu kannst du interp1() verwenden. Jetzt hast du an jedem Ort eine (interpolierte) Wassertiefe mit der jeweiligen Temperatur.
Jetzt folgt eine zwei-dimensionale Interpolation über die Wassertiefen bei der vorgegebenen Temperatur. Hierfür kannst du interp2() oder griddata() verwenden. Auf diese Weise hast du über das Becken ein (Wasser-)Tiefenprofil bei einer bestimmten Temperatur gelegt.

Habe ich das richtig verstanden bzw. hilft dir das weiter? Oder wo liegt das Problem genau?
mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Herbert

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2011, 12:42     Titel:
  Antworten mit Zitat      
Hallo Ajax!

Ich glaube du hast mich ganz richtig verstanden, zumindest klingt Deine Beschreibung mit dem Höhenprofil ganz gut! Wink

Der Tip mit interp2 und gridddata scheint mir schon zu helfen.... Zumindest wenn ich mir die Hilfe zu den Funktionen so ansehe. Ich versuche mal damit weiter zu kommen. Sonst melde ich mich nohc einmal.

Grüße und vielen Dank!
 
Herbert

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2011, 16:34     Titel:
  Antworten mit Zitat      
So, da bin ich wieder.

Also ich habe die vorliegenden Daten nun einmal auf ein deutlich feineres Grid interpoliert.
Code:

[XI,YI,ZI] = meshgrid(temp.dimensions(2).data(1):1:temp.dimensions(2).data(temp.dimensions(2).length),temp.dimensions(1).data(1):1:temp.dimensions(1).data(temp.dimensions(1).length),temp.dimensions(3).data(1):0.1:temp.dimensions(3).data(temp.dimensions(3).length) );
VI = interp3(temp.dimensions(2).data,temp.dimensions(1).data,temp.dimensions(3).data, temp.data(:,:,:,100),XI,YI,ZI);


Das funktioniert wunderschön und ich kann mir tolle Plots in §D dazu ansehen und so weiter...
ABER nach wie vor ist nicht gesagt dass es zu jeder x,y-Koordinate eine Tiefe gibt bei welcher exakt der gesuchte Temperaturwert erreicht ist. Klar, ich könnte theoretisch das Grid unendlich fein auflösen und dadurch sicherstellen dass irgendein Gridpunkt die Temperatur exakt annimmt, aber dass kanns doch nicht sein...

Eigentlich suche ich ja keine Methode die Daten auf ein anderes Grid zu interpolieren, sondern eine Methode das Grid (die Koordinaten) auf einen bestimmten Wert zu interpolieren....

Die Frage lautet im Prinzip: "Bei x= 10, y= 20 wird die temperatur C= 0.5 Grad in welcher Tiefe erreicht? Und das für alle x,y..."

Denke ich falsch?
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2011, 11:04     Titel:
  Antworten mit Zitat      
Hallo Herbert,

ich muss zugeben, dass ich aus deinem Beispiel nicht ganz schlau werde. Aber warum verwendest du eine 3D Interpolation? Ich würde, wie gesagt, an jedem Punkt erst einmal 1 D interpolieren. So kannst du - um dein Beispiel zu verwenden - an jedem (x,y) Koordinatenpunkt anhand deiner Säule die definierten Temperaturen bestimmen, also C= 0.5 Grad auf einer Tiefe von 1,2345m. In diesem Fall kannst du die interessanten Temperaturpunkte "einstellen", indem du die Werte an diesen Stellen durch deine 1D Interpolation bestimmst. Damit ist auch immer die exakte Temperatur in einer Säule vorhanden und du kannst wiederum mit find() arbeiten um die Tiefe zu berechnen. Verstehst du was ich meine? Oder soll ich mal ein kleines Beispiel aufsetzen?

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Herbert

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 14:57     Titel: Versteh ich nicht
  Antworten mit Zitat      
Hi!

Och man, wie doof dass ich nicht vernünftig erklärt kriege was ich meine. Ich fürchte aber auch ich verstehe Deinen Ansatz nicht ganz. Wink

Wenn ich in einem 3D Gitter anfange für jeden Punkt eindimensional zu interpolieren, dann muss ich das doch für alle Nachbarn machen und habe am Ende 3D interpoliert.... Oder nicht?

Oder meinst Du ich sollte nur entlang der Z- (also Tiefen-) Achse innterpolieren.... Dann habe ich zu jeder horizontalen Koordinate einen Vektor in welchem ich die exakte Tiefe finden kann..... HMMM... ich glaube das klingt garnicht so schlecht....

Das probiere ich!

DANKE!!!
 
Herbert

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 15:08     Titel: hÄÄ?
  Antworten mit Zitat      
Ich schon wieder!

Ich versuche noch das umzusetzen, lande da aber an dem Punkt dass ich die eindimensionale integration natürlich dann auch für jeden x,y Punkt machen muss... Das sind bei 80*65 Punkten ganz schön viele..... Eine doofe for-Schleifen-Verschachtelung ist das Resultat.....

ist das das Wahre?
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2011, 15:37     Titel:
  Antworten mit Zitat      
Genau das hatte ich gemeint mit 1D Interpolation. Ich fürchte auch, dass du bei diesem Ansatz um die 80*65 Punkte nicht herum kommst. Wenn die Messpunkte immer an der selben Stelle sind und du sehr häufig diese Interpolation brauchst, dann kannst du evtl. Zeit sparen indem du die Interpolation selber programmierst und dann auf die festgelegten Stellen optimierst. Auch wenn ich jetzt nur vermuten kann, aber dann sollte die eigentliche Interpolation nicht viel mehr als eins zwei Multiplikationen und Additionen sein - und die gehen ja wirklich schnell.
Allerdings ist die 1D Interpolation auch so schon relativ schnell...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.