Uebungen  Exercices

9. Funktionen definieren
 Définir des fonctions

Die Gliederung dieses Kurses folgt in groben Zügen dem Buch von Nancy Blachman: A Practical Approach.... 
Hinweis: Kapitel 9 lesen!
 L'articulation de ce cours correspond à peu près à celle du livre de Nancy Blachman: A Practical Approach.... 
Indication: Lire le chapitre 9.
WIR94/98/99 // Copyright Rolf Wirz

Aufgabe 1    Problème 1

Untersuche, was die unten definierte Funktion f macht: 
 Examine ce que fait la fonction f définie ci-dessous:

Definition:    Définition:

f[2]  = 3    ;
f[u] := 2 u^2;
f[v_]:= 1/v  ;
u     = 2;

Was ist f[u] ?
  Qu'est-ce f[u] ?

f[u]

Was ist mit f passiert? Untersuche die möglichen Graphen! 
Que s'est-il passé? Examine les graphes possibles!

Plot[f[x],{x,0.5,6}];

Plot[f[u],{x,0.5,6}];

f[2]

Was ist passiert? 
  Que s'est-il passé?

Aufgabe 2    Problème 2

Definiere eine Funktion mitte[x], die das Integer- Resultat ausgibt für ungerade Werte von x!
 Définis une fonction mitte[x], qui sort le résultat Integer pour les valeurs impairs de x!

Definition:    Définition:

Clear[f];
f[x_?OddQ] := (x+1)/2

Ausprobieren:    Essayer:

f[3.2]

f[3]

f[2]

Was ist passiert?    Que s'est-il passé?

Aufgabe 3    Problème 3

Definiere eine Funktion, die als Argument ein Zahlenpaar {a, b} hat und als Wert das Paar {a, 2b} ausgibt. Wende die Funktion an auf die Liste 
{{1, 1}, {2, 2}}:
 Définis une fonction, qui a pour argument une paire de nombres {a, b} et qui sort comme valeur la paire {a, 2b}. Applique la fonction à la liste {{1, 1}, {2, 2}}:

Wende mit "Map" die Funktion an auf die Liste  {{1, 1}, {2, 2}}.
  Applique par "Map" la fonction à la liste  {{1, 1}, {2, 2}}.

Clear[verdoppelnY];
verdoppelnY[{x_, y_}]:={x, 2y}

Map[verdoppelnY, {{1, 1},{2, 2}}]

Was macht "Map" hier?
  Que fait "Map" ici?

Aufgabe 4    Problème 4

Definiere eine Funktion "dreieck[x]" wie folgt:
 Définis une fonction "dreieck[x]"

dreieck[x] ist gleich 1 - Abs[x] für x<1. Sonst ist der Funktionswert null.
Mache einen Plot!
  dreieck[x] est égal 1 - Abs[x] pour x<1. Autrement la valeur de la fonction est zéro. Fais un plot!

Clear[dreieck];
dreieck[x_/; (-1<=x && x<=1)]:= 1 - Abs[x];
dreieck[x_/; Abs[x]>1]:= 0;
Plot[dreieck[x],{x,-3,3},PlotStyle -> {{
	Thickness[0.01],GrayLevel[0.5]}}];

Aufgabe 5    Problème 5

Definiere eine Funktion "signum[x]" wie folgt:
 Définis une fonction "signum[x]" comme il suit:

signum[x] ist gleich 1  für x>0, -1 für x<0 und 0 für x=0. Mache einen Plot! (Definiere dazu signum für Floating-Point-Zahlen 0.0!) Schreibe einen Kommentar für die Dokumentation!
  signum[x] est égal 1  pour x>0, -1 pour x<0 et 0 pour x=0. Fais un plot. (Définis signum pour les nombres à virgule flottante 0.0!) Ecris un commentaire pour la documentation!

Clear[signum];
signum[0] = 0        ;
signum[x_/; x>0]:= 1 ;
signum[x_/; x<0]:= -1;
signum::usage="signum[x] ist gleich 1 für 
positive x, -1 für negative x und 0 für 
x = 0 - est égal 1 pour x positif, -1 pour
x négatif et 0 pour x = 0.";
Plot[signum[x],{x,-3,3},PlotStyle -> {{
	Thickness[0.01],GrayLevel[0.5]}}];

Clear[signum];
signum[0.] = 0.      ;   (*Geändert!*)
signum[x_/; x>0]:= 1 ;
signum[x_/; x<0]:= -1;
signum::usage="signum[x] ist gleich 1 für 
positive x, -1 für negative x und 0 für 
x = 0 - est égal 1 pour x positif, -1 pour
x négatif et 0 pour x = 0.";
Plot[signum[x],{x,-3,3},PlotStyle -> {{
	Thickness[0.01],GrayLevel[0.5]}}];

?signum

??signum

Aufgabe 6    Problème 6

Definiere die Funktion "myRange" wie folgt:
 Définis la fonction "myRange" comme il suit:

myRange[x] gibt für ein positives Integer-Argument n die Zahlen von 0 bis n aus. Für zwei Argumente m und n mit "n < m" gibt die Funktion alle natürlichen Zahlen von n bis m aus.  Für drei Argumente n, m und d gibt sie die Zahlen n, n+d, n+2d, ... , n+kd aus mit n+kd<m. 
  myRange[x] sort pour un argument Integer positif n les nombres de 0 à n. Pour deux arguments m et n avec "n < m", la fonction sort tous les nombres naturels de n à m. Pour trois arguments n, m et d, elle sort les nombres n, n+d, n+2d, ... , n+kd avec n+kd<m.

