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

Gerade, ungerader Anteil.

 

bandchef
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 13.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2013, 15:29     Titel: Gerade, ungerader Anteil.
  Antworten mit Zitat      
Ich hab hier eine Aufgabe:

Gegebene Funktion: x(n) = n mod p. Stellen sie den Signalverlauf für n = -20 ... 20 und die Periode p=10 dar.

hier der Code:

Code:

clear all;
close all;

n = [-20:20];
p = 10;

figure;
hold on;

for i=1:1:41
    x(i) = mod(n(i), p);
end

plot(n, x);
 


Weitere Aufgabe: Zerlegen sie x(n) in einen ungerade xu(n) und einen geraden Anteil xg(n). Stellen sie xu(n) und xg(n) dar zusammen mit x(n) dar.

ungerade ist definiert als: xu(n) = -xu(-n); gerade ist definiert als: xg(n) = xg(-n)

Ich hab mir natürlich auch schon Gedanken zur erweiterten Aufgabe gemacht, was aber einen ziemlich chaotischen Graph gibt:

Code:

clear all;
close all;


n = [-20:20];
p = 10;
gerade = [1:21];
ungerade = [1:20];

figure;
hold on;

for i=1:1:20
    if(mod(i, p) == mod(-i, p))
        gerade(i) = i;
        ungerade(i) = 0;
    elseif(mod(i, p) == (-mod(-i, p)))
        ungerade(i) = i;
        gerade(i) = 0;
    end
end

gerade(21) = 0;

for i=1:1:41
    x(i) = mod(n(i), 10);
end

plot(n, [gerade, ungerade]);
hold on;
plot(n, x);
 


Wie kann man das hier machen? Gibt's dafür eine Funktion?
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.10.2013, 17:02     Titel: Re: Gerade, ungerader Anteil.
  Antworten mit Zitat      
Hallo bandchef,

Zunächst empfehele ich, wie immer, das sinnfreie "clear all" wegzulassen. Es löscht u.a. auch alle Breakpoints, aber alles, was das Debuggen behindert, ist ein Feind des Programmierers.

Was genau gefällt Dir denn nicht an der Lösung? Vielleicht dass die eigentlich separaten Punkte durch Linien verbunden werden?
Dann könntest Du entweder statt 0 den Wert NaN für die nicht-definierten Punkte verwenden. Oder Du würdest die nur geraden und ungeraden Teile in vektoren speichen, aber keine Nullen dazwischen einfügen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
bandchef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 13.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2013, 17:10     Titel: Re: Gerade, ungerader Anteil.
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:

Was genau gefällt Dir denn nicht an der Lösung? Vielleicht dass die eigentlich separaten Punkte durch Linien verbunden werden?
Dann könntest Du entweder statt 0 den Wert NaN für die nicht-definierten Punkte verwenden. Oder Du würdest die nur geraden und ungeraden Teile in vektoren speichen, aber keine Nullen dazwischen einfügen.
Gruß, Jan



Ok, das clear all lass ich dann weg! Danke für den Tipp! Für die eigentlich spearaten Punkte für die Linien gibt es ja noch das stem().


Ich wollte eigentlich eher wissen, ob die Lösung die ich ich hier aufgeschrieben habe, richtig ist.

Weil jedes Signal in einen geraden und ungerade Anteil zerlegbar ist, gilt diese Definition: x(n) = x_gerade(n) + x_ungerade(n).


Ich hab hier nochmal Code geschrieben, der meines Erachtens besser zu der Aufgabenstellung passt. Wie gesagt, ich bräuchte einfach mal ein paar Tips...
Ich erstelle hier nun ein Array mit Größe 41 Elemente, das der eigentliche Signalverlauf von x(n) ist. Danach wieder zwei 41 Elemente Array mit den geraden ungeraden Anteilen des Signals. Danach gebe ich alle 3 Signale aus.

Code:

close all;


n = [-20:20];
x_gerade = [1:41];
x_ungerade = [1:41];
x_gerade_ungerade = [1:41];
x = [1:41];


for i=1:1:41
    x(i) = mod(n(i), 10);
end



%gerade und ungerade Signal berechnen
for i=1:1:41
    x_gerade(i) = mod((-n(i)), 10);
    x_ungerade(i) = (-mod((-n(i)), 10));
end



stem(n, x, 'Color', 'red');
hold on;
stem(n, x_gerade, 'Color', 'blue');
hold on;
stem(n, x_ungerade, 'Color', 'green');



x_gerade_ungerade = x_gerade + x_ungerade;
hold on;
stem(n, x_gerade_ungerade);
 




Was ist nun richtig?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.10.2013, 11:45     Titel: Re: Gerade, ungerader Anteil.
  Antworten mit Zitat      
Hallo bandchef,

Ich habe eine kleinen, aber Matlab-typischen Änderungsvorschlag. Er ändert allerdings nichts an den Werten:
Code:
n = -20:20;  % Ohne eckige Klammern: a:b ist bereits ein Vektor
x = mod(n, 10);  % Direkt als Vektor ohne Schleife

x_gerade = mod(-n, 10);
x_ungerade = -mod(-n, 10);

x_gerade_ungerade = x_gerade + x_ungerade;
stem(n, x_gerade_ungerade);

"Gerade" heißt ja eigentlich: f(x) = f(-x), während "ungerade" heißt: f(x)=-f(-x). Nun wird vielleicht nach den Indices gefragt, bei denen die Werte die entsprechende Eigenschaft haben (mir wird die Aufgabenstellung nicht klar).

Gruß, 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.