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

Rekursiv die Summe eines Vektors aufaddieren

 

StefanK
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 20:07     Titel: Rekursiv die Summe eines Vektors aufaddieren
  Antworten mit Zitat      
könnte mir jemand bei der erstellung einer function helfen die wie folgt aussehen soll:

s=summe(x)

x ist dabei ein Vektor!

Dass ist mein Ansatz:

function summe_rec(x,i,s)
if i<=numel(x)
s=s+x(i)
summe_rec(x,i+1,s)
end

jedoch muss ich i mit 1 und s mit 0 zu beginn der function mit eingeben sonst funktioniert es nicht... kann mir jemand helfen dass ich nur noch x als eingabe argument habe und s das ausgabe argument ist?
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.06.2011, 20:18     Titel:
  Antworten mit Zitat      
Code:

function s = summe(x)
s = 0;
for i=1:length(x)
     s = s + x(i);
end
 


...das ist allerdings nicht rekursiv. Dann würde sich die Funktion so lange aufrufen, bis das Ende von x erreicht ist. Meinst du das?
Private Nachricht senden Benutzer-Profile anzeigen
 
StefanK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 20:24     Titel:
  Antworten mit Zitat      
leider nein... wir müssen diese funktion rekursiv schreiben.


normal würde ich das genauso machen :/
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 29.06.2011, 20:37     Titel:
  Antworten mit Zitat      
mmh...das ist dann in der Tat schön knifflig Smile

Darfst du auch nicht ein explizites Element übergeben, also z.B. x(1). Man weiß doch sonst nie wo man vor der neuen Rekursion war.
Private Nachricht senden Benutzer-Profile anzeigen
 
StefanK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 20:42     Titel:
  Antworten mit Zitat      
hmh ich denke dass ist schon erlaubt ^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.06.2011, 20:50     Titel:
  Antworten mit Zitat      
Hallo,

da der Sinn des Forums nicht ist, die Hausaufgaben für Leute zu erledigen, gebe ich mal nicht den fertigen Code, sondern einen Pseudo-Code an:

Code:
Funktion Summierung, die x entgegennimmt und s zurückgibt
falls Länge(x) = 1
s = x
ansonsten
s = letztes Element + Summierung (alle vorherigen Elemente)


Grüße,
Harald

P.S.: wenn die Aufgabenstellung nicht so wäre, um das Programmierverständnis zu testen, dann würde man das mit sum bzw. cumsum lösen.
Private Nachricht senden Benutzer-Profile anzeigen
 
StefanK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 21:01     Titel:
  Antworten mit Zitat      
danke, ich werde das gleich mal testen:)
Private Nachricht senden Benutzer-Profile anzeigen
 
StefanK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 21:06     Titel:
  Antworten mit Zitat      
ok ich merke gerade dass es mich nicht weiter bringt mit meinem problem. ich kann ja durch die rekursion nur etwas an meinem vektor verändern also beispielsweise

rec_sum(x+1)

aber ich brauche doch einen index um auf die elemente des vektors zugreifen zu können also bspw. x(i)...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.06.2011, 21:12     Titel:
  Antworten mit Zitat      
Hallo,

es bringt dich nicht weiter? Ich habe dir die Lösung als Pseudo-Code hingeschrieben! Insbesondere brauchst du keinen Index dafür.

Du musst diese Lösung also nur noch verstehen und in MATLAB umsetzen (es sind 6 Zeilen, von denen eine "else" und eine "end" sind), und schon hast du die Lösung.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
StefanK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 21:16     Titel:
  Antworten mit Zitat      
also mein problem ist die zeile in der else anweisung...

function s=summe_rec(x)
if length(x)==1
x=s
else
s=..... summe_rec(x....)
end


ich weiß es ist vllt lächerlich... aber ich habe so ein problem mit den rekursiven funktionen^^
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.06.2011, 21:29     Titel:
  Antworten mit Zitat      
Hallo,

ich habe es ja quasi schon hingeschrieben. Noch eine kleine Hilfestellung:

letztes Element eines Vektors x:
Code:

Alle vorherigen Elemente:
Code:
x(1:end-1)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
StefanK
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 29.06.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2011, 21:39     Titel:
  Antworten mit Zitat      
ok jetz habe ich es... dann gab es wohl einfach ein verständigungsproblem mit unserem info-prof... ich dachte am ende jeder rekursiven funktion müsste über den funktionsnamen und die eingabe etwas verändert werdet...

also wie oben geschrieben rec_sum(x+1) oder ähnliches dass eben dass x immer wieder um 1 erhöht wird bis zum abbruch...

aber gut wenn dies nicht der fall ist bin ich beruhigt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wird ja. Nur dass es eben in dem Fall nicht x+1 ist, sondern x(1:end-1).
In jedem Fall ist es ja ein leichtes, sich davon zu überzeugen, dass der Code das richtige macht - und rekursiv ist er auch, da die Funktion sich selbst aufruft.

Grüße,
Harald
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.