Kurs  Cours

12. Anonyme Funktionen
 Fonctions anonymes

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

Anonyme Funktionen sind solche, die keinen Namen haben .... 
Hier werden wir sehen, was es damit um sich hat!
  Les fonctions anonymes sont celles qui n'ont pas de nom... 
Ici nous verrons ce qui en est d'elles!

12.1. "Function"
        "Function"

"Function" ist eine allgemeine Funktion ohne 
   speziellen Namen, die gerade "unmittelbar" 
   angewandt wird.
 "Function" est une fonction générale sans nom 
   spécial, on peut l'utiliser "immédiatement".

Studiere:    Etudie:

??Function

Beispiele:    Exemple:

Function[x, x^2][4]

Function[x, x^2 - x][5]

Function[x, x^2][{1, 2, 3, 4, 5, 6, 7}]

Einfach, nicht?    Simple, n'est-ce pas?

12.2. Anwendung auf Datenselektion
       Application à la sélection de données

12.2.1. Mit Hilfe einer klassischen Funktion mit Name 
           (hier "groes45")
         A l'aide d'une fonction classique avec nom (ici 
           "groes45")

Beispiel (erst Daten erzeugen, dann Funktion definieren, dann anwenden):
  Exemple (d'abord générer des données, ensuite définir la fonction, puis appliquer):

data = Table[Random[Integer, {0, 100}], {14}]

groes45[x_] := x > 45

Map[groes45,data]

groes45[data]

Anwendung zur Selektion:
  Application à la sélection:

Select[data, groes45]

12.2.2. Mit Hilfe einer anonymen Funktion
         A l'aide d'une fonction anonyme

Beispiel (erst ausprobieren):
  Exemple (essayer d'abord):

Function[x, x > 45][68]

Function[x, x > 45][24]

Anwendung zur Selektion:
  Application à la sélection:

Select[data, Function[x, x > 45]]

12.2.3. Mit Hilfe der Abkürzung "#" für die Variable
           der anonymen Funktion
         A l'aide de l'abréviation "#" pour les variables de 
           la fonction anonyme

Select[data, Function[# > 45]]

12.2.4. Mit Hilfe der Abkürzung "(  )&" für 
           Function[  ]
        A l'aide de l'abréviation "(  )&" pour Function[  ]

Select[data,  (# > 45)& ]

12.3. Neuauflage einer früher definierten 
          Funktion
        Nouvel emploi d'une fonction définie 
          auparavant

Präzision 20 Stellen bei numerischen Rechnungen
 Précision de 20 unités lors de calculs numériques

Das Beispiel:
  L'exemple:

nZwanzig[x_] := N[x, 20]

$Post = nZwanzig

Sin[1]

Mit anonymer Funktion:
  Avec une fonction anonyme:

$Post := N[#, 40]&     (* vierzig *)

Sin[1]

12.4. Transformation von Wertepaaren in 
          Regeln
        Transformation de paires de valeurs en
          règles

Aus zwei Listen {x1,  x2,  x3,... }  und  {y1,  y2,  y3,... } 
soll eine Liste {x1 - > y1,  x2 -> y2,  x3 -> y3,... } gemacht werden.
 Faire de deux listes {x1,  x2,  x3,... }  et  {y1,  y2,  y3,... } une seule {x1 - > y1,  x2 -> y2,  x3 -> y3,... }.

Listen erzeugen: 
  Générer des listes de paires:

list1 = {x1, x2, x3, x4, x5, x6};
list2 = {y1, y2, y3, y4, y5, y6};

Paarliste erzeugen: 
Générer des listes de paires:

Transpose[{list1, list2}]

Anonyme Funktion (#[[1]] -> #[[2]])& auf die Liste setzen (mit "Map"):
  Appliquer des fonctions anonymes (#[[1]] -> #[[2]])& à des listes (avec "Map"):

Map[(#[[1]] -> #[[2]])&, Transpose[{list1, 
							list2}]]

12.5. Mehrere Argumente
       Plusieurs arguments

Beispiel:    Exemple:

Function[{x, y}, x > y][1, 2]

Function[{x, y}, x > y][2, 1]

Function[{x, y}, x > y][u, 2]

Was passiert, wenn die Anzahl der übergebenen Argumente nicht stimmt?
  Que se passe-t-il quand le nombre des arguments transmis n'est pas correct?

Function[{x, y}, x > y][1]

Function[{x, y}, x > y][1, 2, 3]

Function[{x, y}, x > y][a, b, c]

Bei der Kurzschreibweise mit "&" und "#" kommt nun das Problem der Identifikation der verschiedenen Variablen. Die Variablen können dabei nummeriert werden. Beispiel:
  Les abréviations "&" et "#" posent le problème de l'identification des différentes variables. On peut numéroter les variables. Exemple

??#

?##

??&

?&&

(#1 < #2)&[4, 6]

Die anonyme Funktion ist jetzt (#1 < #2)&.
  La fonction anonyme est maintenant (#1 < #2)&.

12.6. Daten filtern
       Filtrer des données

Aufgabe
 Problème

Ersetze eine Datenmenge nach einem "Filter" durch die Menge der gewichteten Mittelwerte je dreier sich folgender Elemente. Studiere dazu das folgende Beispiel!
  Remplace un ensemble de données après un "Filtre" par l'ensemble des moyennes pondérées de trois éléments qui se suivent. Etudie l'exemple suivant!

Lösung in Einzelschritten:
 Solution par étapes:

Zuerst Filter und Daten generieren:
  Générer d'abord le filtre et les données:

filter = {0.1, 0.8, 0.1};
datenF  = Table[Random[Integer, {0, 100}]/10, 
								{10}]

Ordnen in Dreiergruppen, die dann gewichtet gemittelt werden können:
  Ordonner en groupes de trois dont on peut faire ensuite la moyenne pondérée:

matrix = Partition[datenF, Length[filter], 1]

% // MatrixForm

Die Gewichtung geschieht, indem man die erste Zahl einer Dreiergruppe mit der ersten Zahl des Filters multipliziert, die zweite Zahl des Filters mit der zweiten der Dreiergruppe etc. und das jeweils addiert. Diese Multiplikation mit nachfolgender Addition ist jeweils ein Skalarprodukt entsprechender Vektoren:
 L pondération se fait en multipliant le 1er nombre d'un groupe de trois avec le 1er nombre du filtre, le 2e nombre du filtre avec le 2e nombre du groupe etc.. On en fait chaque fois l'addition. Cette multiplication suivie de l'addition est un produit scalaire des vecteurs correspondants:

Map[filter .#&, matrix]

Lösung alles auf einmal:
 Solution en un coup:

zusrollen[filterVar_List, 
    dataVar_List]:= Map[filterVar . #&, 
	Partition[dataVar, Length[filterVar], 1] ]

zusrollen[filter, datenF]

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

Remove["Global`@*"]