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

Matlab schwierigkeiten

 

Lab21
Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 10.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2013, 13:21     Titel: Matlab schwierigkeiten
  Antworten mit Zitat      
Hallo leute ich arbeite grad ein wenig mit Matlab und habe grad ein Problem:

Ein kleiner Programmausschnitt:

t= 0:1e-3:0.5;

[xtideal]= genRechteck(A,f,t);



figure

plot( t , xtideal );


Jetzt lautet die Aufgabenstellung so:

Plotten Sie xtideal, beschriften Sie die Achsen und fügen Sie in den Titel die Amplitude und die
Frequenz des Signals automatisch ein. Erweitern Sie die y-Achse mit dem axis-Befehl so, dass sie
von –A-0.1 bis A+0.1 gezeichnet wird.

Das mit dem plotten habe ich ja noch hinbekommen.
Aber wie soll genau das xlabel und ylabel aussehen ?

Und wie mache ich das genau mit dem Axis Befehl.

Kennt ihr euch ein wenig aus?
Private Nachricht senden Benutzer-Profile anzeigen


Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 10.11.2013, 13:35     Titel:
  Antworten mit Zitat      
Hallo,

vermutlich steht bei dir A für die Amplitude und f für die Frequenz. Die beiden automatisch in den Titel einzufügen geht zum Beispiel mit sprintf. Kleines Beispiel zum Lernen:
Code:
N = 15;
r = 2.5;
plot(r*rand(N,1))
title(sprintf('Das sind %d Zufallszahlen zwischen 0 und %3.1f',N,r))


Der axis-Befehl funktioniert folgendermaßen (doc axis hilft hier)
Code:
axis([xmin xmax ymin ymax])

Du sollst das nun so anpassen, dass du die Werte ymin mit -A-0.1 und ymax durch A+0.1 ersetzt.

Was bei xlabel und ylabel stehen soll, das weiß ich aber aus dem Beispiel heraus auch nicht. Das kommt eben drauf an, was geplotted wird Smile

Viele Grüße.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lab21
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 10.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2013, 15:48     Titel:
  Antworten mit Zitat      
Vielleicht kannst du mir durch meinen kompletten code besser helfen :
Code:

%a)
A = 1;
f = 50;
N = 2;

x = A*sign(sin(2*pi*f*t));






function2 [x] = genRechteck(A,f,t)

%b)  
t= 0:1e-3:0.5;

[xtideal]= genRechteck(A,f,t);

%c)

figure

plot( t , xtideal );

axis([xmin xmax -A-0.1 a+0.1])

xlabel('t');

ylabel( 'xtideal');

 


In der musterlösung haben sie das gemacht :
Code:

axis([min(t) max(t) -A-0.1 A+0.1])
xlabel('{\itt}/s')
ylabel('\itx_{ideal}(t)')
title(['ideales Rechteck-Signal {\itA=}' num2str(A) '{\itf=}' num2str(f) 'Hz'])

 


Warum haben dir hier :

min(t) , max(t) geschrieben ?

axis([min(t) max(t) -A-0.1 A+0.1])

Das xlabel und y label verstehe ich überhaupt nicht.

Kannst du mir das erklären ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 10.11.2013, 16:23     Titel:
  Antworten mit Zitat      
Hallo,

ja, das kann ich dir erklären, wenn du das wünscht. Vielleicht wäre es aber hilfreicher, wenn du dich da selbst durcharbeitest.

1) axis():
Deine Lösung wird so nicht funktionieren, da xmin und xmax vermutlich nicht existieren. Da muss man sich was überlegen, die Musterlösung nimmt dafür einfach den kleinsten bzw. größten verwendeten Wert auf der X-Achse. Der andere Teil ist ja eigentlich das, was ich dir vorgeschlagen habe.

2) xlabel, ylabel
Es wird im Plot xideal über t aufgetragen. Daher will man die X-Achse mit t beschriften und die y-Achse mit xideal. Das \it sorgt dafür, dass der Text danach Kursiv ist. Nach dem / kommt nich die Einheit hinzu. Der Unterstrich sorgt dafür, dass das nachfolgende Zeichen im Index steht. Will man mehr als nur ein Zeichen tieferstellen, so macht man das mit _{das hier steht alles im Index}.

3) Mit dem Titel hast du dich ja noch gar nicht befasst. Statt sprintf kann man natürlich auch num2str benutzen und die einzelnen Strings als Vektor aneinanderhängen. num2str(A) macht genau das, was man vermutet: es wandelt einen numerischen Wert (num) in einen String (str) um.

Viele Grüße.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lab21
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 10.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2013, 16:39     Titel:
  Antworten mit Zitat      
Ah ok. Jetzt verstehe ich es .

