Verschillende manieren om functies te definieren

Met een schone lei beginnen

Remove["Global`*"]

Het simpelste is een definitie zonder argument met = (Set  )

f=t Sign[t]

Omdat t nog geen waarde heeft is f een object dat van t afhangt.

??f

Uitrekenen van de waarde van f bij een bepaalde t gaat via een Rule -> en Replace /.

f/.{t->-1}

Plotten gaat eenvoudig:

Plot[f,{t,-1,1}]

Deze rechttoe-rechtaan methode is vaak voldoende.

Niet zo goed (want omslachtig) is het volgende:

g[t]=t Sign[t]

Omdat t nog geen waarde heeft is g een object dat van t afhangt.

??g

Uitrekenen van de waarde van g bij een bepaalde t gaat nu niet via het argument, omdat er alleen iets bekend is over g[t]:

g[-1]

Dus uitrekenen van de waarde van g[t] bij een bepaalde t moet weer via een rule:

g[t]/.{t->-1}

Plotten gaat nu alleen na Evaluate:

Plot[g[t],{t,-1,1}]

Plot[Evaluate[g[t]],{t,-1,1}]

Beter is definitie met gebruikmaking van een pattern (de underscore, _, Blank genoemd)

h[t_]=t Sign[t]

NB de t_ in deze definitie is een dummy variabele.

h[-1]

Plot[h[t],{t,-1,1}]

Voordeel van deze methode is dat wanneer in de definitie bv een Limit functie voor komt die niet van t afhangt, maar van een andere variabele (denk aan de kritisch gedempte harmonische oscillator) de limiet maar eenmaal geevalueerd hoeft te worden.

Nadeel van deze methode is dat als t  echter al een waarde heeft, i direct wordt geevalueerd.

t=5

i[t_]=t Sign[t]

i[-1]

Daarom is het (meestal) nodig om bij een pattern ook  := ( SetDelayed) te gebruiken

j[t_]:=t Sign[t]

j[-1]

Plot[j[t],{t,-1,1}]

Pure functies

Merk op dat bij een definitie met Function dummy argumenten gebruikt worden.

k=Function[t,t Sign[t]]

k[-1]

De verkorte notatie van deze definitie maakt gebruikt van # en &

l=# Sign[#]&

l[-1]

Pure functies lijken omslachtig, maar ze hebben veel voordelen. Je kunt ze prima combineren met functies als  Map.

Map[l,{a,b,c}]

Module

Wanneer een definitie meer omvat dan een one-liner is het nodig om  Module te gebruiken.

m[t_]:=Module[{},t Sign[t]]

m[-1]

Of met een locale variabele:

n[t_]:=Module[{u},u=t Sign[t];u]

n[-1]