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

2D-Plot mit Interpolation und farbcodiertem Verlauf

 

moongoblin
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2009, 14:24     Titel: 2D-Plot mit Interpolation und farbcodiertem Verlauf
  Antworten mit Zitat      
Hallo,

ich möchte einen 2D-Plot erzeugen, der dem angehängten Bild entspricht.
Für jede Stelle an der ein rotes Kreuz ist gibt es einen Vektor mit Daten im Zeitverlauf.
Der Plot soll nun so laufen, dass er zu einem anzugebenden Zeitpunkt t aus allen Vektoren den entsprechenden Wert nimmt, diese der jeweiligen "Stelle" zuordnet, zwischen den Werten interpoliert und den Verlauf dann mit Höhenlinien und farbcodiert darstellt.

Ich weiß leider nicht wie ich da rangehen soll.
Bisher schweben mir folgende Teilprobleme vor:
1. Wie erzeuge ich die Geometrie und die Zuordnung welcher Punkt mit welchem Vektor belegt wird?
2. Wie mache ich die Interpolation bezogen auf die Fläche zwischen den Punkten?
3. Wie erzeuge ich die Höhenlinien und die Farbcodierung?

Für detaillierte Tipps zum Vorgehen & zu nutzenden Befehlen wäre ich sehr dankbar.

2D-Map.JPG
 Beschreibung:

Download
 Dateiname:  2D-Map.JPG
 Dateigröße:  48.18 KB
 Heruntergeladen:  1280 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.12.2009, 21:04     Titel:
  Antworten mit Zitat      
Hallo,

kennst du CONTOURF?
Ich weiß nicht, wie deine Daten aussehen etc., kann mir aber vorstellen, dass damit ein großer Teil deiner Probleme gelöst wird.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2009, 12:55     Titel:
  Antworten mit Zitat      
Hallo,

also, ich bin bzgl. des Plots weitergekommen, die Darstellung über meshgrid und interp2 funktioniert ganz gut, u.U. auch mit contourf.
Problem: Um die Lage der Stützstellen zueinander (entsprechend meiner Geometrie) korrekt darzustellen, gibt es zwischen den Stützstellen der Ursprungsmatrix Punkte ohne Werte, d.h. x,y= 0,0 ist ein z-Wert zugeordnet und dann wieder 0,2,. 0,1 jedoch ist 'frei'.
Nun hätte ich gerne, dass die Funktion über diese leeren Stellen der Ursprungsmatrix einfach hinweginterpoliert, also von 0,0 zu 0,2. Das tut sie aber momentan nicht, sie sieht 0,1 als z=0 an und interpoliert entsprechend von der Stelle 0,0 zu 0,1 (also z=0) und dann weiter vo 0,1 zu 0,2. Dies verpasst meiner Oberfläche dann unschöne Dellen in Richtung z=0, die eigentlich nicht da sein dürfen.

Wo setze ich an um das zu verhindern?

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.12.2009, 15:31     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe die Frage nicht ganz.
Z ist ja eine rechteckige Matrix. Dass an einzelnen Stellen in dieser Matrix "nichts" steht, kann eigentlich nicht sein. Da kann höchstens 0 oder NaN stehen. In jedem Fall wird nichts anderes bleiben, als die Zeile oder Spalte, die diese Werte enthält, komplett zu löschen, oder die entsprechenden Einträge interpolieren zu lassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2009, 16:35     Titel:
  Antworten mit Zitat      
Ja klar, da steht 0 oder NaN. Aber in beiden Fällen interpretiert er es als 0 und sieht es als Stützstelle an.
Ich hab mich wohl nicht ganz klar ausgedrückt, versuche das nochmal mit Code zu erläutern:
Code:

position_X=[-4:1:4]; % Vektor x-Achse
position_Y=[4:-1:-4]; % Vektor y-Achse
[X, Y] = meshgrid (position_X,position_Y); % Matrizen X und Y werden erstellt, Hauptgitter in 1-Schritten

        %  O1   O2   O3   O4    O5    O7    O8    O9  O10 O11 I3  I6    I9    I12 M