Kannst du mir nochmal von deinem ersten Beitrag erklären was dieses plot(r*rand bewirkt ?

Ich bin leider Anfänger daher weiß ich das nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 10.11.2013, 17:08     Titel:
  Antworten mit Zitat      
Hallo,

na das steht doch im Titel des Plots, wenn du das ausführst Smile. Es werden N Zufallszahlen zwischen 0 und r erzeugt, die dann direkt geplotted werden. Ich brauchte nur irgendein Beispiel, das zeigt, wie man automatisch passende Titel zu den Plots erstellt (weil das Teil deiner Aufgabe war) - ohne dir direkt deine eigene Aufgabe zu lösen. Das solltest du ja selbst schaffen.

Viele Grüße.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lab21
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 10.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2013, 18:04     Titel:
  Antworten mit Zitat      
Hallo nasr,

ich wollte es auch mal über deinen Weg probieren :

Code:


figure

plot( t , xtideal );

axis([xmin xmax -A-0.1 a+0.1])

A = 15;
f = 100;
plot(f*rand(A,1))
title(sprintf('Amplitude und frequenz automatisch',A,f))

xlabel('t');

ylabel( 'xtideal');





 



Würde es so passen ?

Was bewirkt das hier ?

A = 15;
f = 100;

Kann ich hier einfach irgend einen Wert übergeben ?

Oder wie funzt das genau? Very Happy

plot(f*rand(A,1))

Warum schreibst du bei dem Befehl am ende eine 1 ? Question
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 10.11.2013, 18:26     Titel:
  Antworten mit Zitat      
Hallo,

für deine Aufgabe brauchst du kein rand(). Das war nur, um irgendwelche Werte zu plotten. Bei dir würdest du nun 15 Punkte (da A = 15) zwischen 0 und 100 (da f = 100) plotten.

Dein Titel ist so noch nicht richtig. Schau dir mal die Hilfe zu sprintf an (doc sprintf).

Bei dir wäre das wie folgt:
Code:
title(sprintf('die Amplitude beträgt %d und die Frequenz %d',A,f)

Man kann angeben, mit w elcher Genauigkeit (i.e. mit wievielen Stellen) die Zahlen dann im String auftauchen sollen. f3.1 bedeutet sowas wie: insgesamt 3 Zeichen, davon ein Zeichen nach dem Punkt (der Punkt selbst ist auch ein Zeichen). Aber nimm einfach num2str.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Lab21
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 10.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2013, 18:45     Titel:
  Antworten mit Zitat      
Meine Aufgabe geht noch ein weiter :

Schreiben Sie eine Funktion FourierRechteck, die mit Hilfe der Fourier-Reihe aus der Gleichung
ein approximiertes Rechteck-Signal xN(t ) für den Zeitvektor t, die Frequenz f, die Amplitude A und
N Harmonische berechnet und im Vektor xNt speichert.

Die Gleichung poste ich als datei.

Mein code :

Code:

function [xNt]= fourierRechteck(t,f,A,N)

xNt =(4*A /pi);

for( n=1:N+1)
   
    xNt = xNt*(1/(2*n-1))*sin(2*pi*(2*n-1)*f*t);
   

end

 


Würde der code so stimmen ?

fo.png
 Beschreibung:

Download
 Dateiname:  fo.png
 Dateigröße:  13.08 KB
 Heruntergeladen:  372 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 10.11.2013, 21:11     Titel:
  Antworten mit Zitat      
Hallo,

ich denke nicht, dass deine aufgeschriebene Formel mit dem Matlabcode übereinstimmt. Bis jetzt multipliziert innerhalb deiner Schleife, du addierst nicht die einzelnen Summanden auf.
Pseudomäßig etwa so:
Code:

xNt = 0
for n = 1:N+1
    summand = sin(blabla);
    xNt = xNt+ summand;
end

xNt = xNt*4*A/pi;
 

Das solltest du alleine versuchen, mit Leben zu füllen.

Viele Grüße.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lab21
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 10.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2013, 23:12     Titel:
  Antworten mit Zitat      
xNt = xNt+ summand;

Aber wieso wird hier zuerst addiert und dann mal nehmen ?

Das verstehe ich leider nicht.

Tut mir leid ,dass ich dich dauernd nerven muss.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 11.11.2013, 09:54     Titel:
  Antworten mit Zitat      
Also deine Funktion Xn(t) besteht aus einem Faktor a = 4*A/pi und einer Summe S = \sum\limits_{n=1}^{N+1} sin(blabla),die also aus N+1 Summanden besteht. Insgesamt also X_n(t) = a\cdot S

Um das zu berechnen, kann man zunächst mal die Summe berechnen und das Ergebnis davon mit dem Faktor a multiplizieren. Wie gesagt, du bildest gar keine Summe.
Code:
a = 4*a/pi % Der Faktor
S = 0; % Summe ist am Anfang Null
for n = 1:N+1
    summand = 1/(2*n-1)*sin(blabla); % Der n-te Summand...
    S = S+ summand;          % ...wird zur Summe dazuaddiert
end
xNt = a*S; % Die Summe mit dem Faktor multiplizieren. Fertig.

Das, was du da geschrieben hast, ist meiner Meinung nach die Lösung zu X_n(t) = \frac{4A}{\pi}\Pi\limits_{n=1}^{N+1} sin(blabla).

Viele Grüße

Edit: Davon abgesehen würde ich das ganz ohne Schleife lösen
Code:
n = 1:N+1;
xNt = 4*A/pi*sum(1./(2*n-1).*sin(2*pi*(2*n-1)*f*t));
Private Nachricht senden Benutzer-Profile anzeigen
 
Lab21
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 38
Anmeldedatum: 10.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2013, 12:30     Titel:
  Antworten mit Zitat      
Danke . Der letzte Weg ist glaub ich der einfachste . Laughing
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.