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

Maximum recursion limit of 500 reached

 

nixversteher

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.04.2010, 23:14     Titel: Maximum recursion limit of 500 reached
  Antworten mit Zitat      
Hallo zusammen,

ich bin ein Neuling was Matlab angeht und komme einfach nicht weiter vll kann mir einer von Euch helfen Very Happy .
Zum Problem: Ich rufe einen M-File auf darin wird eine Mat.Datei aufgerufen mit allen Signale etc. was ich für meine Auswertung benötige.
Beim debugen kommen ich nur bis Mat.File aufruf und dann kommt die folgende Fehlermeldung:

??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.

Was muss ich da tun oder was muss ich da setzen etc. wäre um jede Unterstützung dankbar! Warum kommt die Fehlermeldung überhaupt.

Gruß,
nixversteher


Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2010, 08:25     Titel:
  Antworten mit Zitat      
Das RecursionLimit ist eine Root Property...also eine Art Grundeinstellung...es begrenzt die Anzahl von nested M-file-Aufrufen (Aufruf von M_Files aus M-Files). Es dient dazu MATLAB einen Fehler auswerfen zulassen statt (ohne Limit) an Speichermangel zu grunde zu gehen.

Ändern kannst Du das Ganze (wie in der Fehlermeldung beschrieben) so:

Code:

set(0,'RecursionLimit',N)
 


Aber ich an Deiner Stelle würde ich mir eher deinen Code nochmal anschauen...bei den Aufgaben, die Matlab vor dem Fehler ausführt (laut Deiner Aussage) sollte das nicht passieren (wenn Du nicht schon vorher das Limit geändert hast).

Vielleicht postest Du einfach mal den Code bis zur mat-File Geschichte (und ggf. ein Stück weiter) und dann schauen wir mal drüber.
Private Nachricht senden Benutzer-Profile anzeigen
 
nixversteher

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.04.2010, 23:04     Titel: Maximum recursion limit of 500 reached
  Antworten mit Zitat      
Hallo Zenon,

vielen Dank für die schnelle Antwort.
Hier der Code:

Code:

Test;   % Hier wird das M-File aufgerufen, welches das Mat-File aufruft.

% Aus den einzelnen Signalen wird eine Matrix erstellt
matrix = {t, Messwerte1, Messwerte2,...
               ...
               ...};
%
A =[];
[n m] = size(matrix);
for l = 1:1:m
    A(:,l) = matrix{l};
end


Das Mat-File sieht wie folgt aus:
Code:

load Messwerte;
.
.
.
 


Und wenn ich einfach in Commandfenster
Code:

set(0,'RecursionLimit',N)
 

eingebe behebt sich das ganze?

Gruß,
nixversteher
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 08.04.2010, 00:04     Titel:
  Antworten mit Zitat      
Zitat:
Warum kommt die Fehlermeldung überhaupt.

Eine Rekursion liegt vor, wenn eine Funktion sich selbst Aufruft!
Dieser Vorgang ist sehr speicherhungrig. Daher sollte man diese Technik mit Vorsicht anwenden.

Defaultmässig unterstützt MATLAB eine Rekursionstiefe von 500, was in der Regel ausreichend ist. Ausgehend von Deiner Frage denke ich war eine Rekursion in Deinem Quellcode nicht vorgesehen. Smile Aus diesem Grund wird Dir Zenon's Vorschlag kaum helfen, denn der löst nicht die Ursache der Fehlermeldung.

Überprüfe Dein Code Schritt für Schritt mit dem Debugger und achte besonders auf die Funktionsaufrufe.


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2010, 09:23     Titel:
  Antworten mit Zitat      
@outsider:
Weil RecursionLimit nur Kosmetik ist habe ich ja nach dem Code gefragt um die tatsächliche Ursache zu finden...

@nixversteher:
Code:


Ist doch nicht alles was in Test drin steht...wie wäre es wenn Du als einfachste aber vielleicht schnellste Möglichkeit in all deinen M-Files nach all deinen möglichen M-File-Aufrufen suchst (mit der Suchfunktion nicht händisch) zum Beispiel "Test;" bzw. "MEIN_M_FILE_NAME;".

Damit findest Du möglicherweise schon den Aufruf...
Private Nachricht senden Benutzer-Profile anzeigen
 
nixversteher

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2010, 09:59     Titel: Maximum recursion limit of 500 reached.
  Antworten mit Zitat      
Moin,

mein M-File sieht wie folgt aus:
Code:


load 'Messwerte.MAT';

TaskRate = 0.001;


SigNames = [
'tGeaEggEvCorWr                   '
'tGeaEggOddCorWr                  '
'tRngShftDwnCorWr                 '
'tRngShftUpCorWr                  '
'...'
'...'
'...'
];

SigUnits = [
's       '
's       '
's       '
's       '
'...'
'...'
'...'
];

SigComments = [
'Korrekturwert Range Rückschaltung $-0.5...1$                                                                                   '
'Korrekturwert Range Hochschaltung $-0.5...1$                                                                                   '
'Gelernter Korrekturwert für die Schaltzeit der Splitgruppe bei einer Schaltung nach Lo mit HG in N $-0.18...1$                 '
'Gelernter Korrekturwert für die Schaltzeit der Splitgruppe bei einer Schaltung nach Lo mit HG nicht in N $-0.18...1$           '
'...'
'...'
'...'
];

