• Keine Ergebnisse gefunden

Programmieraufgabe I (9 + 8 + 4 + 4 = 25 Punkte)

N/A
N/A
Protected

Academic year: 2021

Aktie "Programmieraufgabe I (9 + 8 + 4 + 4 = 25 Punkte)"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Programmieraufgabe I (9 + 8 + 4 + 4 = 25 Punkte)

Abgabe in der Woche vom 5. bis 9. November

In [1]: import numpy as np

import matplotlib.pyplot as plt

Die grundlegenden Operationen der linearen Algebra (d.h. Summen, Skalarprodukte, Norm, Matrix-Vektor-Produkt, etc.) sind sind für numpy-arrays bereits implementiert und dürfen hier verwendet werden.

Teilaufgabe a)

Implementieren Sie eine Funktion, die als Input ein Matrix (als numpy-array) erhält und die reduzierte QR-Zerlegung ( , jeweils als numpy-arrays) zurückgibt. Als Subroutine empfiehlt es sich, die Anwendung der Householder- Transformation separat zu implementieren.

A Q ^ R ^

In [64]: def myqr(A):

## Diese Funktion soll die reduzierte QR-Zerlegung von A berechnen und Q ,R (in der Vorlesung $\hat{Q}, \hat{R}$) zurückgeben...

return Q,R

def householder(arg, w):

## Diese Funktion soll eine Householder-Transformation $I - 2ww^T$ auf d as Argument arg (Matrix oder Vektor) anwenden.

return result

Testen Sie Ihre eigene Implementierung, indem Sie eine zufällige -Matrix erzeugen und deren mit Ihrer Implementierung generierte QR-Zerlegung mit der in numpy bereits implementierten QR-Zerlegung vergleichen.

5 × 4

In [65]: ## Hinweis: Verwenden Sie die Generierung zufälliger Matrizen aus numpy...

Teilaufgabe b)

Implementieren Sie die QR-basierte Lösungsstrategie für das Least-Squares Problem : Die Funktion soll als Input die Matrix und den Vektor (beide als numpy-array) erhalten und die Lösung zurückgegebn.

Die Lösung eines Gleichungsystems mit oberer Dreiecksstruktur sollen Sie als eigene Routine programmieren. (Der lineare Löser aus numpy soll hier nicht verwendet werden.)

∥Ax − b∥

min

x

A b x

min

Aufgabe1 http://localhost:8888/nbconvert/html/LehreWS...

1 of 3 20/12/2018, 14:25

(2)

In [4]: def myuppertriangularsolver(A,b):

## Löst die Gleichung Ax = b, wobei A eine obere Dreiecksmatrix mit stri kt positiven Diagonalementen ist. ##

return x

def myleastsquares(A,b):

## Löst das least squares problem $min_x \lVert Ax-b \rVert_2$.

return xmin

Testen Sie Ihre Implementierung an Aufgabe 1b) von Übungsblatt Nr. 2:

In [66]: b = np.array([2, 3, 3, -2])

A = np.array([[1, -2, 4], [1, -1, 1], [1,1,1], [1,2,4]]) xtrue=np.array([4, -4./5, -1])

## Test: ...

Teilaufgabe c)

Es sei das Interval gegeben. Die folgende Funktion gibt einen Vektor von Werten aus sowie die geringfügig zufällig gestörten zugehörigen Werte zurück.

I = (0, 1) x− I

y− yf(x)

In [58]: def noisyfunction(fun, numberofpoints, noisemax):

xvals = np.random.rand(numberofpoints) yvals = np.zeros(numberofpoints) for k in range(numberofpoints):

yvals[k] = fun(xvals[k]) + 2*noisemax*(np.random.rand()-0.5) return xvals, yvals

Es sei eine Funktion gegeben, z.B. oder , derart, dass

durch eine "sinnvolle" Familie von Basisfunktionen definiert wird.

Für gegebene Datenpunkte und wollen wir einen Koeffizientenvektor

bestimmen, der das Least-Squares Problem löst.

Schreiben Sie dazu die Funktion "myregression" mit folgenden Inputs:

xvals, yvals: Arrays mit den gegebenen Wertepaaren

