Modulare Polynomarithmetik: Evaluation und Interpolation

Ähnliche Dokumente
Korrektur Aufgabe 8.1

Kapitel III Ringe und Körper

Division mit Schulmethode

Diskrete Fourier-Transformation Stefanie Dourvos Institut für Informatik FU Berlin

15. Vorlesung. Primitive Polynome (Beispiel) Beispiel zur Konstruktion von GF(p)[x]/f (x) mit einem primitiven Polynom f (x) (Logarithmentafel)

Definition 131 Sei R ein (kommutativer) Ring. Ein Polynom über R in der Variablen x ist eine Funktion p der Form

3.5 Schnelle Fouriertransformation (FFT, DFT)

Panorama der Mathematik und Informatik

Der (7, 4)-Hamming-Code

Von den ganzen Zahlen zu GF(p)

Zuname: Vorname: KennNr: Matr.Nr: PRÜFUNG AUS MATHEMATIK 3. 1)(8 P.) Lösen Sie das folgende AWP mit Hilfe der Laplacetransformation.

Satz 142 (Partialbruchzerlegung)

Die schnelle Fouriertransformation

2.1 Polynome, Polynomfunktionen und Nullstellen. k=0

6 Polynominterpolation

Die inverse Diskrete Fourier Transformation

Partialbruchzerlegung

31 Polynomringe Motivation Definition: Polynomringe

Runde 9, Beispiel 57

Komplexe Zahlen. Berechnung von n-ten Wurzeln. Als Beispiel behandeln wir die Bestimmung der 3-ten Wurzeln von z = i

Prüfungsfragen zur Vorlesung Algebra und Diskrete Mathematik. Sommersemester 2018

Addition, Subtraktion und Multiplikation von komplexen Zahlen z 1 = (a 1, b 1 ) und z 2 = (a 2, b 2 ):

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

1.7 Die schnelle Fourier-Transformation (FFT)

Übungen zu Splines Lösungen zu Übung 20

T n (1) = 1 T n (cos π n )= 1. deg T n q n 1.

3. Funktionen. 3.1 Grundbegriffe [Kö 4.1; Sch-St 4.3]

8.7 Die schnelle Fourier-Transformation

8.7 Die schnelle Fourier-Transformation Aufgabe: Gegeben zwei Polynome A(x) und B(x), als A(x) =

Elemente der Mathematik - Sommer 2016

WS 2009/10. Diskrete Strukturen

Beispiel für eine periodische Spline-Interpolationsfunktion: Wir betrachten f(x) = sin(πx) und geben die folgenden Stützstellen und Stützwerte vor:

2.9 Die komplexen Zahlen

8. Der Fundamentalsatz der Algebra

Algebra für Informationssystemtechniker

1 Potenzen und Polynome

Lösung zu Serie [Aufgabe] Faktorisieren Sie die folgenden Polynome so weit wie möglich:

5 Interpolation und Approximation

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

Mathematik für Informatiker II (Maikel Nadolski)

Schaltalgebra. Franz Pauer, Florian Stampfer. Institut für Fachdidaktik und Institut für Mathematik. Universität Innsbruck

1 Mengenlehre. Maturavorbereitung GF Mathematik. Aufgabe 1.1. Aufgabe 1.2. Bestimme A \ B. Aufgabe 1.3. Aufgabe 1.4. Bestimme B \ A. Aufgabe 1.

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

Partikuläre Lösung inhomogener DGLen 2. Ordnung mit konstanten Koeffizienten

D-CHEM Mathematik III Sommer 2016 Prof. Dr. F. Da Lio. First Draft. 20 x ct x + ct x 4t x + 4t 20, 4t 20 x 20 4t.

Numerische Verfahren und Grundlagen der Analysis

Algebra und Diskrete Mathematik, PS3. Sommersemester Prüfungsfragen

Beispiel bestimme x Z mit. es gilt also. gilt dann. für x = 1 i k c i (M/m i ) v i gilt. y c i mod m i (1 i k), nämlich y = x mod M

