> 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
|