Clear[myRange];
myRange[n_?Integer,m_?Integer,d_?Integer/;
{n>=0 && m>=n && d>=0}]:= Range[n,m,d];
myRange[n_?Integer,m_?Integer /;
{n>=0 && m>=n}]:= Range[n,m];
myRange[start_:0, n_?Integer /; n>=0]:= 
Range[start,n]; 
Print[{6,Range[6]}];
Print[{-6,Range[-6]}];
Print[{0,Range[0]}];
Print[{{5,11},Range[{5,11}]}];
Print[{5,11,Range[5,11]}];
Print[{5,-3,Range[5,-3]}];
Print[{5,3,Range[5,3]}];
Print[{5,18,4,Range[5,18,4]}];

Aufgabe 7    Problème 7

Verschiedenes Verhalten einer Transformationsregel:
 Comportement différent d'une règle de transformation:

Beachte, dass die Regel "s[-x_] :> -s[x]" den Ausdruck "s[-a]" in "-s[a]" transformiert, "s[-3]" aber nicht transformiert. Was wird mit "s[1-x]" geschehen und wieso? 
  Considère que la règle "s[-x_] :> -s[x]" transforme l'expression "s[-a]" en "-s[a]", mais ne transforme pas "s[-3]". Que se passe-t-il avec "s[1-x]" et pourquoi?

sRegel = s[-x_] :> -s[x]

s[-a] /. sRegel

s[-3] /. sRegel

Wieso geschieht das? Beobachte, wie Mathematica -a und -3 interpretiert:
  Pourquoi cela arrive-t-il? Observe, comme Mathematica interprète -a et -3:

FullForm[-a]

FullForm[-3]

Der Ausdruck -a ist mit dem Muster -(x_) verträglich, der Ausdruck -3 nicht.
  L'expression  -a est compatible avec le patron -(x_) , l'expression -3 ne l'est pas.

FullForm[1-x]

Der Ausdruck (1-x) ist mit dem Muster -(x_) nicht verträglich:
  L'expression  (1-x) n'est pas compatible avec le patron -(x_):

s[1-x] /. sRegel

Aufgabe 8    Problème 8

Approximative Berechnung von Pi/4 durch eine rekursive Funktion:
  Calcul approximatif de Pi/4 par une fonction récursive:

Definiere die rekursive Funktion piDurchVier[n_] um approximativ Pi/4 zu berechnen wie folgt: 
  Définis la fonction récursive piDurchVier[n_] pour calculer approximativement Pi/4 comme il suit:

Pi/4  ist etwa:    Pi/4 est environ:

2*4*4*6*6*8*8*10*10...2n / (3*3*5*5*7*7*9*9*...(2n+1)).

Entwickle:    Développe: 	

	piDurchVier[1] = 2/3
	piDurchVier[2] = 2*4*4/(3*3*5) = piDurchVier[1 ]*4*4/(3*5)
	piDurchVier[3] = 2*4*4*6*6/(3*3*5*5*7) 
			  = piDurchVier[2 ]*6*6/(5*7)
	piDurchVier[4] =  piDurchVier[3 ]*8*8/(7*9)

RemoveAll[piDurchVier];
piDurchVier[1] = 2/3;
piDurchVier[n_] := 
	piDurchVier[n-1] (2n)^2 / ((2n-1)(2n+1)); 
??piDurchVier

Table[piDurchVier[i],{i,5}]

Table[piDurchVier[i],{i,5}] // N

Kontrolle:    Contrôle:

N[Pi/4,10]

N[piDurchVier[200]]

Was hälst Du von der Sache?
  Qu'en penses-tu?

Aufgabe 9    Problème 9

Spezielle Funktionen bestimmen:
  Déterminer des fonctions spéciales:

Bestimme die Funktionen, deren Namen mit den Buchstaben A - E beginnen und das Attribut "Listable" haben. 
Hinweis: Was tun die Funktionen "Names", "MemberQ", "Attributes" und "Select"?
  Détermine les fonctions dont le nom commence par les lettres A - E et qui ont l'attribut "Listable".
Indication: Que font les fonctions "Names", "MembreQ", "Attributes" et "Select"?

??Names

??MemberQ

??Attributes

??Select

Suche alle "Listablen" Funktionen:
  Cherche toutes les fonctions "Listables":

RemoveAll[listbareQ];
listbareQ[symbol_String]:=
	MemberQ[Attributes[symbol], Listable]

Was tun die Teile?
  Qu'en font les parties?

Attributes["Cos"]

MemberQ[Attributes["Cos"], Listable]

listbareQ["Cos"]

Versuchen wir, die Funktionen zu bestimmen:
  Essayons de déterminer les fonctions:

Select[Names["A* B* C* D* E*"], listbareQ]

Select[Names["A*"], listbareQ]

Select[Names["B*"], listbareQ]

Select[Names["F*S*"], listbareQ]

sN[x_]:=Select[Names[x], listbareQ]

sN["A*"]

Union[sN["A*"],sN["B*"],sN["C*"],sN["D*"],
				sN["E*"]]

"Putzmaschine" einsetzen
 Employer la "machine de nettoyage"

Remove["Global`@*"]