1. Filterung im Ortsbereich 1.1 Grundbegriffe 1.2 Lineare Filter 1.3 Nicht-Lineare Filter 1.4 Separabele Filter 1.

Grundlagen komplexe Zahlen. natürliche Zahlen

2 Polynome und rationale Funktionen

8.2 Invertierbare Matrizen

Körper- und Galoistheorie

9 Differentialrechnung für Funktionen in n Variablen

Diskrete Fourier-Transformation Stefanie Dourvos Institut für Informatik FU Berlin

02. Komplexe Zahlen. a = Re z ist der Realteil von z, b = Im z der Imaginärteil von z.

Polynominterpolation

Die Wärmeleitungsgleichung

Ganzrationale Funktionen

grundzüge der informatik - tutorium 4/2 - arnaud moreau mittwoch

Lineare Differenzengleichungen. Franz Pauer. Vortrag beim LehrerInnenfortbildungstag West 2010 in Innsbruck

Einführung in die Algebra

1. Definition der komplexen Zahlen Ziel: neuerliche Zahlbereichserweiterung, so dass auch Quadratwurzeln aus negativen Zahlen

4.1 Stammfunktionen: das unbestimmte Integral

Approximation durch Polynome

Kapitel 30. Aufgaben. Verständnisfragen. Aufgabe 30.1 Gegeben ist die Funktion. 0 <x π 2 π 2 <x π. x, π. f(x)=

4.1. Vektorräume und lineare Abbildungen

9.2 Invertierbare Matrizen

Motivation Phasenbestimmung

Die komplexen Zahlen. 1. Einführung. A) Erweiterung des Zahlenkörpers. Def. 1 (imaginäre Einheit)

REPETITORIUM DER HÖHEREN MATHEMATIK. Gerhard Merziger Thomas Wirth

K. Eppler, Inst. f. Num. Mathematik Übungsaufgaben. 1. Übung: Woche vom (komplexe Zahlen):

Übungen zur Vorlesung Einführung in die Mathematik

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

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

Jörn Loviscach. Versionsstand: 15. Dezember 2009, 20:46. 1 Ganzzahlige Potenzen und Wurzeln komplexer Zahlen

5 Numerische Mathematik

f(x) = x f 1 (x) = x. Aufgabe 2. Welche der folgenden Funktionen sind injektiv, surjektiv, bijektiv?

1.1 Vorbemerkung: Konvergenz von Reihen. g = lim. n=0. n=0 a n sei konvergent und schreibt. a n = g. (2) n=0

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

Übungen zu Konkrete Mathematik

Numerisches Programmieren, Übungen

Mathematik für Anwender I

Körper sind nullteilerfrei

Komplexe Zahlen. (a, b) + (c, d) := (a + c, b + d) (a, b) (c, d) := (a c b d, a d + b c)

Polynominterpolation. Allgemeines Problem: Beispiel 1 (Teil 1):

m 1 Die Bewegung der drei Kugeln wird beschrieben durch das folgende Differentialgleichungssystem x 1 (t) x 2 (t) x 3 (t) k 12 k 12 k 12 k k 23

Entscheidungsverfahren mit Anwendungen in der Softwareverifikation

Brückenkurs Mathematik. Freitag Freitag

Gleichungen und Ungleichungen

Gleichungen und Ungleichungen

Gleichungen und Ungleichungen

Numerisches Programmieren, Übungen

Mathematischer Vorbereitungskurs für das MINT-Studium

Funktionen und andere Zuordnungen

Partialbruchzerlegung für Biologen

D-MATH Funktionentheorie HS 2018 Prof. Michael Struwe. Lösungen Serie 8. Laurentreihen, isolierte Singularitäten, meromorphe Funktionen

Numerisches Programmieren

Transkript:

