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

Komplexe Funktion plotten

 

Redwall
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 22.08.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2021, 16:12     Titel: Komplexe Funktion plotten
  Antworten mit Zitat      
Hallo,

ich möchte die Funktion:

Re [ U_a \cdot exp(-\gamma\cdot z)\cdot exp(jwt)+U_b\cdot  exp(\gamma\cdot z)\cdot exp(jwt)]

mit \gamma=sqrt((R+jwL)(G+jwC)) plotten.


bzw. etwas schöner visualisiert: http://people.ee.ethz.ch/~martidi/L+F_Skript_10.pdf#page=20 unter Kapitel 4.2


Geplottet soll die Funktion wie folgt aussehen:

http://people.ee.ethz.ch/~martidi/L+F_Skript_10.pdf#page=25

und davon die Abbildung c - der mittlere Graph

Ich habe versucht das in Matlab zu coden und das Programm wird auch ausgeführt, allerdings erhalte ich nicht das gewünschte Ergebnis.

Mein Code:

Code:

R=50;
L=100e-3;
G=60e-6;
C=100e-6;
f=50;
w=2*pi*f;


k=(0:0.1:4*pi);
t=(0:0.5:10);
u1=2;
u2=2;
a= sqrt((R+(1i*w*L))*(G+(1i*w*C)));

[X,Y]=meshgrid(t,k);
f=@(X,Y)(real(u1.*exp(-a*X).*exp(1i*w*Y))+(u2.*exp(a*X).*exp(1i*w*Y)));
Z=f(X,Y);
plot3(X,Y,Z);

xlabel(' x(t)')
ylabel(' y(t)')
zlabel(' z(t)')
 


Anschließend möchte ich von dieser Funktion noch den Betrag plotten. Die Abbildung dazu sieht man ebenfalls auf der Seite 25 des obigen Links (vgl. Abbildung c -> |U|).

Würde mich freuen, wenn mir jemand weiterhelfen könnte, da ich erst seit kurzem mit Matlab arbeite.

Sollten Informationen fehlen und/oder etwas unklar formuliert worden sein, bitte einfach melden. Smile

Vielen Dank und Grüße.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.08.2021, 16:59     Titel:
  Antworten mit Zitat      
Hallo,

generell würde ich empfehlen, Variablennamen zu verwenden, die an den Formeln angelehnt sind. Das macht das deutlich nachvollziehbarer.

Mögliche Probleme:
* real bezieht sich bei momentaner Klammernsetzung nur auf den ersten Summanden
* Die Matrix zu t ist X. Du verwendest aber exp(1i*w*Y). Möglicherweise hast du die beiden genau vertauscht?

Eine weitere Frage ist, wie die berechneten Punkte miteinander verbunden werden sollen. plot3 arbeitet standardmäßig spaltenweise. Das ist wohl nicht das, was im PDF gemacht wird. Davon abgesehen, dass dort anscheinend Realteil in Abhängigkeit von z und Imaginärteil geplottet wird.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Redwall
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 22.08.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2021, 17:50     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank, das hat mir schonmal sehr weitergeholfen.

Zitat:

Mögliche Probleme:
* real bezieht sich bei momentaner Klammernsetzung nur auf den ersten Summanden
* Die Matrix zu t ist X. Du verwendest aber exp(1i*w*Y). Möglicherweise hast du die beiden genau vertauscht?


Mein jetztiger Code:

Code:

R=5;
L=100e-3;
G=0;
%G=60e-6;
C=100e-6;
f=50;
w=2*pi*f;


z=(0:0.1:20*pi);
t=(0:0.5:10);
Ua=2;
Ub=2;
gamma= sqrt((R+(1i*w*L))*(G+(1i*w*C)));

[X,Y]=meshgrid(z,t);
f=@(X,Y)(real(Ua.*exp(-gamma*X).*exp(1i*w*Y))+real(Ub.*exp(gamma*X).*exp(1i*w*Y)));
Z=f(X,Y);
surf(X,Y,Z);

xlabel(' x(t)')
ylabel(' y(t)')
zlabel(' z(t)')
 


Damit bekomme ich nun schonmal den Verlauf der Betragsfunktion. Smile

Zitat:

Eine weitere Frage ist, wie die berechneten Punkte miteinander verbunden werden sollen. plot3 arbeitet standardmäßig spaltenweise. Das ist wohl nicht das, was im PDF gemacht wird. Davon abgesehen, dass dort anscheinend Realteil in Abhängigkeit von z und Imaginärteil geplottet wird.


Das stimmt natürlich. Meine Frage wäre dann, wie ich die Funktion bzw. den plot-Befehl umzuschreiben habe, damit die Funktion in Abhängigkeit von z und Imaginärteil geplottet wird bzw. welchen plot du dafür empfehlen würdest.

Grüße,
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

mit
Code:
sieht der generierte Plot hübscher aus.

