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

Anfängerfrage Plotten einer Summe

 

Mari27

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2013, 14:37     Titel: Anfängerfrage Plotten einer Summe
  Antworten mit Zitat      
Hi,

ich versuche mich seit ein paar Tagen mit Matlab und wollte heute Funktionen mit Plots verbinden.
Einen sinus, bzw. eine Matlab eigene Funktion zu plotten ist für mich kein Problem.

Zunächst mein Sinus der darauf aufbaut:

Code:
function meinsinus( anf, ende, diff )
akt = anf;
n = 1;

while( akt <= ende )
      x(n) = akt;
      y(n) = sin( x(n) );
      n = n +1;
      akt = akt + diff;
end

plot(x,y);
grid on;
end
 


Soweit so gut. Nun möchte ich eine Funktion plotten.

y(t)=2A/pi * SUMME (sin(2pi*k*f*t)/k - Die Summe läuft von 1 bis unendlich. Die Summanden für diese Summe lauten: sk=sk*(sin(2pi*k*f*t)/k) Alles in allem handelt es sich um eine "Sägezahnfkt".
(Sorry aber leider weiß ich nicht genau wie ich die Formel hier richtig einfüge.

Die variablen: A: Amplitute, f: frequenz, t: Zeit, y: Funktionswerte, k: Index.

Zunächst habe ich drei Abfragen, nach Amplitude, Frequenz und den Iterationen mit jeweils einer Input Funktion gemacht.

Ich habe leider einen großen Denkfehler. Baue ich die while-schleife beispielsweise wie für eine e-funktion auf, bekomme ich am Ende einen Endwert raus den ich noch mit 2A/pi multiplitziere. Diesen zu plotten würde ja wenig Sinn machen oder findet Matlab die einzelnen Werte der Schleife?

Ich bin leider etwas überfragt.

Hier nochmal der aktuelle Code (der aber nach viel rumprobiererei ganz schön verhunzt ist):

Code:
function y = Saegezahn(anfang, ende, diff,t)
akt=anfang;
n=1;
sn=1;
z=sn;
t=[0:200];
A=input('Bitte Amplitude eingeben');
f=input('Bitte Frequenz eingeben');
k=input('Bitte Zahl der Iterationen eingeben');
while(akt<=ende)
    x(n)=akt;
    sn=sn*(sin((2*pi*k*f*n)/k));
    z=z+sn;
    n=n+1;
    akt=akt+diff;
   
end
y=z*(2*A/pi);
plot(t,y);
grid on;
end


Vielen Dank euch schon mal, ob für einen Tipp oder eine Lösung.
Würde mir sehr weiterhelfen.

Gruß


BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 05.07.2013, 15:45     Titel:
  Antworten mit Zitat      
Hallo Mari27,

als erstes "diff" als Variablennamen zu verwenden ist eher schlecht, da Matlab schon eine Funktion namens "diff" besitzt.

zweitens: da A und z keine Vektoren sind, sollte dein plot-Befehel nicht funktionieren, da die Vektoren eine unterschiedliche Länge haben. Die folgende Zeile wird nur ein Skalar und keinen Vektor ergeben.
Code:
y=z*(2*A/pi);

Du hast an irgendeiner Stelle deine Indexvariable "n" vergessen. z.B.
Code:
z(n+1)=z(n)+sn;


Soviel mal nach einem kurzen Überfliegen deines Codes.

Grüße Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
Mari27

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2013, 16:52     Titel:
  Antworten mit Zitat      
Ok, danke schon mal.

Ich habe fast das Gefühl, dass ich ein grundlegendes Verständnisproblem bei der Aufgabe habe.

Der Code sieht nun nochmal leicht geändert wie folgt aus:

Code:
function y = SaegezahnPlot(anfang, ende, diffe, t)
akt=anfang;
n=1;
sn=1;
z=sn;
A=input('Bitte Amplitude eingeben');
f=input('Bitte Frequenz eingeben');
k=input('Bitte Zahl der Iterationen eingeben');
   
while(akt<=ende)
    x(n)=akt;
    sn=sn*(sin((2*pi*k*f*t)/k));
    z(n)=z(n)+sn;
    n=n+1;
    akt=akt+diffe;
   
end
y=z*(2*A/pi);
t=[0:200];
plot(t,y);
grid on;
end


Müsste ich um dies plotten zu können nicht jedem infitesimal kleinen Y-Wert einen X-Wert zuordnen? Und bräuchte ich nicht eine y(t) Abhängigkeit?

Gruß
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 08.07.2013, 11:32     Titel:
  Antworten mit Zitat      
Hallo Mari,

das mit dem "z(n+1)=z(n)+sn; " war nur Beispielhaft, da ich nicht ganz überblicke, was dein Code wie machen soll.
Mit meiner Aussage meinte ich eigentlich genau diese Abhängigkeit y(t).

Wenn du deine ursprüngliche Funktion durchlaufen lässt, erkennst du ja, dass dein dein t ein Vektor [1x201] und dein y ein Skalar ist.

Ich hoffe dich nicht all zu sehr verwirrt zu haben mit meinem doch nicht ganz passendem Beispiel bzw. mangelnder Erklärung.

Ich will dir hier nur eine Anregung geben, eine Lösung habe ich hier nicht direkt.

Grüße Chris

P.s. dem Name der Funktion nach willst du einen Sägezahn erstellen und plotten? Vielleicht ist auch hier ganz unten was zu finden:http://www.gomatlab.de/dreiecksignal-und-saegezahn-t430.html
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: 08.07.2013, 11:45     Titel: Re: Anfängerfrage Plotten einer Summe
  Antworten mit Zitat      
Hallo Mari27,

Eine Vereinfachung:
Code:
function meinsinus(anf, ende, step)
x = anf:step:ende;
y = sin(x);
...

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.