0
Name = 'Muster Mann';
Abteilung = 'Messauswertung';
Projekt = 'MEssdaten';
Messobjekt = 'KDE';
Kommentar = 'Blabla';

Datum = [2009 2 27];
Zeit = [7 35 6];


for i=1:1568
  temp(i).name    = SigNames(i,:);
  temp(i).unit    = SigUnits(i,:);
  temp(i).value   = eval(SigNames(i,:));
  temp(i).comment = SigComments(i,:);
end

global Signals;
Signals = temp;
clear temp;
 


ich habe nirgends in meiner Files load 'Messwerte.MAT' gefunden ausser am Kopf.

Gruß,
nixversteher
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 08.04.2010, 10:35     Titel:
  Antworten mit Zitat      
Hallo
vermutlich liegt es an eval, in SigNames hast du wahrscheinlich
so einen Bezeichnernamen, welcher deinem Funktionnamen entspricht.

Mache es doch anders:
Code:

% lade werte in variable
values = load('Messwerte.mat');



for i=1:1568
 
  temp(i).name    = SigNames(i,:);
  temp(i).unit    = SigUnits(i,:);
  %
  % und greife auf diese über dynamische Felder
  temp(i).value   = values.(strtrim(SigNames(i,:)));
  temp(i).comment = SigComments(i,:);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
nixversteher

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2010, 20:54     Titel: Maximum recursion limit of 500 reached.
  Antworten mit Zitat      
Hallo,

das funktioniert auch nicht Sad. Ich habe folgendes ausprobiert
Code:

set(0,'RecursionLimit',750);
 

auch ohne Erfolg. Bitte um Unterstützung Embarassed

Gruß,
nixversteher
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.04.2010, 21:50     Titel:
  Antworten mit Zitat      
Hallo,

hast du das mit eval geändert?
Private Nachricht senden Benutzer-Profile anzeigen
 
nixversteher

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2010, 23:15     Titel: Maximum recursion limit of 500 reached.
  Antworten mit Zitat      
Hi,

ja ich habe deinen Code kopiert und eingefügt und es zeigt folgenden Fehler:
Code:

??? Error using ==> load
Unknown text on line number 1 of ASCII file /Volumes/NO
NAME/Messung/Messwerte.MAT
"MATLAB".

Error in ==> Messwerte at 1
values = load('Messwerte.MAT');
 



Gruß,
nixversteher
 
nixversteher

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2010, 23:23     Titel: Maximum recursion limit of 500 reached.
  Antworten mit Zitat      
Hi,

ja ich habe deinen Code kopiert und eingefügt und es zeigt folgenden Fehler:
Code:

??? Error using ==> load
Unknown text on line number 1 of ASCII file /Volumes/NO
NAME/Messung/Messwerte.MAT
"MATLAB".

Error in ==> Messwerte at 1
values = load('Messwerte.MAT');
 



Gruß,
nixversteher
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.04.2010, 08:57     Titel:
  Antworten mit Zitat      
Hallo

kannst du vielleicht deine Messwerte.mat anhängen?
Weil ich Moment nicht verstehe, woran das Laden scheitert.
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabnoobin

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 14:55     Titel: Maximum recursion limit of 500 reached.
  Antworten mit Zitat      
Hallo ihr,
auch ich hab die gleiche Fehlermeldung. Diese tritt bei mir auf, wenn ich mit der Fibonacci-Reihe arbeite. Kann mir wer helfen?


%PruefungsaufgabeTeil3.m


function PruefungsaufgabeTeil3
n=input('Geben Sie einen Wert ein: ')
n;
Fibonacci(n);
disp(Fibonacci(n));


function y=Fibonacci(n)
if n==0;
y=0;
elseif n==1;
y=1;
else
y=Fibonacci(n)+Fibonacci(n-1);
end;


Fehlermeldung:
??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.

Error in ==> PruefungsaufgabeTeil3>Fibonacci
 
Harald
Forum-Meister

Forum-Meister


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

in deinem Fall ist es ein schlichter Implementierungsfehler. So stimmts:
Code:
y=Fibonacci(n-1)+Fibonacci(n-2);

Probleme hast du nur noch, falls das eingegebene n > 500 ist. Und dann sollten die vorhergehenden Posts helfen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.07.2010, 15:35     Titel: Maximum recursion limit of 500 reached.
  Antworten mit Zitat      
Oléeee. Es funktioniert. Vielen lieben Dank. Smile
Du hast nicht zufällig noch ein Ass im Ärmel, was Zählfunktionen betrifft?
Irgendwie soll ich nämlich (und ich hab echt keine Ahnung wie Question ) noch die Anzahl der benötigten Funktionsaufrufe angeben... Hatte überlegt das mit


%PruefungsaufgabeTeil3.m


function PruefungsaufgabeTeil3
n=input('Geben Sie einen Wert ein: ')
n;
Fibonacci(n);
disp(Fibonacci(n));

zaehler=0;

function y=Fibonacci(n)
zaehler=zaehler+1;
if n==0;
y=0;
elseif n==1;
y=1;
else
y=Fibonacci(n-1)+Fibonacci(n-2);
end;

global zaehler;


zu lösen, aber da spuckte mir Matlab nur:


??? Undefined function or variable "zaehler".

Error in ==> PruefungsaufgabeTeil3>Fibonacci at 13
zaehler=zaehler+1;

Error in ==> PruefungsaufgabeTeil3 at 7
Fibonacci(n);


aus. Confused

lG
 
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.