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 funktionalen Grenzen im Meshgrid

 

Hans_Peter
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2014, 01:37     Titel: 2D_Plot mit funktionalen Grenzen im Meshgrid
  Antworten mit Zitat      
Hallo Zusammen,

ich taste mich derzeit langsam an das arbeiten mit MatLab ran und stehe momentan vor einigen Problemen. Bedeutet ich bin blutiger Anfänger.

Ich versuche für ein Projekt der Uni ein Vektorfeld ausschließlich in einem bestimmten durch eine 2 Funktionen abgegrenzen Gebiet darzustellen. Diese sind:
y_1=10./x
y_2=30./x
im Intervall 0<x<=10, 0<y<=10.

Die Vektoren sind gegeben durch
u=0,1*x
v=-0,1*y

Mein momentaner Ansatz besteht daraus das meshgrid auf die genannte Grenzen zu limitieren. Sieht momentan folgendermaßen aus:
[x,y] = meshgrid(0:x_step:10,y_1:y_step:y_2);

wobei die Schrittweite vorher definiert ist.

Leider führt dieser Ansatz nicht zum gewünschten Ergebnis.
Das Plotten wird mittel quiver(x,y,u,v) durchgeführt.

Mittlerweile ist mein Latein am Ende und ausgiebiges googln hat auch noch nicht den gewünschten Erfolg bereitet.

Ich hoffe ihr könnt mir weiterhelfen.
Lg Jan
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 19.03.2014, 14:15     Titel: Re: 2D_Plot mit funktionalen Grenzen im Meshgrid
  Antworten mit Zitat      
Könntest du bitte ein lauffähiges Minimalbeispiel posten?
Was genau erwartest du, wie wäre das gewünschte Ergebnis?

Wenn ich nur die für mich nachvollziehbaren Infos rausziehe, komme darauf und das läuft:
Code:
[x,y] = meshgrid(0:0.5:10,0:0.5:10);
u = 0.1*x;
v = -0.1*y;
quiver(x,y,u,v)

_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Hans_Peter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2014, 15:16     Titel:
  Antworten mit Zitat      
Hallo Martina,
der bisherige Code sieht folgendermaßen aus:

x_max = 10;
y_max = 10;
x_step = 0.2;
y_step = 0.2;
dim_x = (x_max)/x_step;
dim_y = (y_max)/y_step;


[x,y] = meshgrid(0:x_step:x_max,0:y_step:y_max);

a = 0.1;

u = zeros(dim_x+1,dim_y+1);
v = zeros(dim_x+1,dim_y+1);


u=a*x;
v=-a*y;



figure(1)
grid on
quiver(x,y,u,v)
axis tight

Dieser stellt das gesamte Vektorfeld dar (gleiches Ergebnis wie in deinem Code).
Was ich möchte ist, dass nicht das gesamte Vektorfeld dargestellt wird sondern nur innerhalb der folgenden Grenzen:
y=10/x und y=30/x
Zum besseren Verständnis, die Grenzen stellen die Wände eines Krümmers da in welchem eine Strömung stattfindet.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 19.03.2014, 21:34     Titel:
  Antworten mit Zitat      
Hans_Peter hat Folgendes geschrieben:

Dieser stellt das gesamte Vektorfeld dar (gleiches Ergebnis wie in deinem Code).
Was ich möchte ist, dass nicht das gesamte Vektorfeld dargestellt wird sondern nur innerhalb der folgenden Grenzen:
y=10/x und y=30/x
Zum besseren Verständnis, die Grenzen stellen die Wände eines Krümmers da in welchem eine Strömung stattfindet.

D.h. du möchtest ein Schräg verlaufendes "Band" als Bereich dargestellt haben?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoltan_Kull

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2014, 21:46     Titel:
  Antworten mit Zitat      
Hallo, ich sitzte im gleichen Kurs und muss also die oben genannte Aufgabe ebenfalls lösen.

@ Martina: Ja richtig. Dein "Band" ist quasi ein Rohr (im 2D Fall), durch das ein Gas (dargestellt durch die Vektorpfeile) strömt. Wie können die Vektorpfeile NUR im Rohr (also zwischen den beiden Graphen) dargestellt werden?

Danke
 
Nicolas
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2014, 22:42     Titel:
  Antworten mit Zitat      
Hallo!

Die vorgehensweise, die zum Ziel führt ist die folgende:

Zunächst Matrizen erstellen, welche die X-Position und Y-Position jedes Wertes im Feld definieren, z.B. so:
Code:
% Erzeuge Felder mit Ortsinformationen:
x_step = 0.1;
y_step = 0.1;

x = 0 : x_step : 10;
y = 0 : y_step : 10;

[x, y] = meshgrid(x, y);


