DMUG-Archiv 1998

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

Re: Funktionsdefinition in einer Schleife

> 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


Verweise:
Funktionsdefinition in einer Schleife
Martin Hammer, 12.03.1998

Frühere

 

Chronologischer Index

 

Spätere

Vorherige

 

Thematischer Index

 

Nächste

DMUG-Archiv, http://www.mathematica.ch/dmug-liste.html; Letzte Änderung: 08.09.2003 20:44