Rundgang in Mathematica 
 Tour en Mathematica

(Nach Ideen aus: Handbuch "Mathematica" von S. Wolfram)
 (Selon les idées  prises dans le manuel "Mathematica" de S. Wolfram)

Run mit WIN+Mathematica Version 5.2  
 Testé avec Mathematica version 5.2+WIN

9. Programmierung
 Programmation

Programm zur Erzeugung einer nxn-Hilbert-Matrix
 Programme pour la création d'une matrice nxn de Hilbert

Programm
 Programme

Hilbert[n_]:=Table[1/(i+j-1),{i,n},{j,n}]

Aufruf für eine 3x3-Matrix
 Appel pour une matrice 3 x 3

Hilbert[3];

MatrixForm[%]

Programm zur Erzeugung des  
   charakteristischen Polynoms einer Matrix
 Programme pour la création du polynome 
   caractéristique d'une matrice

Programm
 Programme

CharPoly[m_,x_]:=
Det[m-x IdentityMatrix[Length[m]]]/; MatrixQ[m]
 (* Check auf Matrix bei m *)

Wieso /; ?
 Pourquoi /; ?

?/;

Anwendung
 Application

m = {{1,2,3},{2,3,4},{3,4,5}};
Print[MatrixForm[m]];
CharPoly[m,x]

m = {1,2,3,2,3,4,3,4,5};
Print[MatrixForm[m]];
CharPoly[m,x]

Programm zur Auffindung der nächsten 
   Primzahl
 Programme pour trouver le prochain nombre 
   premier

Programm
 Programme

NextPrime[n_Integer]:=
Module[{k=n},
        While[!PrimeQ[k],k++];
        Return[k]
      ]

Anwendung auf n =111
 Application pour n = 111

NextPrime[111]

Programm zur Berechnung statistischer Grössen, ohne Loops zu verwenden (elegant)
 Programme pour calculer des valeurs statistiques, sans utiliser des loops (élégant)

Programm
 Programme

mean[list_List]    :=Apply[Plus,list] / Length[list];

variance[list_List]:=
Mean[(list-Mean[list])^2] Length[list]/(Length[list]-1);

quantile[list_List,q_]:=
   Part[Sort[list],-Floor[-q Length[list]]]/; 0<q<1;
   
Alles[list_, q_]:=Module[{},
		Print["Mean = ",mean[list]," = ",
		Mean[list]];   
        Print["Variance = ",variance[list]," = ",
        Variance[list]];
        Print["Quantile = ",quantile[list,q]," = ",
        Quantile[list,q]];
                        ]

??Module

Anwendung
 Application

l={1,2,2,3,3,3,4,4,4,5,5,6,7,7,8,9}; q=0.1;
Alles[l,q]

Programm "Zufallsspaziergang"
    - was macht dieses Programm?
  Programme "promenade au hasard" - 
    que fait ce programme?

Programm
 Programme

zs[n_Integer]:=
   FoldList[Plus,0,Table[Random[]-1/2,{n}]]

Anwendung
 Application

zs[100]

Programm, das die ersten n Terme in der  
   Kettenbruchentwicklung einer Zahl findet:
   elegante funktionale Programmierung
 Programme qui trouve les n premiers termes 
   d'un nombre

Programm
 Programme

?ContinuedFraction

ContinuedFraction[h, 30]

ownContinuedFraction[x_Real,n_Integer]:=
      Floor[NestList[Function[{u},1/(u-Floor[u])],
      					x,n-1]]

Anwendung: Goldener Schnitt in Kettenbruchentwicklung
 Application: Section d'or en évolution de fractions continues

h=N[(Sqrt[5]-1)/2,100];
Print[h]
ownContinuedFraction[h,30]

Anwendung:  e in Kettenbruchentwicklung
 Application: e en évolution de fractions continues

e=N[E,100];
Print[e];
ownContinuedFraction[e,30]

ContinuedFraction[e, 30]

Anwendung:  Pi in Kettenbruchentwicklung
 Application: Pi en évolution de fractions continues

p=N[Pi,100];
Print[p]
ContinuedFraction[p,30]

Programm mit Mix aus symbolischer 
   Konstruktion und mathematischen Operationen:
   Ableiten der Funktionen einer Liste nach allen  
   Variablen einer andern Liste
 Programme avec mélange de construction 
    symbolique et opérations mathématiques:
    Dériver les fonctions d'une liste d'après toutes 
    les variables d'une autre liste

Programm
 Programme

Jac[funs_List,vars_List]:=Outer[D, funs, vars]

Anwendung 
 Application

f={x^2+x y-1, Cos[y]-z, a x z};
v={x,y,z};
Jac[f,v]

Liste von Regeln für Laplace-Transformationen
 Liste de règles pour des transformations de
   Laplace

Programm (Regeln)
 Programme (règles)

Laplace[c_,t_,s_]:=c/s/; FreeQ[c,t];
Laplace[a_+b_,t_,s_]:=
			Laplace[a,t,s]+Laplace[b,t,s];
