|
|
|
Matlab fibonacci Aufrufe mit Variable zaehler |
|
| latingirl |

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 11.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:06
Titel: Matlab fibonacci Aufrufe mit Variable zaehler
|
 |
| |
 |
|
Hallo liebes Forum!
Es wurde bereits unter folgendem Link im Matlab-Forum dasselbe Thema diskutiert ...:
http://www.gomatlab.de/maximum-recu.....f-500-reached-t11351.html
... allerdings werden hier manche Befehle/Eingaben verwendet, v.a. eine globale Variable, die wir noch nicht in unsrem Matlab-Kurs hatten und die ich folglich nicht verwenden kann.
Also wie ich die Funktion fibonacci aufstelle ist mir klar, nur wie schaffe ich es, dass mir das System anzeigt, wie oft sich fibonacci selbst aufgerufen hat.
Als Tipp haben wir erhalten, dass wir unsere Funktion:
function [fib]=fibonacci(n)
auf
function [fib, zaehler]=fibonacci(n,zaehler)
erweitern.
Und das ist mein Problem:
Was soll ich denn für die Variable zaehler am Anfang einsetzen?
Und wie summiert mir Matlab die Aufrufe so auf, dass ich am Ende unter dem Rückgabewert zaehler die entspr. Zahl erhalte?
Habe folgendes bisher erreicht:
function [fib]=fibonacci(n)
zaehler=0;
if n==0
fib=0;
elseif n==1
fib=1;
else
fib=fibonacci(n-1)+fibonacci(n-2);
zaehler=zaehler+1;
end
disp(['Anzahl der eigenen Aufrufe: ' num2str(zaehler)])
end
Das ergibt:
>> fibonacci(5)
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 1
ans =
5
Wenn ich die Einsen zus.zähle, komme ich auf 7, das müsste passen laut meiner eigenen Überlegung.
Wie summiere ich nun diese Einsen auf?
zaehler in Rückgabewert und Variable oben "einzuspeisen" wird iwie nicht akzeptiert...
DANKE für euer Hilfe, es ist wirklich dringend!
|
|
|
|
|
|
| MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:10
Titel:
|
 |
Hallo,
zaehler=0 muss natürlich einmalig außerhalb der Funktion erfolgen.
Grüße, MaFam
|
|
|
|
| latingirl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 11.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:21
Titel:
|
 |
Toll, das hier so schnell geantwortet wird *großes Lob*
Also zu deinem Vorschlag:
Ich speichere ja meine Funktion in einer fibonacci.m-Datei ab.
Wenn ich zaehler=0 aus dieser Datei lösche, wird zaehler in der Datei rot unterringelt.
Wenn ich im Command Window zaehler=0 und fibonacci(5) aufrufe, dann gibt er mir trotzdem nix neues aus.
Oder verstehe ich dich falsch? Könntest du noch etwas konkreter werden?
Danke!
|
|
|
|
| MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:22
Titel:
|
 |
Du musst auch deinen neuen Funktionskopf verwenden: function [fib, zaehler]=fibonacci(n,zaehler)
Wie sollte das auch sonst funktionieren=?
|
|
|
|
| latingirl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 11.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:25
Titel:
|
 |
Ok, Folgendes hab' ich eingegeben:
function [fib,zaehler]=fibonacci(n,zaehler)
zaehler=0;
if n==0
fib=0;
elseif n==1
fib=1;
else
fib=fibonacci(n-1,zaehler)+fibonacci(n-2,zaehler);
zaehler=zaehler+1;
end
disp(['Anzahl der eigenen Aufrufe: ' num2str(zaehler)])
end
Das zaehler in Fettschrift wurde rot unterringelt.
Im Command-Window kam Folgendes:
>> fibonacci(5,0)
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 0
Anzahl der eigenen Aufrufe: 1
Anzahl der eigenen Aufrufe: 1
ans =
5
???
Zuletzt bearbeitet von latingirl am 11.05.2012, 09:27, insgesamt einmal bearbeitet
|
|
|
|
| MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:27
Titel:
|
 |
|
Wir drehen uns im Kreis. zaehler=0 muss gestrichen werden....
|
|
|
|
| latingirl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 11.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:30
Titel:
|
 |
Ok, schön, die Datei fibonacci.m scheint jetzt fehlerfrei zu sein und es leuchtet mir auch ein, dass ich zaehler=0 rauslassen muss:
function [fib,zaehler]=fibonacci(n,zaehler)
if n==0
fib=0;
elseif n==1
fib=1;
else
fib=fibonacci(n-1,zaehler)+fibonacci(n-2,zaehler);
zaehler=zaehler+1;
end
disp(['Anzahl der eigenen Aufrufe: ' num2str(zaehler)])
end
Dann kann ich ja stattdessen im Command-Window für die Variable zaehler 0 einsetzen, trotzdem ändert sich für fibonacci(5,0) nix, es wird nix summiert
|
|
|
|
| MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:53
Titel:
|
 |
|
Hm, ich denke, du machst das besser mit einer globalen Variable für zaehler.
|
|
|
|
| latingirl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 11.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 09:59
Titel:
|
 |
Wie gesagt, ich habe ja den obigen Link mir schon einmal angeschaut.
Aber der Hinweis mit function [fib, zaehler] = fibonacci(n, zaehler) wird ja nicht ohne Grund gegeben sein.
Ansonsten wäre sicherlich auf dem Übungsblatt gestanden:
Hinweis: globale Variable
Ergo: Ich denke nicht, dass wir mit globalen Variablen arbeiten dürfen.
Aber dann muss es wirklich sehr schwer sein, wenn dir auch nix dazu einfällt - denn du bist ja denke ich schon sehr fit in matlab was ich so an der Beteiligung hier im Forum sehe
Ich grübel' noch ein wenig...
|
|
|
|
| MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 10:04
Titel:
|
 |
Call by reference funktioniert in Matlab glaube ich nicht, aber versuche mal die Zeile:
|
|
|
|
| latingirl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 11.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 10:11
Titel:
|
 |
Darauf reagiert matlab so ähnlich wie auf global zaehler:
(fett heißt wieder unterringelt)
function [fib,zaehler]=fibonacci(n,zaehler)
persistent zaehler;
if n==0
fib=0;
elseif n==1
fib=1;
else
fib=fibonacci(n-1,zaehler)+fibonacci(n-2,zaehler);
zaehler=zaehler+1;
end
disp(['Anzahl der eigenen Aufrufe: ' num2str(zaehler)])
end
-> Fehlermeldung im Command Window:
The PERSISTENT declaration must precede any use of the variable zaehler.
Vor function darf ich persistent zaehler nicht stellen und nur im Command Window (also nicht in der m-Datei) bringt's mir ja auch nix.
Hmmm... Ein Versuch war's wert!
P.S.: tic und toc helfen mir auch nicht weiter, oder?
|
|
|
|
| MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 10:43
Titel:
|
 |
|
|
|
| latingirl |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 22
|
 |
|
 |
Anmeldedatum: 11.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 10:56
Titel:
|
 |
Ok, dass klingt logisch, vielen vielen DANK...
Da wär' ich niiiieeee allein draufgekommen.
Es ergeben sich ja 15 Aufrufe, d.h. das System zählt es auch als Aufruf, wenn es die Startwerte F_0=0 und F_1=1 verwendet.
Okidoki!
Danke nochmals.
|
|
|
|
| MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 11.05.2012, 11:03
Titel:
|
 |
|
Ich schätze übrigens, dass sich die Anzahl der Schritte asymptotisch g^(n+1) annähert, wobei g der goldene Schnitt ist, also ungefähr g=1.618.
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|