funfamily: Funktion für die Erzeugung der Basisfunktionen (siehe oben) degree: entspricht , der Anzahl der verwendeten Basisfunktionen

xtoevaluate: array mit Werten, an denen die gefundene Regressions-Lösung ausgewertet werden soll Ausgegeben werden soll der Koeffizientenvektor coeffvec sowie die Auswertung y der Regressions-Lösung an den in xtoevaluate gegebenen x-Werten.

F : R × N → R F

Pol

(x, l) := x

l

F

sin

(x, l) = sin(πlx) (x) := F (x, l)

f

l

( , ), . . . , ( x

1

y

1

x

m

, y

m

) n ∈ N

c = ( , . . . , ) c

0

c

n

min

c∈Rn

mk=1

| ∑

nl=1

c

l

f

l

( ) − | x

k

y

k 2

F n

x−

Aufgabe1 http://localhost:8888/nbconvert/html/LehreWS...

2 of 3 20/12/2018, 14:25

(3)

In [68]: def myregression(xvals, yvals, funfamily, degree, xtoevaluate):

## ... ##

return y, coeffvec

## Implementierung der Basis-Familien $F_Pol$ bzw. $F_sin$ von oben:

def polynomialfamily(x,l):

return x**l def sinefamily(x,l):

return np.sin(np.pi*x*(l+1))

Teilaufgabe d)

Testen Sie Ihre Implementierung für die Lösung des Least-Squares Problems mit den unten erzeugten Wertepaaren:

Plotten Sie dazu jeweils die verrauschten Wertepaare sowie die Regressionsfunktion.

Variieren Sie die Anzahl der Basisfunktionen bzw. die Wahl der Familie von Basisfunktionen.

Erklären Sie, weshalb die Lösung des Least-Squares Problems für die Approximation von mittels Sinus- Schwingungen sehr viel instabiler zu sein scheint als die Approximation des Sinus mit Polynomen.

x

12

In [71]: def fun_1(x):

return np.sin(2*np.pi*x)

xvals_1,yvals_1=noisyfunction(fun_1, 50, 0.1) def fun_2(x):

return x-0.5

xvals_2, yvals_2 = noisyfunction(fun_2, 50, 0.1)

## ...

In [ ]:

Aufgabe1 http://localhost:8888/nbconvert/html/LehreWS...

3 of 3 20/12/2018, 14:25

Referenzen

ÄHNLICHE DOKUMENTE

Plotten Sie jeweils den Fehler der Quadratur in Abhängigkeit von der Anzahl der Subintervalle bzw. in Abhängigkeit von der Zahl der benötigten Funktionsauswertungen..

Schreiben Sie eine Funktion plotte vf(x,y,u,v), welche ungef¨ ahr das gleiche tut wie plt.quiver.. y-Komponenten des Vektorfeldes (also analog

Berechnen Sie weiter f¨ ur jede Iterierte des Jacobi- und Gauß-Seidel-Verfahrens den Fehler zur exakten L¨ osung des Poisson Problems (zum Beispiel unter Verwendung der

mistakes will devaluate the answer only if they are severe and make the meaning unclear or ambiguous (5 points max). (d) confident use of the vocabulary within the framework of the

, r}, so ist die Matrix R ∈ K r×n mit den Einträgen % j,k in Zeilenstufenform (weil jede Spalte mit mindestens so vielen Nullen endet wie die nachfolgenden) und es gilt QR = A,

In Sachsen-Anhalt wurde zur Erarbeitung der landesspezifischen fachlichen Vorgaben sowie einer besseren Mitarbeit im Projektteam LEFIS eine Arbeitsgruppe LEFIS im Juni 2009 unter

Testen Sie Ihre Funktion am System aus Aufgabe 15 in einer Datei main.m, indem Sie die (eventuell kor- rigierten und angepassten) Matlab-Funktionen der Vorw¨ arts- und R¨

Redefinieren Sie die Methode solve aus Aufgabe 12.4 f¨ ur die Klasse DiagonalMatrix aus Aufgabe 12.6 sodass Sie ein lineares Gleichungssystem Ax = b f¨ ur eine DiagonalMatrix A l¨