AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Definition von Variablen in Matlab

Ein Thema von Nikolas · begonnen am 27. Okt 2006 · letzter Beitrag vom 27. Okt 2006
Antwort Antwort
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#1

Definition von Variablen in Matlab

  Alt 27. Okt 2006, 11:18
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:
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..
Die Spalte ganz rechts habe ich mit einer '3' markiert.

Das Feld wird hiermit erstellt (sollte fehlerfrei sein)
Delphi-Quellcode:
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
Das Ganze will ich dann hiermit starten:
Delphi-Quellcode:
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
Wenn ich das letzt dann in MatLab mit 'Beginn(10,10,0.5)' aufrufe, bekomme ich die Fehlermeldung:

??? 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?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Definition von Variablen in Matlab

  Alt 27. Okt 2006, 12:23
Hi,

bei folgendem rekursivem Aufruf in der Funktion NachbarnFluten, ist der Parameter ende undefiniert:

Code:
NachbarnFluten(x+1,y);
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Definition von Variablen in Matlab

  Alt 27. Okt 2006, 12:46
Warum denn? Ich übergebe die Variable doch bei jedem rekursiven Aufruf.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Definition von Variablen in Matlab

  Alt 27. Okt 2006, 13:20
Zitat von Nikolas:
Warum denn? Ich übergebe die Variable doch bei jedem rekursiven Aufruf.
Nein, tust du nicht. Im ersten Quellcode Block von dir in Zeile 15 übergibst du nur x und y und keine weiteren, somit auch nicht Ende. Daher auch die erste Fehlermeldung, welche genau dieses auch schon aussagt.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Definition von Variablen in Matlab

  Alt 27. Okt 2006, 14:27
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz