|
> Der Versuch, eine stueckweise stetige Funktion in > einer Schleife zu definieren, z.B. > > Do[F[t_]:=i/;i<=t<i+1, {i, 0, 3}] > > misslang mir wahrscheinlich wegen der nicht > standardmaessigen Evaluierung in der Schleife. Die Schleifenvariable i bekommt ihre Werte im Wesentlichen durch gewöhnliche Zuweisung, also ist die Schleife äquivalent zu i=0 F[t_]:=i/;i<=t<i+1 i=1 F[t_]:=i/;i<=t<i+1 i=2 ... Clear[i] es wird also viermal dieselbe Definition gemacht, und da nach der Schleife i keinen Wert mehr hat, ist die Bedingung i<=t<i+1 nie erfüllt. Wichtig zu beachten ist, daß die rechten Seiten der Definitionen ja nicht evaluiert werden dürfen; dies geschieht erst später, wenn die Funktion F aufgerufen wird. In solchen Definition muß man also den *aktuellen* Wert von i in die Definition einsetzen. Am elegantesten geht das mit With[{var=val}, definition] also zum Beispiel Do[ With[{i=j}, F[t_]:=i/;i<=t<i+1], {j,0,3} ] Danach hat man: ?F F[t$_] := 0 /; Inequality[0, LessEqual, t$, Less, 0 + 1] F[t$_] := 1 /; Inequality[1, LessEqual, t$, Less, 1 + 1] F[t$_] := 2 /; Inequality[2, LessEqual, t$, Less, 2 + 1] F[t$_] := 3 /; Inequality[3, LessEqual, t$, Less, 3 + 1] Man darf übrigens die Variaben gleich benennen, also geht auch Do[ With[{i=i}, F[t_]:=i/;i<=t<i+1], {i,0,3} ] Das Konstrukt With[{i=i}, irgendetwas ] ersetzt in "irgendetwas" alle Vorkommen der Variable i durch Ihren aktuellen Wert. Roman Mäder |