Folien für Übungen

Super tolle Folien zum Spottpreis!

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Folien für Übungen
Hallo zusammen,

im Rahmen meiner AlgoKS-Übung habe ich Folien erstellt, welche ich bei den Übungen verwende. Sie sind hier
https://wwwcip.cs.fau.de/~yq53ykyr/AlgoKS/index.html
verfügbar, und können unter anderem zur Vorbereitung genutzt werden.

Neben den Folien finden sich auch noch Beispielprogramme, welche ich in der Übung vorstelle, sowie manchmal Zusatzaufgaben zu gewissen Themen, allerdings ohne Lösungen.

1 „Gefällt mir“

Hi,

vielen Dank für die Folien und die Beispielprogramme. Dem Beispiel aus der Vorlesung, warum man keine Inverse benutzen konnte ich folgen. Jedoch erschien mir es auf deinen Übungsfolien so, als ob der Fehler sehr sehr sehr gross war, falls man eine Inverse benutzt.

Ich habe mir dann selber ein Skript geschrieben und kam nie auf Fehler in der Grössenordnung wie du. Ich habe daher dein Beispielprogramm mal ausprobiert und da kamst du auch auf einen sehr grossen Fehler:

[[1.       1.000001 0.999999]
 [0.999999 1.       1.000001]
 [1.000001 0.999999 1.      ]]
Condition:  1732050.80768445
Starting with inv(A) * b = y
	 Time gone by:  0.00015997886657714844
	 Error in b:  9.225965733917972
Starting with la.solve(A, b)
	 Time gone by:  3.409385681152344e-05
	 Error in b:  3.954519652050746e-07
Starting with LU-Factor
	 Time gone by:  0.00018906593322753906
	 Error in b:  3.954519652050746e-07

Mir kam das ganze bisschen komisch vor. Hier hat sich der Fehler bei dir eingeschlichen:

Example_1:

    y = np.linalg.inv(A) * (b)

müsste ja eher:

    y = np.dot(np.linalg.inv(A), (b))

sein. Dann kommt man auch auf sinnvollere Werte:

Example 1 - ill-conditioned matrix (eps = 1e-7)
[[1.       1.000001 0.999999]
 [0.999999 1.       1.000001]
 [1.000001 0.999999 1.      ]]
Condition:  1732050.80768445
Starting with inv(A) * b = y
	 Time gone by:  0.0001900196075439453
	 Error in b:  2.5662915372622253e-07
Starting with la.solve(A, b)
	 Time gone by:  3.981590270996094e-05
	 Error in b:  2.565386258534276e-07
Starting with LU-Factor
	 Time gone by:  0.00019407272338867188
	 Error in b:  2.565386258534276e-07

Trozdem ist natürlich die Inverse kacke aus den genannten Gründen aus der Vorlesung.

Mir ist noch aufgefallen:

def illconditionedMat(delta):
    return np.array([[1, 1 + delta, 1 - delta], [1 - delta, 1, 1 + delta], [1 + delta, 1 - delta, 1]], np.float)

Ich denke du wolltest eine lower precision erzwingen damit man den Fehler besser sieht. np.float ist allerdings bei mit np.float64, dann ist der Fehler natürlich sehr gering.
Das hier geht bei mir besser:

def illconditionedMat(delta):
    return np.array([[1,1 + delta,1-delta],[1-delta,1,1+delta],[1+delta,1-delta,1]], dtype='f')

damit kommt man dann auch auf einen ordentlichen Fehler:

Example 1 - ill-conditioned matrix (eps = 1e-7)
[[1.       1.000001 0.999999]
 [0.999999 1.       1.000001]
 [1.000001 0.999999 1.      ]]
Condition:  1760881.5
Starting with inv(A) * b = y
	 Time gone by:  0.0001430511474609375
	 Error in b:  0.28796243328180987
Starting with la.solve(A, b)
	 Time gone by:  3.0994415283203125e-05
	 Error in b:  2.9703820481072214e-07
Starting with LU-Factor
	 Time gone by:  0.00021123886108398438
	 Error in b:  2.9675579786923153e-07

Jup,

da hast du selbstverständlich recht. Das ist mir beim Schreiben nicht wirklich aufgefallen, aber klar. np.dot und * (= np.multiply) sind nur für Skalare äquivalent.
Diese Kleinigkeiten wurden jetzt aber ausgebessert, sprich das Skript sollte wieder richtig funktionieren.

1 „Gefällt mir“

Kannst du die neusten Folien noch hochladen? Sie helfen wirklich sehr bei den Hausaufgaben.