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

Rekurive Funktion

 

graviton
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2013, 00:25     Titel: Rekurive Funktion
  Antworten mit Zitat      
Hallo, hier ebenfalls Fehlermeldung. Es geht dabei um die rekursive Darstellung des Fakultäts (n!), also (n+1)! = (n+1)*n!, 1!=1.
Jetzt soll eine rekursive Funktion geschrieben werden, die n! für natürliche n bestimmt. Ich habe folgendes:

Code:
1   function fact_resultat = factorial(n+1)
2   if n == 1
3      fact_resultat = 1;
4   else
5      fact_resultat = (n+1)*factorial(n);
6   end


Fehlermeldung:

Error: File: factorial.m Line: 1 Column: 37
Unexpected MATLAB Operator.


Kann den Fehler überhaupt nicht nachvollziehen, dieses Programm treibt einen nich in den Wahnsinn!
Danke & Grüße!
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2013, 06:46     Titel:
  Antworten mit Zitat      
Die Fehlermeldung ist doch nicht schlecht. In Zeile 1 ist irgendein Zeichen/Operation die da nicht hingehört. Welche könnte das sein? Schau dir doch mal an wie man funktionen in Matlab definiert.

viele Grüße
Thomas
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: 23.04.2013, 08:42     Titel:
  Antworten mit Zitat      
Hallo Thomas,

Um ganz genau zu sein, ist es laut fehlermeldung das 37.ste Zeichen.

Ich liebe Matlab für seine hilfreichen Fehlermeldungen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
graviton
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2013, 09:23     Titel:
  Antworten mit Zitat      
Ich weiss, dass das Pluszeichen sein muss. Aber ich muss ja irgendwie die Funktion definieren können. Wie könnte ich den definitionsgemäß
(n+1)!=(n+1)*n! unterbringen?
Wenn ich in der 1. Zeile "factorial(n)" schreibe, dann habe ich ja eher die Rekursion für n! = n * (n-1)!

Grüße
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 23.04.2013, 10:00     Titel:
  Antworten mit Zitat      
Indem du im Programmcode dann fact_resultat(x+1) aufrufst?
Oder die erste Zeile n=n+1 ist?
Wink
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
graviton
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2013, 10:15     Titel:
  Antworten mit Zitat      
Meinst du jetzt so vielleicht:

Code:
function res = factorial(n)
n = (n+1);
if n == 1
    res = 1;
else
    res = (n+1)*factorial(n);
end

Aber dann bekomme ich die Fehlermeldung:

Code:
Error using factorial (line 2)
Not enough input arguments.

Was mache ich den falsch?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2013, 11:05     Titel:
  Antworten mit Zitat      
Dein Problem ist vielleicht, dass du eine matlab funktion überschreiben willst.
factorial ist eine matlab funktion.

benenne sie doch besser in irgendwas anderes um.

Code:
function res = factorial_2(n)
if n == 1
    res = 1;
else
    res = n*factorial_2(n-1);
end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
graviton
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2013, 17:13     Titel:
  Antworten mit Zitat      
Klappt trotzdem nicht! Ich bekomme wieder die selbe Fehlermeldung wie aus meinem Beitrag davor. Ich versuche alles mögliche, aber immer wieder die selbe Meldung, dass es nicht genügend Eingabevariablen gibt's!
Hmmmh....?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.04.2013, 23:57     Titel:
  Antworten mit Zitat      
Hallo graviton,

Es ist etwas umständlich im Forum nach deinem vorherigen Beitrag zu suchen. Ich schlage vor, Du postest den jetzigen Code und eine Kopie der Fehlermeldung. Oder Du versuchst nochmal zu verstehen, was die Fehlermeldung bedeutet: Offenbar wird eine Funktion mit zu wenigen Inputs aufgerufen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 24.04.2013, 14:53     Titel:
  Antworten mit Zitat      
also, das factorial_2 muss auch in eine gleichnamige m-Datei. Dann kannst du factorial_2(3) aufrufen.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
graviton
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2013, 21:15     Titel:
  Antworten mit Zitat      
jurtsche hat Folgendes geschrieben:
Dein Problem ist vielleicht, dass du eine matlab funktion überschreiben willst.
factorial ist eine matlab funktion.

benenne sie doch besser in irgendwas anderes um.

Code:
function res = factorial_2(n)
if n == 1
    res = 1;
else
    res = n*factorial_2(n-1);
end
end


Ich habe das genauso gemacht, also auch die m-Datei in factorial_2 umbenannt, trotzdem bekomme ich die Fehlermeldung:
Error using factorial_2 (line 2)
Not enough input arguments.
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2013, 21:25     Titel:
  Antworten mit Zitat      
also wenn du genau die zeile
Code:
factorial_2(3)

eingibst, passiert das?

die datei heisst factorial_2.m und du bist in dem ordner in dem die factorial_2.m gespeichert ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
graviton
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2013, 22:54     Titel:
  Antworten mit Zitat      
Wahrscheinlich lag das Problem daran, dass ich nicht den selben File im Current Directory hatte. Ich versuche jetzt die ganze Zeit einen neuen Unterordner anzulegen, für z.B. auch das Fakultätsproblem, aber es geht nicht. Wenn ich bpsw. in Desktop einen neuen Ordner (z.b. "math" anlege und diese in matlab integrieren möchte, mit dem befehl "addpath math", dann bekomme ich folgendes:
Warning: Name is nonexistent or not a directory: I.
> In path at 110
In addpath at 87

Ich bekomme einen neu angelegten Ordner einfach nicht im Verzeichnis-System von matlab integriert. Normalerweise müsste doch eigentlich, sobald man auf der lokalen Festplatte irgendwo einen neuen Ordner anlegt dann über Pfadwechsel in matlab integrieren können, aber es scheint bei mir z.Z. ein Integrationsproblem zu geben.
Das Programm treibt einen noch in den Wahnsinn!
Hätte vllt. jemand einen Tip für mich?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2013, 23:06     Titel:
  Antworten mit Zitat      
hallo,

du kannst pfade im matlab, indem du auf ein verzeichnis mit der rechten maustaste klickst hinzufügen.
add to path with subfolders (oder so ähnlich)

LG

PS: mit addpath musst du den kompletten pfad angeben.
ohne unterordner:
Code:
addpath('c:/matlab/irgendwas/math')

mit unterordner:
Code:
addpath(genpath('c:/matlab/irgendwas/math'))
Private Nachricht senden Benutzer-Profile anzeigen
 
graviton
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 22.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2013, 00:13     Titel:
  Antworten mit Zitat      
Jo, danke schonmal wegen des Pfadproblems, hat geklappt. Auch factorial_2(3) lässt sich abrufen. Das alles war aber der Fall für
n! = n * (n-1)!. Ich würde aber gerne auch die Rekursion für (n+1)! = (n+1) n! abrufen wollen. Das habe ich ja zu Beginn die ganze Zeit versucht gehabt, bin aber bei Inputarguments gescheitert. Wie könnte ich diese nächst höhere Rekursion eingeben?
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.