Modulare Polynomarithmetik: Evaluation und Interpolation Zwei Polynome f(x) und g(x) vom Grad 3 sollen miteinander multipliziert werden. Das Produkt h(x) = f(x) g(x) ist ein Polynom vom Grad 7. > f := X -> 5*X^3+3*X^-4*X+3; f := X 5 X 3 + 3 X 4 X + 3 > g := X -> *X^3-5*X^+7*X-; g := X X 3 5 X + 7 X > h := unapply(expand(f(x)*g(x)),x); h := X 10 X 6 19 X 5 + 1 X 4 + 37 X 3 49 X + 9 X 6 Um h(x) nach dem Schema von Evaluation und Interpolation zu berechnen, genügen also Interpolationsstellen, die im Prinzip beliebig gewählt werden könnnen. Die Interpolationspunkte: > points := [seq(x,x=0..7)]; points := [0, 1,, 3, 4, 5, 6, 7] Die Werte der Polynome f(x) und g(x) an den Interpolationspunkten: > valuesf := map(f,points); valuesf := [3, 7, 47, 153, 355, 63, 1167, 137] > valuesg := map(g,points); valuesg := [,,,, 74, 15, 9, 4] Die Werte des Polynoms h(x) sind die Produkte der entsprechenden Werte von f(x) und g(x) > zip((x,y)-> x*y,valuesf,valuesg); [ 6, 14, 376, 44, 670, 107914, 340764, 96456] Durch Interpolation erhält man das gesuchte Polynom: > interp(points,%,x); 10 X 6 19 X 5 + 1 X 4 + 37 X 3 49 X + 9 X 6 Man hätte die Interpolationspunkte auch zufällig wählen können. Beispielsweise mit Hilfe eines Zufallsgenerators. Man muss sich dann nur vergewissern, dass die Punkte paarweise verschieden sind.

> die := rand(-99..99); die := proc() local t; global seed; seed := irem(a seed, p) ; t := seed ; to concats do seed := irem(a seed, p) ; t := s t + seed end do ; irem(t, divisor) + offset end proc > randpoints := [seq(die(),x=0..7)]; randpoints := [ 5, 55, 37, 35, 97, 50, 79, 56] > valuesf := map(f,randpoints); valuesf := [ 304607, 577, 49007, 10557, 459107, 63303, 43605, 767] > valuesg := map(g,randpoints); valuesg := [ 16497, 346, 1041, 91, 17797, 374, 95544, 33594] > zip((x,y)-> x*y,valuesf,valuesg); [35640494004, 647311174, 69953464, 19396931954, 16765646446, 15039003944, 3795350, 907050514] > interp(randpoints,%,x); 10 X 6 19 X 5 + 1 X 4 + 37 X 3 49 X + 9 X 6 Bei der Diskreten Fouriertransformation der Ordnung n wählt man als Interpolationspunkte die sogenannten n-ten Einheitswurzeln in der komplexen Ebene. Das sind die n Lösungen der Gleichung X n = 1, diese liegen auf dem Einheitskreis; es handelt sich um die n (verschiedenen) Potenzen der sogenannten primitiven n-ten Einheitwurzel e πi/n. Im Falle des Beispiels arbeitet man mit $n=$. > dftpoints := [solve(x^=1)]; dftpoints := [ I, I, 1, 1, 1 1 I, 1 1 + I, 1 1 + I, 1 1 I ] Die Liste der Punkte ist nicht in fortlaufenen Potenzen geordnet. Um das explizit zu machen: > omega := (1+I)/sqrt(); ω := ( 1 + 1 I) > dftpoints := [seq(evalc(omega^k),k=0..7)]; dftpoints := [1, 1 1 + I, I, 1 1 + I, 1, 1 1 I, I, 1 1 I ]