Zitat:
Damit bekomme ich nun schonmal den Verlauf der Betragsfunktion.

Du bekommst die Betragsfunktion? Du plottest aber doch den Realteil?

Mich wundert zudem, dass die Zeilen von Z alle fast gleich sind. Ist das das, was du erwartest?

Du kannst den Imaginärteil ähnlich wie den Realteil berechnen:
g=@(X,Y)(imag(Ua.*exp(-gamma*X).*exp(1i*w*Y))+imag(Ub.*exp(gamma*X).*exp(1i*w*Y)));
Z2=g(X,Y);
Bei Z2 sind aber dann wiederum die Spalten sehr ähnlich.

Dann ginge:
surf(X,Z2,Z);

Bedingt durch die Ähnlichkeit von Zeilen bzw. Spalten in Z und Z2 sieht das aber halt nicht nach einer Fläche aus.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Redwall
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 22.08.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2021, 16:11     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
mit:
Code:
sieht der generierte Plot hübscher aus.


vielen Dank. Das macht visuell gleich ein viel besseren Eindruck! Smile


Zitat:
Du bekommst die Betragsfunktion? Du plottest aber doch den Realteil?


Das stimmt. Der Satz ist unglücklich bzw. mehr oder weniger unüberlegt formuliert. Ich hatte anfangs vor die Dämpfung anhand der Betragsfunktion darzustellen, allerdings reicht mir dafür auch der Realteil der Funktion.

Den Imaginärteil habe ich gestern genauso wie du noch berechnet bekommen. Aber vielen Dank für die Bestätigung. Smile

Zitat:
Mich wundert zudem, dass die Zeilen von Z alle fast gleich sind. Ist das das, was du erwartest?


Also rein visuell werden durch den Code die Verläufe der jeweiligen Teilwellen dargestellt. Dies entspricht meines Erachtens im PDF: http://people.ee.ethz.ch/~martidi/L+F_Skript_10.pdf#page=25 -> Kurvenverlauf b)

Verglichen mit dem Verlauf unter c) zeigen sich dann natürlich einige Unterschiede. Ich weiß nicht ob Matlab vlt. Schwierigkeiten bei der Überlagerung hat, denn wenn ich die gesamte Funktion plotte, bspw.:

Code:
g=@(X,Y)(imag(Ua.*exp(-gamma*X).*exp(1i*w*Y))+imag(Ub.*exp(gamma*X).*exp(1i*w*Y)));


bekomme ich den gleichen Verlauf wie wenn ich nur den letzten Term von g plotte, also:

Code:
g=@(X,Y)imag(Ub.*exp(gamma*X).*exp(1i*w*Y));


Der Verlauf der beiden Teilwellen sieht bisher aber plausibel aus. Ich habe diese nochmal separat gecodet:

Code:

clear all;
close all;
clc;
%-----------------Parameter-----------------

R=5;
L=100e-3;
G=0;
%G=60e-6;
C=100e-6;
f=50;
w=2*pi*f;


z=(0:0.1:15*pi);
t=(0:0.5:10);
Ua=2;
Ub=2;
gamma= sqrt((R+(1i*w*L))*(G+(1i*w*C)));

%----------------------Vorwärts laufende Welle ---------------------
[X,Y]=meshgrid(z,t);
f=@(X,Y)(real(Ua.*exp(-gamma*X).*exp(1i*w*Y)));
Z1=f(X,Y);
g=@(X,Y)(imag(Ua.*exp(-gamma*X).*exp(1i*w*Y)));
Z2=g(X,Y);
figure(1);
surf(X,Z2,Z1);
%shading interp

anArrow = annotation('arrow') ;
anArrow.Parent = gca;  
anArrow.Position = [0, 0, 45, 0] ;

title ('Vorwärts laufende Welle');
xlabel(' x ')
ylabel(' Real(U)')
zlabel(' Imag (U)')

%----------------------Rückwärts laufende Welle --------------------
[X,Y]=meshgrid(z,t);
f=@(X,Y)(real(Ua.*exp(gamma*X).*exp(1i*w*Y)));
Z1=f(X,Y);
g=@(X,Y)(imag(Ua.*exp(gamma*X).*exp(1i*w*Y)));
Z2=g(X,Y);
figure(2);
surf(X,Z2,Z1);
%shading interp

anArrow = annotation('arrow') ;
anArrow.Parent = gca;  
anArrow.Position = [0, 0, 45, 0] ;

title ('Rückwärts laufende Welle');
xlabel(' x ')
ylabel(' Real(U)')
zlabel(' Imag (U)')
 


Wenn dir noch eine Idee kommt, wie man den Verlauf unter c) simulieren könnte lass es mich bitte wissen, ansonsten würde ich aber erstmal mit den Teilwellen arbeiten. Diese sollten zumindest schon einmal ausreichen, um meinen Sachverhalt zu erläutern.

