• Keine Ergebnisse gefunden

Praktische Informatik I – Der Imperative Kern Mathematiknachhilfe

N/A
N/A
Protected

Academic year: 2021

Aktie "Praktische Informatik I – Der Imperative Kern Mathematiknachhilfe"

Copied!
18
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik I – Der Imperative Kern Mathematiknachhilfe

Prof. Dr. Stefan Edelkamp

Institut für Künstliche Intelligenz

Technologie-Zentrum für Informatik und Informationstechnik (TZI) Am Fallturm 1, 28359 Bremen

+49-(0)421-218-64007 www.tzi.de/~edelkamp

(2)

Outline

1 Unter- und Oberstufenmathematik

2 Quadratwurzel

3 Erweitern und Kürzen

4 Pascals Dreieck

5 Primfaktorzerlegung

6 Gauß-Elimination

(3)

In dieser Unterrichtseinheit soll der Nutzen der Rekursion für die Bewältigung von praktisch relevanten Aufgabenstellungen mit informatischen Mitteln deutlich werden.

Ausgehend von der Sekundarstufen-Mathematik wird das schnelle Auswählen und Sortieren von Zahlen in Sequenzen besprochen.

Sie lernen

das Heron-Verfahren zur Quadratwurzelberechnung, den Euklidische Algorithmus zur Bestimmung des größten gemeinsamen Teiler,

das Pascal-Dreieck für die allgemeine Binomische Formel, ein Verfahren zur eindeutigen Primfaktorzerlegung, sowie das Gauß’sche Eliminationsverfahren zur Lösung von linearen Gleichungssystemen

(4)

Outline

1 Unter- und Oberstufenmathematik

2 Quadratwurzel

3 Erweitern und Kürzen

4 Pascals Dreieck

5 Primfaktorzerlegung

6 Gauß-Elimination

(5)

Heron-Verfahren

Programm 1 berechnet die (abgerundete)Quadratwurzel

Wir nehmen ein Rechteck, bei dem die eine Kante Längeahat, für das man√

asucht. Die zweite Kantenlänge ist 1. Das Verfahren nähert sich iterativ einem Quadrat mit derselben Fläche an.

Das Verfahren fußt auf demBanach’schen Fixpunktsatz

Programm 1:Iterative Wurzelberechnung.

public classQuiz {

public intmethod(inti) {

inta=i;

intb= 1;

while(ab> 1) { a= (a+b) / 2;

b=i/a;

}

return(a+b) / 2;

} }

(6)

Outline

1 Unter- und Oberstufenmathematik

2 Quadratwurzel

3 Erweitern und Kürzen

4 Pascals Dreieck

5 Primfaktorzerlegung

6 Gauß-Elimination

(7)

Der Euklidische Algorithmus

Die rekursive Berechnung desgrößten gemeinsamen Teilers(engl.

greatest common divisor) funktioniert wie folgt:

Wenna mod b=0 gilt, dann istgcd(a,b) =b, sonst ist ggT(a,b) =gcd(b,a mod b).

InvarianzZweite Zahl ist kleiner als die erste Zahl

modRest bei der ganzzahligen Division, wobei der Rest der Division mit Resta mod bin Java durcha%bdargestellt wird.

DerEuklid’sche Algorithmusist ein Paradebeispiel für ein effizientes rekursives Verfahren: In jedem zweiten Schritt wird eine Eingabezahl mindestens halbiert.

Daskleinste gemeinsame Vielfache (kgV)(engl. least common multiplier) vonaundbergibt sich dann aus dem Produktabder beiden Zahlen, geteilt durch ihren größten gemeinsamen Teiler.

(8)

Bruchrechnen

Das Programm 2 berechnet die Summe von zwei Brüchen inklusive demErweiternder Brüche auf den Hauptnenner, sowie dem

automatischenKürzendes Resultats.

Programm 2:Bruchrechnen mit Kürzen.