Laplace[c_ a_,t_,s_]:=
			c Laplace[a,t,s]/; FreeQ[c,t];
Laplace[t_^n_.,t_,s_]:=
			n!/s^(n+1)/; (FreeQ[n,t]&&n>0);
Laplace[a_. Exp[b_.+c_. t_],t_,s_]:=
        Laplace[a Exp[b],t,s-c]/; FreeQ[{b,c},t];

?_.

?FreeQ

Anwendung 
 Application

Laplace[E^t+4t^2-2t+1,t,s]

Programm, das pattern matching benutzt um die 
   Anzahl gleicher Elemente einer Liste 
   auszuzählen - kurz, elegant, effizient!
 Programme qui utilise le "pattern matching" pour
   compter le nombre d'éléments égaux d'une liste -
   bref, élégant, efficace!

Programm
 Programme

RunEncode[{rest___Integer,same:(n_Integer)..}]:=
    Append[RunEncode[{rest}],{n,Length[{same}]}];
RunEncode[{}]:={}

Anwendung 
 Application

r={1,2,2,2,3,3,3,3,3,3,3,4,4,5,6,6,6,7,8,9,9,9,10};
RunEncode[r]

Programm, um Graphik zu erzeugen
 Programme pour créer des graphiques

Programm
 Programme

PolarPlot[r_,{t_,tmin_,tmax_}]:=
    ParametricPlot[{r Cos[t], r Sin[t]},
         {t,tmin,tmax},AspectRatio->Automatic]

Anwendungen
 Applications

PolarPlot[t^2,{t,0,2 Pi}];

PolarPlot[t^(1/2),{t,0,2 Pi}];

PolarPlot[E^t,{t,0,Pi}];

Programm, das die Lösungen einer Polynom-
   Gleichung als Punkte der komplexen Ebene
   darstellt
 Programme qui représente les solutions d'une 
   équation polynomiale comme points d'un plan 
   complexe

Programm
 Programme

RootPlot[poly_,z_]:=
   ListPlot[{Re[z],Im[z]}/. NSolve[poly==0,z],
   AspectRatio->Automatic,
   		PlotStyle->{PointSize[0.04]}]/;
                    PolynomialQ[poly,z]

Anwendung: Einheitswurzeln
 Application: Racines unifiées (de l'unité)

RootPlot[z^20 -1,z];

Programm, das Zahlen in Matrixform aus einem
   File liest und als 3D-Graphik darstellt
 Programme qui lit des nombres en forme de 
   matrice dans un fichier et les représente en 
   graphique 3D

Programm
 Programme

myfile[myfile_String]:=
    ReadList[myfile,Number,RecordLists->True]

FilePlot3D[myfile_String]:=
    ListPlot3D[ReadList[myfile,Number,
       					RecordLists->True]]

Anwendung 
 Application

\(\(\(myFilePath\)\(=\)\("C:\work\MathematicaData\AADATEN"\)\(\ \)\)\)

Hallo!!!! >>> Eigenes Directory/  Verzeichnis/ Dossier setzen!!!!!
• Hallo!!!! >>> Remplacer par le propre directoire!!!!!

Print[myfile[myFilePath]];
FilePlot3D[myFilePath]

Anhang
 Annexe

?RecordLists

\(\(\(myFilePath\)\(=\)\("C:\work\MathematicaData\AADATEN"\)\(\ \)\)\)

Hallo!!!! >>> Eigenes Directory/  Verzeichnis/ Dossier setzen!!!!!
• Hallo!!!! >>> Remplacer par le propre directoire!!!!!

\(\(!! C:\work\MathematicaData\AADATEN\)\)

\(<< C:\work\MathematicaData\AADATEN\)

Get["C:\work\MathematicaData\AADATEN"]

Was ist jetzt passiert? •  Qu'est-ce qui est arrivé?

??<<

Programm, das externe Daten manipuliert - 
      hier: das Files sucht mit gegebenen Teilstrings
    Programme qui manipule des données 
      externes - Ici: le fichier cherche par des stings
      partiels donnés

Programm
 Programme

?Select

\(\(\(myNewFilePath\)\(=\)\("C:\work\MathematicaData\AADATEN"\)\(\ \)\)\)

Hallo!!!! >>> Eigenes Directory/  Verzeichnis/ Dossier setzen!!!!!
• Hallo!!!! >>> Remplacer par le propre directoire!!!!!

fn=FileNames[]>> C:\work\MathematicaData\fnxxx;
fnxxx=Flatten[ReadList[myNewFilePath,
				Expression,RecordLists->True,
       			WordSeparators->{" "}]];
Print[fnxxx];
Print[fnxxx[[1]]];
Print[fnxxx[[3]]];
Clear[Where];
Where[s_String_]:=
   Select[fnxxx,(Length[FindList[#,s,1]]>0)&]

Anwendung: Suche nach *e* im momentanen directory
 Application: Cherche *e* dans le directoire momentané

Where["e"]

Wo liegt also das Problem hier?      Où est le problème ici?

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

(* Old Form: Remove["Global`@*"] *)

Remove["Global`*"]