Dann könnt ihr daraus mit hilfe eurer gegebenen Abhängigkeit das Vektorfeld berechnen, z.B. so:
Code:
% Erzeuge Vektorfelder:
u = 0.1 .* x;
v = -0.1 .* y;


Nun wollt ihr das Vektorfeld nur für einen Teilbereich der Matrix anzeigen, welcher zwei Bedingungen erfüllt, nämlich dass die y-Position innerhalb eines Intervalls liegt, welches wiederum von der x-Positon abhängig ist.

Deshalb berechnet ihr erstmal die Intervallgrenzen für jeden Wert des Vektorfeldes:
Code:
% Erzeuge die Grenzwerte der Bedingung:
y_1 = 10 ./ x;
y_2 = 30 ./ x;


Anschließend könnt ihr eine Maske berechnen, die mittels Wahrheitswerten angibt, ob der jeweilige Eintrag des Vektorfeldes im Intervall liegt oder nicht:
Code:
% Erzeuge Maske, innerhalb welcher die Bedingung erfüllt ist,
% dass y_1 < y < y_2:
Mask = (y_1 < y) & (y < y_2);


Sodass ihr mit dem Aufruf, wie folgt euer gewünschtes Ergebnis erhaltet:
Code:
% Zeichne Vektorfeld für Werte innerhalb der Maske:
quiver(x(Mask), y(Mask), u(Mask), v(Mask))


Freundliche Grüße,
Nicolas
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoltan_Kull

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2014, 23:49     Titel:
  Antworten mit Zitat      
Hallo Nicolas,

vielen Dank, das hat geklappt und war sehr toll erklärt. Falls du noch etwas Zeit opfern könntest:

Neben dem Vektorfeld sollen die Stromlinien (mit streamslice) des durch das Rohr strömende Gas in einem weiteren Diagram dargestellt werden. Das habe ich hiermit realisiert und funktioniert soweit:

Code:

figure(2)
grid on
density = 10;                                    %Anzahl der Stromlinien
streamslice(x, y, u, v, density)            %Darstellung der Stromlinien
 


Zuletzt sollen auch die Stromlinien nur in der Begrenzung, die auch für das Vektorfeld galt, dargestellt/angezeigt werden.
Ich habe es mal hiermit versucht, aber in der entsprechenden figure wird nichts angezeigt:

Code:

figure(3)
grid on
density = 10;
streamslice(x(Mask), y(Mask), u(Mask), v(Mask), density)            
 


Offensichtlich verhält sich streamslice vom input her anders als quiver?! Gibt es hier eine (schnelle, einfache) Lösung?

Vielen Dank!
 
Nicolas
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 12.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2014, 00:34     Titel:
  Antworten mit Zitat      
Schau einmal in die Hilfe von streamslice.
Dort ist beschrieben, wie es möglich ist, Startpunkte der streamlines zu übergeben.
Das wird dich zum gewünschten Ergebnis führen.

Grüße,
Nicolas
Private Nachricht senden Benutzer-Profile anzeigen
 
Zoltan_Kull

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2014, 02:11     Titel:
  Antworten mit Zitat      
Leider bringt mich die Hilfe zu den streamslices nicht weiter. Ich weiß nicht, was mir die Startwerte für die Begrenzungen bringen. Wie bei den Vektoren oben, sollen nur die Stromlinien angezeigt werden, die zwischen
Code:
y_1 = 10 ./ x;
y_2 = 30 ./ x;

liegen.

Kannst du etwas genauer werden? :-/

Danke
 
Hans_Peter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2014, 19:05     Titel:
  Antworten mit Zitat      
Herzlichen Dank für die Hilfe, konnte bis dahin alles lösen.
Allerdings stehe ich jetzt vor dem selben Problem wie mein Vorredner.
Ich habe versucht mit Hilfe von:

streamslice(x,y,u,v,startx,starty)

Die Startpunkte der Stromlinien festzulegen. Das führte allerdings zu einem Problem im Programm folgender Art.

Error using streamslice (line 138)
U,V,W must all be a 3D arrays.

Error in Name (line 4Cool
streamslice(x,y,u,v,xs,10)

wobei 10 den Startpunkt in y-Richtung angibt und xs die variable Starposition in X-Richtung.

Mittlerweile bin ich umgestiegen auf eine For-Schleife und der streamline-Funktion, dies führt zwar zum gewünschte Ergebnis, allerdings ohne direction-arrows und ohne eine Einheitlichkeit innerhalb der Arbeit.

Zu meinen Fragen:
1. Ist es möglich gegebenen Sachverhalt mit der Streamslice-Funktion darzustellen?

2. Worin liegt der Unterschied in der Streamslice- und Streamline-Funktion?

Nochmal vielen Dank für die Hilfe und Zeit.

Lg Jan
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.