ApCoCoA-1:Fundamentals Tutorial De Types

From ApCoCoAWiki
Revision as of 17:23, 15 July 2008 by StK (talk | contribs)

Zahlen, Vektoren, Matrizen oder einfach nur Listen?

CoCoA stellt verschiedene Objekttypen zur Verfügung, aber eh wir uns diese genauer anschauen, müssen wir erst etwas über Zuweisungen und neue Objekte in Erfahrung bringen.

Wie die CoCoA-Befehle, so beginnen auch die Objekte in CoCoA mit einem Großbuchstaben. Die einzigen Objekte, welche klein geschrieben werden sind Variablen, d.h. aber auch, dass CoCoA zum Beispiel quit; als das Produkt betrachtet. Dies ist eine beliebte Fehlerquelle. \medskip

Wollen wir z.B. dem Objekt MeineZahl den Wert 5 zuweisen, so schreiben wir MeineZahl:=5;. CoCoA legt also ein neues Objekt (MeineZahl) an und weist ihm den Wert 5 zu. Zuweisungen werden mit := gemacht und natürlich mit einem Semikolon abgeschlossen. \medskip

Aber was ist 5 nun für ein Objekt-Typ? Dies lässt sich mit dem Befehl Type(...); herausfinden.

Type.png

Also ist MeineZahl vom Wert INT, also eine ganze Zahl, was bei 5 auch durchaus ersichtlich ist. Die folgende Liste umfasst die häufigsten Objekt-Typen in CoCoA.

INT: Die \textbf{ganzen Zahlen} , also z.B. die Mersensche Zahl , eine Zahl mit 9808358 Stellen, welche zugleich auch die größte bekannte Primzahl ist. Speichert man diese Zahl in einer Text-Datei ab, so hat diese alleine 9,4MB. Hingegen ist die größte ganze Zahl, die auf einem 32-Bit-Computer üblicherweise verwendet werden kann , bzw. auf 64-Bit-Computer .

