PDA

View Full Version : [Frage] Projekt I/6-Fehlerquellen


PreDaTa
22-11-2005, 18:16
hallo,

ich muss das polynom: p(x):= x²-4x+3
in gleitpunktarithmetik auswerten, wobei x~1.0 exact als maschinen x Element von F gegeben ist.
folgenedes MatLab scripts, realisieren diese funktion auf 2 arten:

x=... % x ist maschinenzahl nahe an 1.0
result1= (3.0-4.0*x)+x*x
result2=3.0+x*(x-4.0)

für result1 soll ich eine schranke für den realtiven fehler(im vergleich zum exacten resultat) durch rundungsfehler herleiten.

wie realisiere ich in matlab eine schranke für den relativen fehler?

mfG

Spite82
22-11-2005, 19:52
Hallo, habe auch Probleme mit dem Bsp.
Ich meine, was wollen sie GENAU???

Auch, was ist gemeint mit x~1 ? Wie weit weg soll x von 1 sein usw????
OMG

MfG
Spite

creature
23-11-2005, 18:54
Wir hocken auch schon Stundenlang an dem Beispiel. Auf Seite 47 unten steht ja:Relative Fehlerabschätzungen wie in Lemma 1.3 gelten auch nicht für das Ergebnis mehrerer hintereinander ausgeführter Rechenoperationenen. Lemma 1.3 ermöglicht es uns jedoch, den insgesamt bei einem numerischen Algorithmus begangenen Rechenfehler zu analysieren / abzuschätzen.Wie wende ich dieses Lemma jetzt aber bei Hintereinanderausführung an?

Spite82
24-11-2005, 11:23
Naja - hinzu kommt ja noch, dass man bedenken muss, dass die x~1 GENAU ALS MASCHINENZAHL vorhanden sind, und nicht als ungenaue Zahl.

Das Bedeutet für mich:
Wenn zB eine wie bei uns: 3-4xeinmal gerechnet wird, so gibt es keinen Rechenfehler, weil x ja genau darstellbar ist (zB 5 Nachkommastellen: x = 1.00001)
Dann kann der Computer auch GENAU 3-4x berechnen, nämlich: -1.00004
Wenn x jedoch nicht genau als Maschinenzahl darstellbar ist kann man die 1+eps Methode anwenden denke ich (dann ergibt sich auch ein relativer Fehler, der immer größer wird, je weniger Stellen ich berechne........
Bei result1 (wie oben angefangen) habe ich ja im Endeffekt nur einen Rundungsfehler bei x*x, weil wenn ich alle Stellen bis zur letzten Nachkommastelle verwende ergibt eine Multiplikation eine Zahl mit doppelt so vielen Nachkommastellen (also ergibt sich ein maximaler absoluter Fehler von eps, meiner Meinung nach).

Das heißt für den relativen Fehler:
((3-4x)+x²+eps) - ((3-4x)+x²)
__________________________
(3-4x)+x²

ergibt dann:
eps
__________
(3-4x)+x²

ist gleich:
eps
______
a²-4a
(mit x = 1+a).......

Ok, dann folgt bei mir ein maximaler Fehler von ~12.5% (unabhängig von der Anzahl der Nachkommastellen, weil ja x € F)

Alles schön und gut, nur:
für 6.2 bekomme ich einen maximalen rel. Fehler raus, welcher doppelt so hoch ist...... was stimmt da nicht????

UND WIE KANN MAN DEN FEHLER MINIMIEREN ->6.3?????????
(ich denke für den relative Fehler von eps/....... kommt man bei der Rechnung nicht herum, also versuchen den Nenner möglichst groß machen, aber wie????)
Fragen über Fragen.............

MfG
Spite

Septic.exe
24-11-2005, 11:32
Bin in der selben Gruppe wie creature. Du kannst nicht davon ausgehen, dass der Ausdruck 3 - 4*x wieder exakt als Maschinenzahl darstellbar ist imho. Kann sein, ist aber eher unwahrscheinlich. Bau Dir ein System auf mit einer relativen Maschinengenauigkeit von zB 0.00256, dann wirst Du sehen, dass das nicht unbedingt der Fall sein muss.

Wir haben insgesamt als Gruppe bisher überhaupt nur 3 Beispiele. Die Frage ist, ob wir das überhaupt abgeben sollen :confused:.

Spite82
24-11-2005, 11:39
Wenn ich habe x=1+a (a ist die Diff von x und 1), dann
habe mich verrechnet, weil (1+a)² ja 1 + 2a + a² ist.......

Dann habe ich bei 6.1 einen Fehler von eps/(a²-2a)
und bei 6.2 die hälfte (ca) eps/(-a²-4a)

Sorry

Spite82
24-11-2005, 11:43
Aber wieso denn nicht?
Vielleicht check ichs nur nicht:
aber wenn x eine Maschinenzahl ist, dann ist ja doch auch x-1 zB eine Maschinenzahl oder nicht????
(die Anzahl der Nachkommastellen verändert sich ja nicht, soweit ich weiß)
Und bei einer Multiplikation mit einer Ganzen Zahl passiert das ja auch nicht, oder???

Sonst wäre das ja kein Unterschied zu "nichtMaschinenzahlen", wenn man bei jeder Addition einen Fehler einrechnen würde, welcher meines Erachtens gar nicht da ist........

Also bitte schreib noch mal genau wie du das meinst wenns geht bitte ;)