public classFractional {

public intgcd(inta,intb) { returna== 0 ?b:gcd(b%a,a);

}

public intlcm(inta,intb) { returna∗b/gcd(a,b);

}

public voidcompute(inta,intb,intc,intd) {

System.out.println("(a/b)−>("+(a/gcd(a,b))+"/"+(b/gcd(a,b))+")");

System.out.println("(c/d)−>("+(c/gcd(c,d))+"/"+(d/gcd(c,d))+")");

intk=lcm(b,d);

ints=a∗k/b+c∗k/d;

System.out.println("sum = ("+(s/gcd(s,k))+"/"+(k/gcd(s,k))+")");

} }

(9)

Outline

1 Unter- und Oberstufenmathematik

2 Quadratwurzel

3 Erweitern und Kürzen

4 Pascals Dreieck

5 Primfaktorzerlegung

6 Gauß-Elimination

(10)

Binomische Formel

DerBinomialkoeffizient kn

= k!(n−k!)n! ist wichtig u.a. für die Darstellung von(a+b)n=Pn

k=0 n k

akbn−k.

ImLottoist ein Sechser bekanntlicherweise mit einer Wahrscheinlichkeit von 1/ 496

zu finden.

Es ist nicht schwer, eine rekursive Beschreibung der Funktion

c(n,k) = n

k

= n!

(n−k)!·k! = n(n−1)!

k(n−k)!(k −1)! = n

kc(n−1,k−1)

mitc(n,0) =1 herzuleiten.

Mit dem Programm 3 wird einPascal-Dreieckausgegeben; es gibt in Zeilendie Werte nk

für allek =0, . . . ,ndar.

(11)

Programm 3:Die rekursive Berechnung des Pascal’schen Dreiecks.

public classBinomial {

private intchoose(intn,intk) {

return(k== 0) ? 1 : (nchoose(n−1,k−1)) /k;

}

public voidtriangle(intm) { intn,k;

for(n=0;n<m;n++) { for(k=0;k<=n;k++) {

System.out.print("("+m+","+k+")="+choose(n,k));

}

System.out.println();

} } }

(12)

Outline

1 Unter- und Oberstufenmathematik

2 Quadratwurzel

3 Erweitern und Kürzen

4 Pascals Dreieck

5 Primfaktorzerlegung

6 Gauß-Elimination

(13)

Eindeutige Zerlegung in Primteiler

Die Zerlegung einer Zahl in ihrePrimfaktorennicht nur für die Berechnung des ggTs und des kgVs wichtig: Sie ist (bei Sortierung) eineeindeutigeDarstellung.

Programm 4 ist eine rekursive Beschreibung, die nach und nach alle Primfaktoren einer Zahl abspaltet.

Programm 4: Die rekursive Berechnung der Primfaktorzerlegung.

public classPrimeFactor {

public voidfactor(intn) {// prime factorization of n inti=2;// start with first prime factor

while((i<n) && (n%i!= 0))i++;// find next factor System.out.println(i);// print found factor if(i<n)factor(n/i);// call with reduced term }

}

(14)

Outline

1 Unter- und Oberstufenmathematik

2 Quadratwurzel

3 Erweitern und Kürzen

4 Pascals Dreieck

5 Primfaktorzerlegung

6 Gauß-Elimination

(15)

Lösung von Gleichungssystemen

DasGauß’sche Eliminationsverfahrenzur Lösung vonlinearen

GleichungssystemenAx =bbei gegebener eindeutiger Lösbarkeit ist nützlich . . .

. . . wenn auch numerisch nicht unbedingt stabil: Hier bietet sich die exakte Berechnung der Lösung über die Menge derBruchzahlenan.

Das Programm 5-6 geht grob wie folgt vor: Es bringt die Gleichungen in Standardform und stellt die Koeffizientenmatrix auf.

Startpunkt isti =1.

(16)

Das Verfahren

1 Falls in deri-ten Zeile die Zahl in deri-ten Spalte 0 ist, wird diese Zeile mit einer Zeile unterhalb ausgetauscht, bei der in deri-ten Spalte eine Zahl steht. Falls keine solche Zeile existiert, ist das Gleichungssystem nicht eindeutig oder auch gar nicht lösbar.

Danach wird diei-te Zeile durch die Zahl, in ihreri-ten Spalte geteilt. Das Diagonalelement wird dadurch 1.

2 Nun wird zu allen anderen Zeilenjmitj6=iein geeignetes Vielfaches der Zeileisubtrahuiert, so daß die Zahl in deri-ten Spalte derj-ten Zeile 0 wird. Danach darf in deri-ten Spalte nur noch in deri-ten Zeile eine 1 stehen, sonst stehen nur noch Nullen in dieser Spalte.

3 Fallsi <n, wirdi um eins erhöht und gehe zurück zu Schritt 1.

Die Lösung steht in der letzten Spalte.

(17)

Programm 5:Ein Löser für lineare Gleichungssysteme.

public classGauss {

static final intDIM= 4;

doubleM[][] = {

{1.0, 2.0,−1.0,−2.0}, {1.0, 3.0,−1.0,−2.0},{2.0, 1.0, 1.0, 1.0}, {3.0, 1.0, 2.0, 1.0}};

doubleV[] = {−6.0,−4.0, 11.0, 15.0};

doubleS[] =new double[DIM];

/∗∗

Constructor for objects of class Gauss

∗/

publicGauss() { if(solve(M,V)) {

for(intk=DIM−1;k>=0;k−−) { S[k] =V[k];

for(inti=(k+1);i<DIM;i++)S[k]−= (M[k][i]∗S[i]);

S[k] =S[k] /M[k][k];

}

System.out.println("Solution:");

for(inti=0;i<DIM;i++) System.out.print(" "+S[i]);

System.out.println();

}

(18)

Programm 6:Ein Löser für lineare Gleichungssysteme.

public booleansolve(doubleM[][],doubleV[]) { for(intk=0;k<DIM−1;k++) {

doublemax=M[k][k] > 0 ?M[k][k] :−M[k][k];

intm=k;

for(inti=k+1;i<DIM;i++) {

doubleabs=M[i][k] > 0 ?M[i][k] :−M[i][k];

if(max<abs) {max=M[i][k];m=i; } }

if(m!=k) {

for(inti=k;i<DIM;i++) {doublet=M[k][i];M[k][i] =M[m][i];M[m][i] =t; } doublet=V[k];V[k] =V[m];V[m] =t;

}

if(M[k][k] == 0)return false;

for(intj=(k+1);j<DIM;j++) { doublef=M[j][k] /M[k][k];

for(inti=k;i<DIM;i++)M[j][i] =M[j][i] +f∗M[k][i];

V[j] =V[j] +f∗V[k];

} }

return true;

} }

Referenzen

ÄHNLICHE DOKUMENTE

Hauptprogrammiersprache ist Java – Programmierumgebung BlueJ Im imperativen Kern sind die Programmiersprachen oft verwandt: Viele einfache Code-Fragmente lassen sich

Sie sollen das Prinzip Rekursion verstehen und die Mächtigkeit sowie Eleganz der Methode in der Informatik erkennen. Dabei werden die intuitive Problemlösung, deren

Weil das erste Paar schon im ersten Monat Nachwuchs bekommt, kann man es verdoppeln, so dass nach einem Monat 2 Paare da sind.. Von diesen vermehrt sich das erste im zweiten

Eine gute Wahl für X mit geringer Vergleichsanzahl ist Mergesort – einem klassischen Divide-and-Conquer Verfahren, das die zu sortierenden Daten rekursiv in kleinere Teile zerlegt..

Die Platten sind in der Größe verschieden und eine kleinere Platte darf niemals unterhalb einer größere Platte liegen!. Das folgende Bild zeigt alle möglichen Zustände mit n =

Eine zufällige Permutation kann dadurch erzeugt werden, dass für alle k aus n − 1,.. ,

But Hilbert’s name is more often remembered for his work in number theory, his Zahlbericht, his book Foundations of Geometry, and for his text on integral equations.. The term

Lehrstuhl für Praktische Informatik IV Universität