Ansonsten versuche ich momentan in die Graphen der beiden Teilwellen noch einen Pfeil beginnend vom Ursprung aller drei Achsen in x-Richtung zu legen. Dies hat auch soweit funktioniert (sieht obigen Code), allerdings dreht sich die Pfeilspitze mit, je nachdem wie ich den plot drehe. Kann man diesen fixieren, so dass er nur in x-Richtung zeigt?

Grüße
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.08.2021, 18:05     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich weiß nicht ob Matlab vlt. Schwierigkeiten bei der Überlagerung hat, denn wenn ich die gesamte Funktion plotte

Ich denke eher, dass das Problem die unterschiedliche Skalierung ist. Die Vorwärtswelle hat Real- und Imaginärteile von betragsweise max. 2, die Rückwärtswelle von max. 100. Die 2 sieht man halt auf der Skala von 100 kaum.

Zitat:
Wenn dir noch eine Idee kommt, wie man den Verlauf unter c) simulieren könnte

Ich verstehe nicht, was dort gemacht werden soll. Die Achsenbeschriftung ist ja sehr ähnlich wie in der Graphik darüber, nur das Bild sieht recht kreativ aus.

Zitat:
allerdings dreht sich die Pfeilspitze mit, je nachdem wie ich den plot drehe.

Man dreht nicht den plot, sondern das gesamte Koordinatensystem. Du könntest höchstens versuchen, den Pfeil außerhalb des Koordinatensystems zu erstellen.
Oder den Pfeil selbst erstellen, z.B. mit die Linie an sich mit plot und die Pfeilspitze mit fill oder so.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Redwall
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 22.08.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2021, 18:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

Zitat:
Ich denke eher, dass das Problem die unterschiedliche Skalierung ist. Die Vorwärtswelle hat Real- und Imaginärteile von betragsweise max. 2, die Rückwärtswelle von max. 100. Die 2 sieht man halt auf der Skala von 100 kaum.


+

Zitat:
Ich verstehe nicht, was dort gemacht werden soll. Die Achsenbeschriftung ist ja sehr ähnlich wie in der Graphik darüber, nur das Bild sieht recht kreativ aus.


Super, dass hat mir geholfen. Ich hatte die Amplituden Ua und Ub anfangs auf denselben Wert gesetzt. Weiterhin war in meinem Code für die Vor-und rückwärts laufende Welle der Fehler, dass ich für beide die gleiche Amplitude (Ua) verwendet habe (Copy&Paste...). Auch habe ich einfach mal die Frequenz reduziert, dann sieht das ganze gleich viel ansehnlicher aus. Very Happy

Code:

clear all;
close all;
clc;

%-----------------Parameter-----------------

R=5;
L=100e-3;
G=0;
%G=60e-6;
C=100e-6;
f=25;
w=2*pi*f;

z=(0:0.1:15*pi);
t=(0:0.5:10);
Ua=100;
Ub=2;
gamma= sqrt((R+(1i*w*L))*(G+(1i*w*C)));

[X,Y]=meshgrid(z,t);
f=@(X,Y)(real(Ua.*exp(-gamma*X).*exp(1i*w*Y))+real(Ub.*exp(gamma*X).*exp(1i*w*Y)));
Z1=f(X,Y);
g=@(X,Y)(imag(Ua.*exp(-gamma*X).*exp(1i*w*Y))+imag(Ub.*exp(gamma*X).*exp(1i*w*Y)));
Z2=g(X,Y);

figure(4);
surf(X,Z2,Z1);
shading interp;

xlabel(' x ')
ylabel(' Real(U)')
zlabel(' Imag (U)')

 


Zitat:
Man dreht nicht den plot, sondern das gesamte Koordinatensystem. Du könntest höchstens versuchen, den Pfeil außerhalb des Koordinatensystems zu erstellen.
Oder den Pfeil selbst erstellen, z.B. mit die Linie an sich mit plot und die Pfeilspitze mit fill oder so.


Alles klar, werde mir das mal anschauen.

Grüße
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.08.2021, 22:22     Titel:
  Antworten mit Zitat      
Hallo,

mit mesh sieht das Bild auch schön aus, und mehr wie die Graphik im PDF. Oder auch mit der Eigenschaft "FaceAlpha" spielen...

Und hier noch ein Pfeil:
Code:
hold on
plot3([0, 45], [0, 0], [0, 0], "k", "LineWidth", 3)
fill3([40 40 45 40], [-5 5 0 -5], [0 0 0 0], "k")
hold off


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Redwall
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 22.08.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2021, 12:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

"mesh" gefällt mir für die Grafiken bisher am besten. Auch der Pfeil ist genau das wonach ich gesucht habe. Vielen Dank für die ganze Unterstützung!

In den kommenden Tagen werde ich versuchen das ganze numerisch zu lösen, mal schauen was das gibt. Smile

Grüße
Martin
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 - 2024 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.