Die Polynome f(x) und g(x) und des Produktes h(x) haben an diesen Stellen komplexe Werte. > valuesf := map(evalc,map(f,dftpoints)); valuesf := [7, 9 1 9 1 + 3 + I ( + 3), 9 I, + 3 + I ( 3), 5, 9 1 9 1 + 3 + I ( + 3), 9 I, + 3 + I ( 3)] > valuesg := map(evalc,map(g,dftpoints)); valuesg := [, 5 9 5 9 + I ( 5), 3 + 5 I, + I ( + 5), 16, 5 9 5 9 + I ( 5), 3 5 I, + I ( + 5)] > valuesh := map(evalc,map(h,dftpoints)); valuesh := [14, 11 5 11 5 1 + I ( 59 + ), 45 7 I, 1 + I (59 + ), 0, 11 5 11 5 1 + I ( 59 ), 45 + 7 I, 1 + I (59 )] Die Werte von h(x) erhält man auch durch Bildung der Produkte der entsprechenden Werte von f(x) und g(x) > zip((x,y)-> evalc(x*y),valuesf,valuesg); [14, 11 5 11 5 1 + I ( 59 + ), 45 7 I, 1 + I (59 + ), 0, 11 5 11 5 1 + I ( 59 ), 45 + 7 I, 1 + I (59 )] Die Berechnung (der Koeffizienten) von h(x) kann man in diesem Fall statt durch Interpolation viel einfacher durch Anwendung der inversen Fouriertransformation machen. Dazu interpretiert man die Folge der Funktionswerte als Koeffizienten eines Polynoms H(X). (Jetzt kommt es auf die richtige Reihenfolge an!) > convert(zip((x,y)->x*y,valuesh,[seq(x^k,k=0..7)]), + ); 14 + ( 11 5 1 + I ( 59 + )) X + (45 7 I) X 1 + I (59 + )) X 3 0 X 4 1 + I ( 59 )) X 5 + (45 + 7 I) X 6 + ( 11 5 1 + I (59 )) X 7 > H := unapply(%,x);

H := X 14 + ( 11 5 1 + I ( 59 + )) X + (45 7 I) X 1 + I (59 + )) X 3 0 X 4 1 + I ( 59 )) X 5 + (45 + 7 I) X 6 + ( 11 5 1 + I (59 )) X 7 Die Auswertung geschieht wiederum an den achten Einheitswurzeln, nun aber im umgekehrten Durchlaufungssinn: > inversedftpoints :=[seq(evalc(omega^(-k)),k=0..7)]; inversedftpoints := [1, 1 1 I, I, 1 1 I, 1, 1 1 + I, I, 1 1 + I ] > valuesh := map(expand,map(evalc,map(h,inversedftpoints))); valuesh := [ 4, 3, 39, 96, 96, 15, 0, 0] Nach Divisions durch den Skalierungsfaktor erhält man in der Tat die Koeffizienten des Polynoms h(x). > map(x->1/*x,%); [ 6, 9, 49, 37, 1, 19, 10, 0] Im Beispielfall n= kann man exakt rechnen, da ω mittels Wurzeln exakt ausgedrückt werden kann. Das ist im allgemeinen nicht mehr der Fall und man muss die Rechnungen (sofern man nicht in endliche Körper und Ringe ausweicht) mit Fliesskamma-Arithmetik, also mit Rundungsfehlern behaftet, durchfhren. Zur Illustration folgt das gleiche Beispiel mit der in Maple eingebauten FFT-Funktion.

Komplexe FFT in Maple Liste der Koeffizienten des Polynoms f(x): > fcoeffs := array([seq(coeff(f(x),x,k),k=0..7)]); fcoeffs := [3, 4, 3, 5, 0, 0, 0, 0] Die Koeffizienten müssen in Real- und Imaginärteile zerlegt werden: > reell := fcoeffs; reell := fcoeffs > imag := array([0$]); imag := [0, 0, 0, 0, 0, 0, 0, 0] Durchführung der DFT der Ordnung = 3 mittels FFT: > FFT(3,reell,imag); Man erhält im Frequenzbereich die Liste der Werte auch nach Real- und Imaginärteil getrennt: > Freell := copy(reell): > print(reell); [7.000000001, 3.363961017, 0., 9.363961017, 4.999999999, 9.363961017, 0., 3.363961017] > Fimag := copy(imag): > print(imag); [0, 3.707106773,.999999995,.99319, 0.,.99319,.999999995, 3.707106773] Mittels inverser Fouriertransformation sollten sich die Koeffizienten von f(x) wiederherstellen lassen. Das gelingt nur bis auf Rundungsfehler! > ifft(3,reell,imag); > op(reell); [3.000000000, 3.99999999,.99999999, 4.99999999, 0.,.500000000 10,.500000000 10,.650000000 10 ] > op(imag); [0.,.7500000000 10 9, 0.,.5000000000 10 9, 0.,.7500000000 10 9, 0.,.5000000000 10 9 ] FFT der Koeffizientenliste von g(x):

> gcoeffs := array([seq(coeff(g(x),x,k),k=0..7)]); gcoeffs := [, 7, 5,, 0, 0, 0, 0] > reell := gcoeffs; reell := gcoeffs > imag := array([0$]); imag := [0, 0, 0, 0, 0, 0, 0, 0] > FFT(3,reell,imag); > Greell := reell: > print(reell); [, 1.535533906, 3., 5.535533906, 16, 5.535533906, 3., 1.535533906] > Gimag := imag: > print(imag); [0, 1.363961031, 5., 11.3639610, 0, 11.3639610, 5., 1.363961031] Punktweise Multiplikation im Frequenzbereich: > Fcoeffs := zip((x,y) -> x+i*y,freell,fimag); Fcoeffs := [7.000000001, 3.363961017 3.707106773 I, 0. +.999999995 I, 9.363961017 +.99319 I, 4.999999999 + 0. I, 9.363961017.99319 I, 0..999999995 I, 3.363961017 + 3.707106773 I] > Gcoeffs := zip((x,y) -> x+i*y,greell,gimag); Gcoeffs := [, 1.535533906 1.363961031 I, 3. 5. I, 5.535533906 11.3639610 I, 16, 5.535533906 + 11.3639610 I, 3. + 5. I, 1.535533906 + 1.363961031 I] > Hcoeffs := zip((x,y)-> evalc(x*y),fcoeffs,gcoeffs); Hcoeffs := [14.00000000, 10.153 1.104076406 I, 44.9999999 + 6.9999999 I, 5.7717454 119.1040761 I, 79.9999999 0. I, 5.7717454 + 119.1040761 I, 44.9999999 6.9999999 I, 10.153 + 1.104076406 I] Vergleich mit der Fouriertransformierten (in floats) H(X) der Produktpolynoms h(x): > evalf(h(x)); 14. (10.1541 1.1040763 I) X + (45. 7. I) X (5.7717459 119.1040764 I) X 3 0. X 4 (5.7717459 + 119.1040764 I) X 5 + (45. + 7. I) X 6 (10.1541 + 1.1040763 I) X 7 > Hreal := map(x->re(x),hcoeffs); Hreal := [14.00000000, 10.153, 44.9999999, 5.7717454, 79.9999999, 5.7717454, 44.9999999, 10.153]

> Himag := map(x->im(x),hcoeffs); Himag := [0., 1.104076406, 6.9999999, 119.1040761, 0., 119.1040761, 6.9999999, 1.104076406] Rücktransformation mittels der Werte von H(X): > ifft(3,hreal,himag); > op(hreal); [ 5.9999999,.9999999, 4.99999991, 36.9999999, 11.9999999, 1.9999999, 9.99999993,.5000000000 10 7 ] > op(himag); [0.,.3750000000 10, 0.,.650000000 10, 0.,.3750000000 10, 0.,.650000000 10 ] Vergleich mit dem Produktpolynom h(x) > h(x); 10 X 6 19 X 5 + 1 X 4 + 37 X 3 49 X + 9 X 6