Spite

creature
24-11-2005, 11:47
Nur Rechnet Matlab nicht mit dem Dezimalsystem sondern mit dem Dualsystem. Daher kann es sein, dass die Zahl 0.3 + 1 != 1.3 ist sondern zb. 1.299999999999999... obwohl sich die nachkommastellenanzahl im dezimalsystem nicht ändert.

Spite82
24-11-2005, 11:52
Versuchs mal mit Maple, da kann man die Dezimalstellen der Berechnung einstellen......

Glaube, das dies also nur programmspizifisch Bedeutung hat, oder?
Nun ja, ich glaub jedenfalls, das ich an meiner Lösung festhalten werde, außer ihr überzeugt mich vom Gegenteil......

Achja, wenn ihr den Gesamtrechenfehler (relativ) berechnen wollt, hab hier einen guten Link gefunden:
http://stinfwww.informatik.uni-leipzig.de/~mai03bub/numinf.pdf
Seiten 10mitte - 13mitte, vielleicht hilft euch das weiter......

MfG
Spite

Septic.exe
24-11-2005, 11:59
Du hast jetzt ein System mit einer Maschinengenauigkeit von 0.0256. Angenommen 1 ist eine Maschinenzahl in diesem System. Dann ist 1.384 auch eine Maschinenzahl (1+ 15*0.0256). Wenn Du jetzt 4 - 1.348 rechnest, wirst Du merken, dass das Ergebnis 2.652 nicht in diesem System enthalten ist (Maschinenzahlen in diesem System: ..., 2.6384, 2.664, ...) => auch Addition mit einem Skalar erzeugt Rundungsfehler. Gecheckt?

Spite82
24-11-2005, 12:06
Ok, das klingt gar nicht mal so unverständlich und unlogisch.............
Dammit

Spite82
24-11-2005, 12:13
Ok, wie sieht das dann bei einer Addition aus:

x (Maschinenzahl) + 3
dann ist doch der maximale Fehler wieder eps oder?
sprich: x+3+eps zB

Oder ich bin jetzt a bissi confused muss ich zugeben......

(siehe meinen Link Seite 11 ganz unten - 1Zahl ist ja genau)......

Spite82
24-11-2005, 12:29
Sodala, ich hoffe ich habe jetzt mal was sinnvolles zusammengebracht:

Ich habe mal bei result1 so angefangen:

zuerst rechne ich 4*x und zwar bekomme ich dann für den absoluten Fehler:

(~a~b)-(ab) = ((4+eps)*x)-4x = 4x + eps*x -4x = eps*x

Ok, ich hoffe das stimmt mal bis hier!!!
Danach kann ich doch einfach mit der subtraktion weitermachen, oder?
3-4x:
(~a-~b)-(a-b) = ((3+eps) - (4x+eps*x))-(3-4x) = eps - eps*x???? für den Gesamtenrechenfehler bis hierher, falsch - richtig???

Was sagt ihr dazu??

Septic.exe
24-11-2005, 12:30
Ja, so haben wir uns das auch gedacht.

Spite82
24-11-2005, 12:33
Juhuuuuuu!!! ;)
Also dann noch x*x:

ist mit fehler auch (x*x)+eps, oder?

und zum Schluss noch die Addition:
(~a+~b)-(a+b) = ((3-4x+eps+eps*x)+x²+eps) - ((3-4x)+x²) = 2eps + eps*x???

Und damit den relativen Rechenfehler ausrechnen is nicht mehr schwer, oder ;)

Das wäre schon schön wenn das jetzt stimmen würde ;)

Septic.exe
24-11-2005, 12:35
Das "So haben wir uns das auch gedacht" bezog sich auf deinen vorletzten Post.

Was meinst Du mit (~a~b)?

Unsere Posts haben sich überschnitten. Sorry for that.

Spite82
24-11-2005, 12:35
Oh - oben hab ich mich verrechnet:

(~a-~b)-(a-b) = ((3+eps) - (4x+eps*x))-(3-4x) = eps - eps*x

Also Gesamtrechenfehler von x*eps??? ~ eps??

Spite82
24-11-2005, 12:37
Ich meine damit (~a~b) soll heißen: ungefähr a * ungefähr b (also jeweils MIT Rechenfehler).....

Schau dir mal bitte den Link an von oben (Seiten 10-13), da stehts......

Spite82
24-11-2005, 12:58
Noch eine Frage:

Soll ich die Komponenten mit eps immer addieren, oder soll man die "Abschwächung der Rundungsfehler" berücksichtigen, ich meine:

4+3 mit fehler ist dann 4+3+2eps
und: 4-3 mit fehler wäre: 4-3 (+eps-eps)......
Das würde aber nicht unbedingt stimmen, oder, es wäre ja möglich, dass man die Fehler immer aufrechnen muss, oder???

Spite82
24-11-2005, 13:10
Mit dieser Mehtode käme ich dann auf einen relativen Fehler von:

3*eps + a*eps
_____________
a²-2*a

(wobei a wieder abs. Diff. von 1 und x ist)

Ich werde das jetzt so lassen, sonst werde cih nie fertig.....

MfG
Spite