\item[\mdseries\texttt{RAT}:] \textbf{Rationale Zahlen} $\mathbb{Q}$. In {\CoCoA} sind dies wirklich zwei ganze Zahlen, die geteilt und gekürzt werden. Für {\CoCoA} ist $\frac{1}{3}$ etwas völlig anderes als $0,333333333333$ ($=\frac{333333333333}{1000000000000}$). {\CoCoA} kann nicht in $\mathbb{R}$ rechnen, wie denn auch, um z.B. $\pi$ einzulesen (eine transzendente Zahl, also eine Zahl, mit unendlich vielen Nachkommastellen) müsste man, auch mit noch so schnellen Computern) unendlich lange warten. Aber so schlimm ist das Ganze ja nun auch wieder nicht Zum einen kann {\CoCoA} symbolisch mit dem Objekt $\pi$ hervorragend umgehen und zum anderen liegt $\mathbb{Q}$ dicht in $\mathbb{R}$. Das bedeutet für uns, dass wir beliebig nahe mit einer rationalen Zahl an eine reelle Zahl herankommen können. So hat schon Archimedes von Syrakus (282\,--\,212 v. Chr.), durch die Betrachtung des regelmäßigen $96$-Ecks, $\pi$ wie folgt angenähert: \begin{equation*} 3,14084507042\dots\ =\ 3\frac{10}{71} \ <\ \pi\ <\ 3\frac{1}{7}\ = \ 3,14285714286\dots \end{equation*} \item[\mdseries\texttt{LIST}:] \textbf{Listen}, sind eine der mächtigsten Konstruktionen in {\CoCoA}. Eine Liste wird immer mit eckigen Klammern beschrieben. So erzeugt z.B. \texttt{M:=[1..10];} in {\CoCoA} eine Liste vom Namen \texttt{M}, welche die Liste der Zahlen 1 bis 10 enthält, also \texttt{1,2,3,4,5,6,7,8,9,10}. Aber eigentlich wollten wir doch nur eine Liste der Zahlen 1 bis 10 erzeugen, wir können dazu einfach den Befehl \texttt{Flatten(M);} ausführen, dieser vereinfacht die Liste $M$ und wir erhalten nun \texttt{[1,2,3,4,5,6,7,8,9,10]}. Dies hätten wir aber auch direkt durch \texttt{M:=1..10;} erhalten. \\ Listenkonstruktionen sind in {\CoCoA} so wichtig und nützlich, dass ihnen eine eigene Seite gewidmet wird, siehe Kapitel~\ref{List} auf Seite~\pageref{List}. \item[\mdseries\texttt{ZMOD}:] {\CoCoA} kann auch direkt \textbf{modulo} rechnen. Modulo-Zahlen werden mit \texttt{n{\%}p}, also $n\text{ mod }p$ ein- und ausgegeben, so liefert die Eingabe \texttt{4{\%}7 + 5{\%}7;} die Antwort \texttt{2{\%}7}. Wohingegen die Anweisung \texttt{4{\%}7 * 5;} die Antwort \texttt{-1{\%}7} liefert. {\CoCoA} rechnet also automatisch weiter modulo, sobald eine modulo-Zahl dabei ist. \item[\mdseries\texttt{STRING}:] Eine \textbf{Texteingabe}, hierbei wird die Eingabe (in Anführungsstrichen) einfach als \textbf{Zeichenfolge} ohne Bedeutung behandelt. Dieser Datentyp ist für Fehlermeldungen oder Ausgaben sehr wichtig, so verursacht z.B. \texttt{Print ``Dies ist ein Text!;} die Ausgabe \texttt{Dies ist ein Text!}. \item[\mdseries\texttt{BOOL}:] Die \textbf{Boolschen} Werte sind beim Vergleich von Elementen unumgänglich, es gibt nur \texttt{TRUE} und \texttt{FALSE}. So liefert etwa die Anfrage \texttt{1=0;} im Allgemeinen die Ausgabe \texttt{FALSE}, wohingegen \texttt{1{\%}2=-1{\%}2;} \texttt{TRUE} liefert. \item[\mdseries\texttt{MAT}:] Der Datentyp \textbf{Matrix}: Eine Matrix ist einfach betrachtet eine Liste von Listen, wobei die Teillisten alle gleich lang sind, d.h. man gibt jede Zeile einer Matrix als Liste (innerhalb einer Liste) ein. Wichtig ist nun, dass man {\CoCoA} sagt, dass es sich um eine Matrix handelt. So erzeugt \texttt{L:=[[2,4],[1,7]];} die Liste der beiden Listen \texttt{[2,4]} und \texttt{[1,7]}, wohingegen \texttt{M:=Mat([[2,4],[1,7]]);} eine Matrix mit den beiden Zeilen \texttt{[2,4]} und \texttt{[1,7]} erzeugt. Mit \texttt{Mat(...);} kann man aus jeder Liste (sofern ihre Proportionen stimmen) eine Matrix machen und mit \texttt{List(...);} kann man aus einer Matrix wieder eine Liste von Listen machen. \begin{center} \includegraphics[width=0.5\textwidth]{./../images/bsp_mat} \end{center} \item[\mdseries\texttt{POLY}:] Ein \textbf{Polynom} in {\CoCoA} wird im Prinzip genau so eingegeben, wie man es normalerweise schreibt; so wird das Polynom $3x^2-y+z-5$ mit \texttt{P:=3x\textasciicircum 2-y+z-5;} eingegeben. Exponenten werden mit der \texttt{\textasciicircum}-Taste eingegeben. Unbestimmte in {\CoCoA} sind die einzigen Elemente, welche klein geschrieben werden. Man kann immer nur die Unbestimmten verwenden, die im (aktuellen) Polynomring vordefiniert sind. Standardmäßig benutzt {\CoCoA} zu Beginn immer \texttt{Q[x,y,z]}, wenn wir mit mehr Variablen rechnen wollen, so brauchen wir einen größeren Ring, z.B. den Ring \texttt{Q[x[1..10]]}, dieser stellt uns die Variablen \texttt{x[1]} bis \texttt{x[10]} zur Verfügung. \item[\mdseries\texttt{IDEAL}:] Ein Ideal des Polynomrings $R$ ist die Teilmenge $I$, für die gilt $R\cdot I\subseteq I$ und dass $\left(I,+\right)$ eine Untergruppe von $\left(R,+\right)$ ist. Für uns ist vor allem die erste Eigenschaft wichtig. So ist \texttt{Ideal(x);}, die Menge aller Vielfachen von \texttt{x}, bzw. aller Polynome, die \texttt{x} enthalten, d.h. das Polynom \texttt{y} ist nicht in \texttt{Ideal(x)}.\\ So ist dann das Ideal von $f_1,\ldots,f_n$ die Menge aller Polynome $f_1g_1+\ldots+f_ng_n$, wobei die $g_i$ beliebige Polynome aus unserem Polynomring sind. \item[\mdseries\texttt{VECTOR}:] Ein \textbf{Vector} ist der gewohnte Vektor, also eine $1\times n$-Matrix, nur dass die Elemente in der {\CoCoA}-Version des Vektors Polynome sind. Dies lässt natürlich die gewohnten Vektoren wie z.B. $\left(1,3,6\right)$ zu. \end{description}