![]() |
Definition von Variablen in Matlab
Hallo
Ich höre zurzeit eine Einführung in Matlab und wollte mir damit als Einstieg eine kleine Simulation schreiben. Die Aufgabe die ich bearbeiten will, stammt aus dem BWINF von vor zwei Jahren. Kurz zur Aufgabe: Man hat ein 2D Array, dessen Felder mit Käse, Luft oder Wasser gefüllt sind. Dann giest man von links Wasser drauf (Gravitiation nach rechts denken). Von einem freien Feld kann das Wasser in die benachbarten 8 Felder fließen. Wenns rechts ankommt, ists schön, wenn nicht, ists auch interessant. ich wollte das wieder rekursiv lösen und habe mir diese Funktion geschrieben:
Delphi-Quellcode:
Die Spalte ganz rechts habe ich mit einer '3' markiert.
function endegefunden = NachbarnFluten(x,y,Feld,ende)
% flutet die nachbarn, setzt sie auf Wasser, ruft sich rekursiv auf und % gibt 1 zurück, falls das Ende gefunden wurde, sonst 0 % Feld: 0:Frei; 1: Wasser, 2: Käse, 3: Ende if ende==1 // Zeile 6 return; end Feld(x,y)=1; endegefunden=0; %rechts if Feld(x+1,y)==0 NachbarnFluten(x+1,y); end if Feld(x+1,y)==3 endegefunden=1 end //usw.. Das Feld wird hiermit erstellt (sollte fehlerfrei sein)
Delphi-Quellcode:
Das Ganze will ich dann hiermit starten:
function Feld = Felderstellen(dimx,dimy,p)
% Feld hat dimx*dimy Größe, zusätzlich am Rand eine Schicht Käse, % das rechte Ende (x=dimx+1) ist als Ende markiert % Feld: 0:Frei; 1: Wasser, 2: Käse, 3: Ende % Feld wird erstellt for i = 2:(dimx+1) %Rechts die Schlussschicht for j= 2:(dimy+1) %Oben und unten Käse if rand < p Feld(j,i)=2; else Feld(j,i)=0; end end end %oberer/unterer Rand: for i=2:(dimx+1) Feld(1,i)=2; Feld(dimy+2,i)=2; end % Auffangbecken+ Rand links: for i=1:(dimy+2) Feld(i,dimx+2)=3; Feld(i,1)=2; end
Delphi-Quellcode:
Wenn ich das letzt dann in MatLab mit 'Beginn(10,10,0.5)' aufrufe, bekomme ich die Fehlermeldung:
function unused = Beginn(dimx,dimy,p)
ende=0; Feld = Felderstellen(dimx,dimy,p); for i=2:(dimy+1) if Feld(i,2)==0 ende=NachbarnFluten(i,2,Feld,ende); // Zeile 10 end end Feld % Ergebniss wird angezeigt if ende==1 disp('Ende') else disp('kein Ende') end ??? Input argument "ende" is undefined. Error in ==> NachbarnFluten at 6 if ende==1 Error in ==> NachbarnFluten at 52 NachbarnFluten(x,y+1); Error in ==> Beginn at 10 ende=NachbarnFluten(i,2,Feld,ende); Hin und wieder läuft aber auch alles durch und es wird 'kein Ende' angezeigt. Das würde darauf hindeuten, dass es nur dann ein problem gibt, wenn ende auf 1 gesetzt wurde. Aber dann verstehe ich die Fehlermeldung nicht. Kann mir da jemand helfen? |
Re: Definition von Variablen in Matlab
Hi,
bei folgendem rekursivem Aufruf in der Funktion NachbarnFluten, ist der Parameter ende undefiniert:
Code:
NachbarnFluten(x+1,y);
|
Re: Definition von Variablen in Matlab
Warum denn? Ich übergebe die Variable doch bei jedem rekursiven Aufruf.
|
Re: Definition von Variablen in Matlab
Zitat:
|
Re: Definition von Variablen in Matlab
Oh natürlich. Jetzt sehe ich es auch. Vielen Dank. Da hat Pascal den Vorteil, dass es meckert, wenn man eine Funktion nicht so aufruft, wie man sie deklariert hat. :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz