Übungen zu Numerisches Programmieren

Ähnliche Dokumente
Polynominterpolation

5 Interpolation und Approximation

1 2 x x x x x x2 + 83

Mathematik I für Studierende der Informatik und Wirtschaftsinformatik (Diskrete Mathematik) im Wintersemester 2015/16

1/26. Integration. Numerische Mathematik 1 WS 2011/12

Von mathematischer Modellierung und Computeralgebra - Die Lösung eines handfesten mathematischen Problems

Serie 3: Ringe, Körper, Vektorräume

Algebra und Diskrete Mathematik, PS3. Sommersemester Prüfungsfragen

6. Polynom-Interpolation

3.1.3 Newtonsche Interpolationsformel / Dividierte Differenzen

Vorlesung Diskrete Strukturen Gruppe und Ring

GMA. Grundlagen Mathematik und Analysis. Nullstellen und Fixpunkte Reelle Funktionen 3. Christian Cenker Gabriele Uchida

DHBW Karlsruhe, Vorlesung Programmieren, Klassen (2)

5 Numerische Mathematik

Interpolation und Integration mit Polynomen

Anleitung zum Ausführen der vier Grundrechenarten mit dem russischen Abakus ( Stschoty )

Numerische Integration und Differentiation

Die Interpolationsformel von Lagrange

Vorlesung. Inhalt. Lineare Algebra und Wahrscheinlichkeitsrechnung für Informatik Gunter Ochs, Nico Rompos Sommersemester 2016

6 Iterationsverfahren für lineare und nichtlineare Gleichungssysteme

KAPITEL 8. Interpolation

3. Diskrete Mathematik

Tutorial: Numerisch Differenzieren

Wissenschaftliches Rechnen

Numerisches Programmieren

Kapitel III Ringe und Körper

2 Polynome und rationale Funktionen

3. Übungsblatt zur Lineare Algebra I für Physiker

Lineare Algebra II 6. Übungsblatt

1. Rechnerarithmetik und. Rundungsfehler

Musterlösung zum Übungsblatt Interpolation nach Newton, Nevill, Lagrange.

Kapitel 6: Das quadratische Reziprozitätsgesetz

8 Interpolation. 8.1 Problemstellung. Gegeben: Diskrete Werte einer Funktion f : R R an n + 1 Stützstellen. x 0 < x 1 <... < x n.

5. Numerische Differentiation. und Integration

Polynome. Analysis 1 für Informatik

Mathematischer Vorkurs Dr. Thomas Zehrt Funktionen 2. 1 Translationen 2. 2 Skalierungen 4. 3 Die Wurzelfunktion 6

Numerik für Ingenieure I Wintersemester 2008

$Id: ring.tex,v /05/03 15:13:26 hk Exp $

Praktisch modulo n rechnen

6 Polynominterpolation

Dynamische Systeme und Zeitreihenanalyse // Komplexe Zahlen 3 p.2/29

Motivation Schwellenwertverfahren Shamir Sicherheitsaspekte Zugriffsstrukturen Quellen. Secret Sharing. Das Teilen von Geheimnissen.

Mathematik für Biologen mathematische Ergänzungen und Beispiele Teil I

Kapitel 3. Kapitel 3 Gleichungen

(x x j ) R m [x] (3) x x j x k x j. R m [x]. (4)

Berechnungen mit dem Horner-Schema

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt 5 1. Semester ARBEITSBLATT 5 RECHNEN MIT BRÜCHEN. 1. Arten von Brüchen und Definition

Diskrete Mathematik. Sebastian Iwanowski FH Wedel. Kap. 4: Zahlentheorie

Differentialrechnung

Wiederholungsblatt zur Gruppentheorie

4 Kryptologie. Übersicht

Praktikum zur Vorlesung: Numerische Mathematik für Lehramt SS Matlab: Fortsetzung. Jan Mayer. 4. Mai 2006

Hast du auch wirklich versucht, die Aufgaben einmal selbständig zu lösen? Wenn nicht, tue es, bevor du dir die Lösungen anschaust!

Inhalt Kapitel IV: Interpolation

Mersennesche Primzahlen

Approximation durch Polynome

Mathematik für Informatik 3

4. Funktionen und Relationen

8. Musterlösung zu Mathematik für Informatiker II, SS 2004

31 Polynomringe Motivation Definition: Polynomringe

8 Polynominterpolation

Übungen zu Splines Lösungen zu Übung 20

Approximation von Nullstellen mit Hilfe der Ableitung Mit Tangenten geht es oft einfacher und schneller als mit Sehnen oder Sekanten

Algebraische Strukturen. Idee. Gruppen, Ringe, Körper... (Teschl/Teschl Abschnitt 3.2, siehe auch Kap. 4)

Numerische Verfahren Übungen und Lösungen, Blatt 1

Numerisches Programmieren

Kanonische Primfaktorzerlegung

Kryptographie. Vorlesung 7: Der AES Algorithmus. Babeş-Bolyai Universität, Department für Informatik, Cluj-Napoca

Nullstellenberechnung von nichtlinearen Funktionen

Flächenberechnung mit Integralen

Numerische Mathematik

TU Dresden Fachrichtung Mathematik Institut für Numerische Mathematik 1. Dr. M. Herrich SS 2017

Verteilte Kyroptographie

Numerisches Programmieren, Übungen

WS 2009/10. Diskrete Strukturen

Übungen zu Einführung in die Lineare Algebra und Geometrie

Primzahlen. Herbert Koch Mathematisches Institut Universität Bonn Die Primfaktorzerlegung. a = st

El. Zahlentheorie I: Der kleine Satz von Fermat

( ) Dann gilt f(x) g(x) in der Nähe von x 0, das heisst. Für den Fehler r(h) dieser Näherung erhält man unter Verwendung von ( )

Elliptic Curve Cryptography

4.1. Vektorräume und lineare Abbildungen

6.2. Ringe und Körper

Lineare Algebra II 3. Übungsblatt

[5], [0] v 4 = + λ 3

Differential- und Integralrechnung

Sätze über ganzrationale Funktionen

Secret Sharing and Threshold Decryption

Einführung in die Praktische Informatik. Übungsblatt 3. PD Dr. U. Köthe Heidelberg, 7. November Aufgabe 3.1 Gaußsche Osterregel [6 Punkte]

3.6 Approximationstheorie

Transkript:

Technische Universität München SS 009 Institut für Informatik Prof. Dr. Thomas Huckle Michael Lieb, M. Sc. Dipl.-Tech. Math. Stefanie Schraufstetter Übungen zu Numerisches Programmieren 3. Programmieraufgabe Polynominterpolation Lagrange-Polynome Eine einfache Methode zur Bestimmung eines Interpolationspolynoms zu gegebenen Stützpunkten (x i, y i ), i 0,..., n verwendet die sogenannten Lagrange-Polynome. Das Lagrange- Polynom des k-ten Stützpunkts lautet: L k (x) := i:i k x x i x k x i. () Um das Interpolationspolynom aufzustellen, werden die einzelnen Lagrange-Polynome mit den zugehörigen Stützwerten gewichtet und aufsummiert: p(x) := n y k L k (x). () k=0 In dieser Praktikumsaufgabe sollen Methoden zum Erstellen eines Interpolationspolynoms aus gegebenen Stützpunkten implementiert werden. Im zur Verfügung gestellten Programmrahmen finden Sie dazu die Dateien Polynom.java und Lagrange.java. Polynom.java realisiert die Klasse Polynom, mit der Polynome dargestellt und ausgewertet werden können. Ein Polynom vom Grad n hat n + Koeffizienten a n : p(x) := a 0 x 0 + a x +... + a n x n. (3) Zur Speicherung des Polynoms genügt es daher, die n + Koeffizienten a 0,..., a n zu speichern. Dazu dient die Membervariable coefficients der Klasse Polynom. Die Klasse Lagrange enthält Methodenrümpfe zum Erstellen der Lagrange-Polynome (siehe Glg. ()) und des Interpolationspolynoms (siehe Glg. ()). Numerische Ableitung Bei Polynomen ist das Differenzieren analytisch sehr einfach. Bei komplexeren Funktionen ist das analytische Bilden der Ableitung allerdings nicht immer möglich. Sofern die Funktion an einer Stelle x 0 differenzierbar ist, existiert die Ableitung an dieser Stelle und entspricht genau der Steigung der Tangente an der Funktion in diesem Punkt. Diese Tangente lässt sich durch eine Sekante approximieren: D f (x 0, h) = f(x 0 + h) f(x 0 ). (4) h

D f (x 0, h) wird rechtsseitiger Differenzenquotient genannt. In Abb. ist der Zusammenhang graphisch dargestellt. f(x0+h) 0 f(x0) 0 0 0 00 x0 Tangente x0+h f(x0+h/) 00 0 00 00 0 00 0 00 0 00 00 00 0 00 f(x0 h/) x0 h/ x0+h/ Tangente 00 00 Abbildung : rechtsseitiger Differenzenquotient Abbildung : zentraler Differenzenquotient ): Eine andere Möglichkeit ist die Verwendung des zentralen Differenzenquotienten (Abb. D f (x 0, h) = f(x 0 + h ) f(x 0 h ) h (5) Für beide Möglichkeiten ist die Wahl des richtigen h entscheidend (vgl. Übungsblatt, Aufgabe ). Wird es zu groß gewählt, so erreicht man nur eine sehr schlechte Näherung für die Ableitung. Bei zu kleinem h kann allerdings Auslöschung auftreten. Um den Fehler bei der Näherung bestimmen zu können, muss die exakte Ableitung bekannt sein. Es soll daher im Rahmen dieser Programmieraufgabe untersucht werden, wie sich der Fehler bei der numerischen Ableitung von Polynomen für unterschiedliche h verhält. Die im Programmrahmen bereitgestellte Datei Derivative.java enthält bereits Methoden zur Berechnung der Differenzenquotienten bereit (siehe Glg. (4) und Glg. (5)). Ihre Aufgabe ist es, die Methoden zur Bestimmung des optimalen h und eine weitere Methode zur Bestimmung der analytischen Ableitung eines Polynoms zu implementieren. k aus n Secret Sharing Neben dem Verschlüsseln von Informationen ist es in der Kryptologie auch oftmals wichtig sicherzustellen, dass eine Information von einer bestimmten Person stammt (dazu dient beispielsweise die digitale Unterschrift). Durch Kenntnis eines Schlüssels kann eine Person authentifiziert werden. Beim k aus n secret sharing will man einen Schlüssel in n Teilschlüssel aufteilen und an n Personen verteilen. Nun sollen die Teilschlüssel von beliebigen k Personen (mit k < n) ausreichen, um den Schlüssel zu rekonstruieren, weniger als k Teilschlüssel sollen jedoch keine Rückschlüsse auf den Gesamtschlüssel zulassen. Stellen Sie sich dazu folgende Anwendung vor: n = 7 Gesellschaftern gehört eine Bank. Zur Durchführung großer Transaktionen muss eine Mehrheit der Gesellschafter zustimmen. Es müssen also mindestens k = 4 Gesellschafter z.b. über eine Chipkarte ihren Teilschlüssel einbringen. Dabei soll es keine Rolle spielen, welche 4 Gesellschafter dies tun.

Der Mathematiker Adi Shamir (unter anderem bekannt durch das RSA-Verfahren) hat 979 eine Lösung dieses Problems mittels Polynominterpolation vorgeschlagen. Interessierte können sich das Paper shamir.pdf unter der Rubrik Praktikum von der Vorlesungswebseite herunterladen. Das Shamir-Verfahren Ein Polynom p vom Grad k ist eindeutig durch seine Werte p(x i ) an k paarweise verschiedenen Stützstellen x i bestimmt. Bei obigem Beispiel mit den sieben Gesellschaftern könnte man - z.b. an den vier Stützstellen x i, i 4 - zufällige Zahlen als Stützwerte wählen. Durch diese vier Stützpunkte ist ein Polynom mit einem Grad von drei eindeutig gegeben. In Ausnahmefällen kann der Grad auch geringer sein, z.b. wenn alle Punkte auf einer Geraden liegen. Im Rahmen dieser Programmieraufgabe werden solche Ausnahmefälle ignoriert. Als Gesamtschlüssel können wir nun z.b. den Funktionswert des Polynoms an der Stelle 0 verwenden. Nur wenn die Werte aller vier Stützpunkte bekannt sind, lässt sich das Polynom aufstellen und der Wert an der Stelle 0 berechnen. Bisher haben wir also vier Teilschlüssel, die nur gemeinsam den Zugriff auf den Gesamtschlüssel erlauben. Die drei Teilschlüssel für die verbleibenden Gesellschafter erhält man durch das Auswerten des Polynoms an den Stellen x j, 5 j 7. Jeder der Gesellschafter hat nun als Teilschlüssel den Stützwert an einer ihm zugeordneten Stützstelle (vgl. Abb. 3). Durch das Konstruktionsprinzip ist klar, dass alle diese Punkte auf dem aufgestellten Polynom mit Grad drei liegen. Wie bereits erläutert, kann man ein Polynom dritten Grades aber eindeutig aus vier Stützwerten an paarweise verschiedenen Stützstellen konstruieren. Es können also beliebige vier Gesellschafter gemeinsam das Polynom aufstellen und den Gesamtschlüssel rekonstruieren. Mit weniger als vier Stützpunkten sind jedoch keinerlei Rückschlüsse auf den Gesamtschlüssel möglich. Für die Implementierung des Shamir-Verfahrens wird zunächst eine Methode zum Auswerten eines Polynoms benötigt. Wir wollen aber nicht für jede Transaktion das Polynom komplett aufstellen, daher geschieht das Auswerten mit dem Aitken-Neville-Schema. Dabei wird direkt aus den Stützstellen der Wert des zugehörigen Interpolationspolynoms an einer gegebenen Stelle berechnet. Dazu muss die Methode evaluate in der Datei Aitken real.java implementiert werden. Die Klasse Shamir real dient der Erstellung und Verwaltung der Teilschlüssel. y.95.9.85 Interpolationspolynom Gesamtschluessel k erzeugende Teilschluessel n k fehlende Teilschluessel 4 3.8.75.7.65.6 0 3 4 5 6 7 0 0 3 4 x = Stuetzstellen der k erzeugenden Teilschluessel = Wert des Gesamtschluessels = Wert der n k fehlenden Teilschluessel Abbildung 3: Shamir mit reellen Zahlen. Abbildung 4: Shamir mit ganzen Zahlen. 3

Problem Versuchen Sie, mit unterschiedlichen Kombinationen einer größeren Anzahl an Gesellschaftern den Gesamtschlüssel zu erzeugen (Methode create key) und vergleichen Sie ihn mit dem echten Gesamtschlüssel. Dabei stellt man fest, dass es bei höheren Polynomgraden nicht mehr egal ist, welche Gesellschafter versuchen, den Gesamtschlüssel zu erzeugen. Die Ursache dafür sind Rundungsfehler. Shamir mit ganzen Zahlen Zur Vermeidung von Rundungsfehlern kann das Shamir-Verfahren auch mit natürlichen Zahlen (bzw. einer endlichen Menge natürlicher Zahlen) anstatt mit reellen Zahlen umgesetzt werden. Die mathematischen Grundlagen dazu werden im Folgenden erläutert. Es sei Z p ein endlicher Körper bestehend aus der Menge {z i i {0,..., p}} mit den Verknüpfungen Addition und Multiplikation und p eine Primzahl. Das Produkt zweier Zahlen aus einem solchen Körper berechnet man, indem man zunächst beide Zahlen multipliziert (wie man dies mit natürlichen Zahlen tun würde), und danach Produkt mod p rechnet, d.h. den ganzzahligen Rest der Division des Zwischenergebnisses durch die Primzahl p berechnet: Für x, y Z p : x y = (x + y) mod p, x y = (x y) mod p. Bei der Addition und Substraktion wird auch zunächst das Zwischenergebnis berechnet. Ist es nicht aus der Menge der Zahlen des Körpers, so muss p addiert bzw. subtrahiert werden. Die Division gestaltet sich etwas schwieriger, da ganze Zahlen normalerweise nicht durcheinander geteilt werden können. Laut dem kleinen Satz von Fermat gilt für alle Primzahlen p und alle a, die kein Vielfaches von p sind: Teilt man nun durch a, so folgt: a p mod p = (a p mod p) a =. a p = a. Das Teilen durch a entspricht daher dem Multiplizieren mit a p. Polynome auf diesen Körpern sind zwar nicht sehr anschaulich, aber für das Shamir- Verfahren funkionieren sie problemlos (vgl. Abb. 4). Es werden lediglich Methoden zum modulo-rechnen und zum Potentieren mod p benötigt. Die Methodenrümpfe dazu finden Sie in der Datei Aitken int.java. siehe z.b. www.primzahlen.de 4

Konkrete Aufgaben Im Folgenden werden die zu implementierenden Methoden aufgelistet. Details finden Sie jeweils in den Kommentaren zu den einzelnen Methoden. Testen Sie unbedingt jede einzelne Methode direkt nach der Erstellung! Dieses mal bleibt die Entwicklung geeigneter Testmethoden gänzlich Ihnen überlassen. Klasse Polynom: Methode evaluate Klasse Lagrange: Methoden create lagrange base und assemble polynoms Klasse Derivative: Methoden analytic derivative,compare deriv forward und compare deriv central Klasse Aitken real: Methode evaluate Klasse Shamir real: Methoden create key und den Konstruktor Klasse Aitken int: Methoden evaluate, mod und pow mod Klasse Shamir int: Methoden create key und den Konstruktor Formalien Das Programmgerüst erhalten Sie auf den Webseiten zur Vorlesung. Ergänzen Sie das Programmgerüst bitte nur an den dafür vorgegebenen Stellen! Falls Sie die Struktur der Programme eigenmächtig verändern, können wir sie evtl. nicht mehr testen. Beseitigen Sie vor Abgabe Ihres Programms alle Ausgaben an die Konsole! Bitte schicken Sie Ihre Abgabe als TAR-Archiv bis zum 8. Juni 009, :00 Uhr an liebm@in.tum.de. Die Abgaben werden korrigiert und Sie erhalten eine Rückmeldung per Email. 5