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

Ist eine Zahl Teil der Fibonacci-Folge?

 

peggi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 18:57     Titel: Ist eine Zahl Teil der Fibonacci-Folge?
  Antworten mit Zitat      
Hallo ihr da draußen!
Ich soll für meinen Matlab-Kurs eine Funktion schreiben, die herausgibt, ob eine Zahl Teil der Fibonacci-Folge ist, und wenn ja, welches Element der Folge. Die Fibonacci-Folge selbst haben wir schon iterativ und rekursiv programmiert. Aber bei der o.g. Aufgabe stehe ich (und nicht nur ich) total auf dem Schlauch.

Am besten nutze ich wahrscheinlich den iterativen Teil:

%isfibonacci soll prüfen, ob eine Zahl Element der Fibonacci-Folge ist
function [f]=isfibonacci(n)
f=ones(1,n);
for a=3:n;
f(a)=f(a-1)+f(a-2);

end

Wobei diesmal f ja eigentlich der Wert ist, der eingegeben wird und n der ist, der herauskommen soll??

Kann mir vllt jemand helfen?

LG, peggi


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 19:03     Titel:
  Antworten mit Zitat      
Nein n ist die Eingabe und f die Ausgabe.
Du erstellst dir alle f's also die in dem Bereich die dich interessieren und dann kannst du mit find suchen ob die Zahl Teil dieser Menge ist.
siehe
Code:
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 02.12.2010, 21:52     Titel:
  Antworten mit Zitat      
Das, würde ich sagen, kommt ganz darauf an, ob vorallokiert werden soll oder nicht. Man kann natürlich zuerst einen Vektor mit 10 Millionen Einträgen schreiben und dann mit find suchen, alternativ kann man aber deine bereits geschriebene Funktion minimalst verändern, indem bei jedem Schleifendurchlauf nach der eingegebenen Zahl gesucht wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
peggi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 22:51     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort!

Ich habe jetzt erst die Folge definiert:
%fibonacci gibt die Fibonacci-Folge als Vektor heraus bis zum n-ten
%Element.
function [f]=fibonacci(n)
f=ones(1,n);
for a=3:n;
f(a)=f(a-1)+f(a-2);
format long g
end

und dann mich in der zweiten function darauf bezogen:
%isfibonacci soll prüfen, ob eine Zahl Element der Fibonacci-Folge ist
function [f]=isfibonacci(m)
x=fibonacci(50);
f=find(x==m);
end

Aber das geht doch bestimmt eleganter und in nur einer Funktion, oder?
Wie meintest du das mit der Schleife?
while x<m;
n=n+1;
oder so??

Grüße, peggi
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.12.2010, 23:36     Titel: Re: Ist eine Zahl Teil der Fibonacci-Folge?
  Antworten mit Zitat      
Hallo peggi,

Zitat:
Ich soll für meinen Matlab-Kurs eine Funktion schreiben, die herausgibt, ob eine Zahl Teil der Fibonacci-Folge ist, und wenn ja, welches Element der Folge.


Ein Ansatz in Pseudo-Code:
Code:

% Berechne ob X eine Fibonacci-Zahl ist:
F = [1, 1]
while true  % Endlos-Schleife
   N = Berechne nächste Fibonacci-Nummer aus F
   if N == X
     Match!
   elseif N > X
     NoMatch!
   end
   Update von F
end
 

Um die nächste Fibonacci-Nummer zu berechnen, brauchst Du nur die beiden letzten Nummern, und gar nicht alle.

Dies ist zwar ein tolles Forum. Aber Google findet auch sehr elegante Methoden um das Problem zu lösen - und zwar ohne alle Fibonacci-Nummern berechnen zu müssen! Wie wäre es z.B. mit "is number fibonacci"?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 03.12.2010, 00:20     Titel:
  Antworten mit Zitat      
Hallo,

hier stand Mist. Sorry

MFG

Sco

Zuletzt bearbeitet von Sco am 03.12.2010, 01:24, insgesamt einmal bearbeitet
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: 03.12.2010, 00:58     Titel:
  Antworten mit Zitat      
Hallo Sco,

Zitat:
Code:

find((cumsum(1:zahl)./zahl) == 1)
 

Natürlich ist dieser Code nur bis zu einer bestimmten Größe von Zahlen ausführbar...

Stimmt, und diese bestimmte Größe ist 1. Für "zahl" >= 2 werden zumindest keine Ergebnisse mehr gefunden.
Ich vermute, Du hast irgendeinen tiefgreifenden Tippfehler eingebaut?!

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 03.12.2010, 01:18     Titel:
  Antworten mit Zitat      
Hallo Jan,

jub ich hab da wohl etwas verwechselt Embarassed
(Ich schieb es mal auf die Uhrzeit...)

Dann mal ein hoffentlich besserer Vorschlag:
Code:

function  FIB(n)

if n == 0
    idx = 0
    return;
end

if n == 1
    idx = [1 2]
    return;
end

if n == 2
    idx = 3
    return;
end

f = ones(1,n+1);

while 1
    for i = 3:n+3
        f(i) = f(i-1) + f(i-2);
        if f(i) == n
            idx = i
            return;
        elseif f(i)>n
            msgbox('Keine Zahl der Fibonacci-Folge')
            return;
        end
    end
end
 

wobei "n" die eingegebene Zahl ist.

MFG

Sco

Zuletzt bearbeitet von Sco am 03.12.2010, 02:12, insgesamt 2-mal bearbeitet
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: 03.12.2010, 01:52     Titel:
  Antworten mit Zitat      
Hallo Sco,

Zitat:
jub ich hab da wohl etwas verwechselt :oops:
(Ich schieb es mal auf die Uhrzeit...)

Nein, das klappt auch nicht. Dachtest Du an so etwas wie:
Code:
bitshift(find((cumsum(1:zahl)./zahl) == 1), clock)


@Peggi: Nicht wundern und nicht verwirren lassen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 03.12.2010, 02:05     Titel:
  Antworten mit Zitat      
Hallo Jan,

nein so meinte ich es nicht, ich hatte einen kompletten Aussetzer, da ich dachte cumsum ist die Fib.-Folge Rolling Eyes
Es war ein langer Tag vorm PC (und Matlab), denke es ist jetzt auch besser Schluss zu machen, ehe noch mehr "Mist" kommt Smile

Denke aber die neue Lösung sollte wenigstens von den Ergebnissen her passen.


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
peggi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.12.2010, 13:45     Titel:
  Antworten mit Zitat      
Danke für die Rückmeldungen, auch wenn es -@Sco- teilweise etwas verwirrend war. @Jan: Ich hatte ja schon gesucht gehabt, aber nichts sinniges gefunden deswegen bin ich so froh, daß es als letzte Möglichkeit solche Foren gibt. Sry nochmal Embarassed LG, peggi
 
ppirokke
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 19.11.10
Wohnort: ---
Version: R2010a
     Beitrag Verfasst am: 04.12.2010, 16:45     Titel:
  Antworten mit Zitat      
Hi,

vieleicht kannst du ja was mit der Formel von Binet anfangen (siehe z.B. Wikipedia), damit kann man ohne Rekursion Fibonaccielemente berechnen.
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.