position=[-1 4;-2 2;-4 0;-2 -2;-1 -4; 1 -4; 2 -2; 4 0;2 2;1 4;2 0; 0 -2; -2 0;0 2;0 0]; % Positionen
position_x=position(1:end,1); % Positionen x
position_y=position(1:end,2); % Positionen y

O5=zeros(15000,1); % Vektor O5 wird als Nullvektor(Referenzvektor) erstellt
T=[]; % leere Matrix, die dann die Werte der Vektoren enthält
T(1,4)=handles.O1(i);
T(1,6)=handles.O11(i);
T(3,3)=handles.O2(i);
T(3,5)=handles.I12(i);
T(3,7)=handles.O10(i);
T(5,1)=handles.O3(i);
T(5,3)=handles.I9(i);
T(5,5)=handles.M(i);
T(5,7)=handles.I3(i);
T(5,9)=handles.O9(i);
T(7,3)=handles.O4(i);
T(7,5)=handles.I6(i);
T(7,7)=handles.O8(i);
T(9,4)=O5(i);
T(9,6)=handles.O7(i);

%2D-Plot wird erzeugt
figure
xi=-4:0.2:4; % Interpolation in 0,2-Schritten
yi=xi;
[Xi,Yi]=meshgrid(xi,yi);
Zi=interp2(X,Y,T,Xi,Yi,'bicubic');
surf (Xi, Yi, Zi);
view([0 90]);
n=20;
contourf(Xi, Yi, Zi, n)
hold on
scatter(position_x,position_y,'r','+')
 


Z ist in meinem Fall T und eine rechteckige Matrix, wie du richtig gesagt hast. Ich kann aber keine Zeile oder Spalte weglassen, weil in jeder irgendwo was steht (s.o.). Folglich muss ich auch diese "Lücken" des Hauptgitters interpolieren, und nicht nur die Bereiche zwischen den Hauptgitterpunkten, da sonst die genannten "Dellen" entstehen.
Problem ist: Wie mache ich das?

Hoffe das wird jetzt klarer, weiß leider nicht wie ich das präziser beschreiben soll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.12.2009, 20:11     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist hier, dass eine Matrix, die mit [] "vorbelegt" und sukzessive weiterbelegt wird, an den nicht explizit belegten Stellen mit Nullen gefüllt wird. Abhilfe: Statt T = [];

Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2009, 10:01     Titel:
  Antworten mit Zitat      
Hab ich ausprobiert. Dann funktioniert aber interp2 nicht, sondern erzeugt für alle Zi nur NaNs, was zur Folge hat, dass die Oberfläche über surf bzw. contourf überhaupt nicht dargestellt wird.
Werde mal weiter experimentieren mit anderen Interpolationsfunktionen. Wenn du noch ne Idee hast, imemr her damit! Und danke schonmal für die Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.12.2009, 10:40     Titel:
  Antworten mit Zitat      
Sieht so aus, als ob interp2 nur interpoliert und nicht extrapoliert. Ich sehe hier das Problem, dass du vergleichsweise wenig Daten hast.
Leider kann man mit deinem Beispiel schlecht experimentieren. Ich könnte mir aber vorstellen, dass es hilft, die Ecken T(1,1), T(1,9), T(9,1) und T(9,9) zu definieren.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
moongoblin
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 29.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2009, 11:34     Titel:
  Antworten mit Zitat      
Hab ne Lösung gefunden: Benutzung von griddata statt interp2. Da muss ich im Bezug auf das Hauptgitter nur mit Vektoren arbeiten statt mit Matrizen, so dass alle nicht belegten Punkte des Gitters einfach nicht vorkommen.

Danke für die Diskussion, im Austausch denkt sich's immer leichter!
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.