Maple Problem: Prozeduren in einer Schleife erzeugen

Neue Frage »

Vanessa_hdr Auf diesen Beitrag antworten »
Maple Problem: Prozeduren in einer Schleife erzeugen
Meine Frage:
Hallo,
Ich habe mein Programm mal auf ein kleineres heruntergebrochen, das mein Problem aber schon vollständig beschreibt. Ich möchte in meinem Maple Programm rekursive Prozeduren x1, x2, x3 erzeugen. Maple schafft es aber nicht die Rekursion auszuwerten. Das liegt wohl an der Laufvariablen j...


Meine Ideen:

Test:=[x1,x2,x3];
for j from 1 to nops(Test) do
Test[j]:=proc(i::nonnegint)
local j,k;
if i=0 then return a0;
elif i=1 then return a1;
else return Test[j](i-1)+Test[j](i-2);
end if;
end proc:
end do;
Bei Test[1](3); kommt: Test[j](2) + Test[j](1) als Ausgabe.

Kann mir jemand helfen? Ich wäre sehr dankebar für irgendwelche Ideen!

Liebe Grüße,
Vanessa
Mystic Auf diesen Beitrag antworten »
RE: Maple Problem: Prozeduren in einer Schleife erzeugen
Zitat:
Original von Vanessa_hdr
Bei Test[1](3); kommt: Test[j](2) + Test[j](1) als Ausgabe.

Was ja auch vollkommen korrekt ist, denn j hat ja im Programm nirgendwo vorher einen Wert erhalten... geschockt
Vanessa_hdr Auf diesen Beitrag antworten »

j ist doch die Laufvariable, also hat sie doch zum Beispiel im ersten Durchlauf den Wert 1 erhalten oder nicht?
Vanessa_hdr Auf diesen Beitrag antworten »

Ah, ich hatte j fälschlicherweise zusätzlich als lokale Variable deklariert... Wenn ich das jetzt rausnehme, dann kommt als Ausgabe

Error, (in Test[1]) invalid subscript selector
Mystic Auf diesen Beitrag antworten »

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Test:=[x1,x2,x3];
for j from 1 to nops(Test) do
   dummy:=proc(i::nonnegint)   
   local k;
      if i=0 then return a0;
         elif i=1 then return a1;
         else return dummy(i-1)+dummy(i-2);
      end if;
   end proc:
   Test[j]:=dummy;
end do:

Kommt jetzt das heraus, was du wolltest? verwirrt
Vanessa_hdr Auf diesen Beitrag antworten »

Vielen Dank für den Hinweis! Jetzt funktioniert das Programm, aber ich habe gemerkt, dass es doch nicht vollständig mein Problem erfasst hat. Ich habe es mal verändert zu:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
Test:=[x1,x2];
n:=[2,3];
Var:=[a0,a1,b0,b1,b2];
k:=[1,1,1,0,1];

for j from 1 to nops(Test) do
  dummy:=proc(i::nonnegint)
     local x,y,Rek;
     for x from 0 to n[j]-1 do 
        if i=x then 
          return Var[x+1];
        end if;
      end do;
      Rek:=0;
      for y from 1 to n[j] do 
        Rek:=Rek +k[n[j]-y+1]*Hilf(i-y);
      end do;
      return Rek;
    end proc:
  Test[j]:=dummy;
end do:

Bei Test[1](1) kommt jetzt wieder
Error, (in dummy) invalid subscript selector

Das liegt, denke ich, wieder an der Laufvariablen j. Warum kann das Maple nicht??
 
 
Vanessa_hdr Auf diesen Beitrag antworten »

statt Hilf(i-y) muss natürlich dummy(i-y) stehen!
Mystic Auf diesen Beitrag antworten »

Zitat:
Original von Vanessa_hdr
Vielen Dank für den Hinweis! Jetzt funktioniert das Programm, aber ich habe gemerkt, dass es doch nicht vollständig mein Problem erfasst hat.

Vielleicht kommen wir der Sache näher, wenn du mal sagen würdest, was denn eigentlich das zugrundeliegende Problem ist... verwirrt
Vanessa_hdr Auf diesen Beitrag antworten »

Den Code, den ich heute Mittag gepostet habe, beschreibt mein eigentliches Problem. ich möchte Prozeduren in einer Schleife erzeugen, bei denen Variablen auftauchen, die von der Laufvariablen j abhängig sind, also zum Beispiel in Zeile 9 taucht "n[j]-1" auf. Ich hoffe, du verstehst, was ich meine.

Ich verstehe nicht ganz, warum Maple da ein Problem hat...
Vanessa_hdr Auf diesen Beitrag antworten »

Wenn ich k:=n[j]; vorher setze und statt n[j] überall k einsetze, dann funktioniert es. Vielen Dank für die Hilfe!
Mystic Auf diesen Beitrag antworten »

Zitat:
Original von Vanessa_hdr
Wenn ich k:=n[j]; vorher setze und statt n[j] überall k einsetze, dann funktioniert es. Vielen Dank für die Hilfe!

Ganz blick ich leider immer noch nicht durch... Die Frage, die sich mir stellt ist, ob am Ende die Komponenten von Test nicht alle gleich sind, nämlich so wie die allerletzte in der Schleife definierte Prozedur dummy... Wenn ja, könnte man das vielleicht mit der Namensgebung cat(dummy,j) umgehen...
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »