Hallo zusammen,
ob nun Dt. Elitehochschule mit und/oder ohne An[n]alen oder nicht, Mma.
implementiert Goto[]. Punkt. C++ übrigens - ebenso wie C und Fortan
auch. Es ist aber ganz unnötig, die Variablen einzeln zu benennen, es
wird mit einer Liste (yL) gearbeitet und dann yL[[3]] angeschaut: Die
Ausdrücke sind kürzer und vieles passiert nicht, was jetzt passiert ist.
In diesem Ausdruck
Label[begin]; Subscript[y, 3] = t; Print[t];
ygrid2 = Table[N[Subscript[y, s] = 0.5*(Subscript[y, s + 1] +
Subscript[y, s - 1] - 0.08)], {s, 2, 10, 1}]; Print[q]; q = 1 + q;
xygrid2 = Table[{N[Subscript[x, s]], N[Subscript[y, s]]}, {s, 1, 11, 1}];
Print[Subscript[y, 3]]; If[Abs[Subscript[y, 3] - t] < 2, Goto[begin]]
ist nicht nur t nicht definiert, die Iteration für s = 2 braucht Werte
für s = 3 _und_ s = 1 usw., da wurde nur an s = 3 gedacht, der Rest
liegt im Dunkeln, ebenso wie die Randwerte. Dann taucht plötzlich ein
Subscript[x, s] auf, woher das x? Und wenn man die y-Werte ausser
Subscript[y, 3] mit 0 initialisiert, stoppt der Algorithmus bei kleinem
t nie, bei grossem t im zweiten Schritt, weil dann der Wert (t/2 - 0.08
+ t/2 - 0.08)/2 - 0.08 = t - 0.16 an die dritte Stelle zurückkehrt. Was
soll das alles? Sie können ja mal etwa mit
With[{t = 4.17, n = 3, m = 12, w = 0.08, anZ = 100},
yL = Table[If[j == n, t, 0], {j, m}];
q = 0;
While[Abs[yL[[n]] - t] < 2 && q < anZ,
yL = PadRight[Rest[yL], m]/2 + PadLeft[Take[yL, m - 1], m]/2 - w;
++q
];
Print["q: ", q];
yL
]
experimentieren, ein paar Listen yL für verschiedene q im ListPlot
ansehen usw. usf. und die Ideen abklären. Dazu ist ja Mma. da, ebenso
wie allenfalls diese Gruppe.
Gruss
Udo.
klamser wrote:
Hallo Herr Sperber ,
au weia, eine wirklich vollständige Implementation einer
Programmiersprache kennt auch Label und Goto. Sogar seit der Version 1
(sagt zumindest das Hilfesystem).
Also: Das Problem hier ist, dass y3=t gesetzt werden soll, t aber
nicht bekannt ist. Also sollte man vorher t einen Wert zuweisen. Und
dazwischen erneut, sonst läuft das ewig..... Das geht übrigens in
Basic genau so.
Also zum Zweiten: Man kann sich natürlich in die Analen von
Mathematica.ch eintragen, indem wie vor 30 Jahren programmiert wird
und Label und Goto nutzt. Ich weiß nicht, wo einem so etwas heute noch
beigebracht wird, ich hoffe nur, dass so etwas nicht an einer
deutschen Hochschule passiert (wahrscheinlich ist das dann keine
Eliteuni). Da nicht zu erkennen ist, was der Algorithmus erreichen
soll, mach es wenig Sinn diesen hier zu verbessern, denn irgendwann
müsste ja t ein Wert zugewiesen werden. Ich kann nicht erraten
welcher, aber es geht garantiert ohne Goto und Label viel besser.
Wahrscheinlich sollte der Algorithmus besser in ein Modul eingebaut
werden. Näheres hierzu ist im Hilfesystem von MMA zu finden.
Schöner Gruß
Peter Klamser
Christian M. Sperber wrote:
ich versuche in einer Label[beginn];.......;If[test,Goto[begin]]
Schleife. einen Wert gegen den in der naechsten Runde berechneten zu
vergleichen. Ich bekomme es aber nicht hin diesen zu definieren.
Mathematica akzeptiert das nicht. Damit es klarer wird habe ich ein
notebook angehaengt.
In der ersten Berechnung laeuft die Anzahl der Durchgaenge ueber eine
Variable q. In der zweiten Berechung habe ich es einfach so
aufgeschrieben wie ich es gerne haette funktioniert aber nicht.