MATLAB Algorithmus < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 15:11 Di 05.12.2006 | Autor: | Fidel |
Aufgabe | Beschreiben Sie folgenden Algorithmus, insbesondere die Bedeutung der Variablen [mm] u_k [/mm] und [mm] err_k.
[/mm]
[mm] err_0 [/mm] = 0; [mm] S_0 [/mm] = 0;
Für k =1 bis n:
[mm] u_k [/mm] = [mm] err_k_-_1 [/mm] + [mm] a_k;
[/mm]
[mm] S_k [/mm] = [mm] S_k_-_1 [/mm] + [mm] u_k;
[/mm]
[mm] err_k [/mm] = [mm] u_k [/mm] - [mm] (S_k [/mm] - [mm] S_k_-_1);
[/mm]
end |
Also es geht um die Berechnung von Summenfolgen mit dem Computer. Die Iterationsschleife ist klar. Aber was wird da gerechnet? [mm] (S_k [/mm] - [mm] S_k_-_1) [/mm] dort werden ja für grosse k zwei zunehmend gleichgrosse Zahlen subtrahiert -> Zunehmende Auslöschung. Soll damit irgendwie der Rundungsfehler kompensiert werden? Bei der Summierung von links nach rechts werden ja zu einer immer grösser werdenden Zahl zunehmend kleiner werdende addiert. -> Zunehmender Rundungsfehler.
Wer weiss mehr?
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt
|
|
|
|
Hallo,
ich weiß nicht, was das mit Matlab zu tun hat. Aber mal davon abgesehen können wir uns das mal genauer ansehen und uns wundern. Hat das Ganze eine Anwendung oder ist es eine ganz theoretische Übung?
Nun, formen wir etwas um. Für $k>0$ gilt:
[mm]err_k = u_k - \left(S_k - S_{k-1}\right) = u_k - \left(\left(S_{k-1}+u_k\right)-S_{k-1}\right)=u_k-u_k = 0[/mm]
Also: [mm] $err_k [/mm] = 0 [mm] \quad \forall k\in\IN$.
[/mm]
Damit gilt für alle $k>0$:
[mm]u_k = err_{k-1} + a_k = 0 + a_k = a_k[/mm]
Also: [mm] $u_k [/mm] = [mm] a_k \quad \forall k\in\IN^{>0}$.
[/mm]
Damit kommen wir auf:
[mm]S_k = S_{k-1} + u_k = S_{k-1} + a_k[/mm]
Mit [mm] $S_0$ [/mm] als Rekursionbasis kommen wir auf die simple Summe:
[mm]S_n = \sum_{k=1}^{n}a_k \quad \forall n\in\IN^{>0}[/mm]
Wenn du dich also nicht vertippt hast, dann sind die beiden Variablen nicht mehr als Dummies. OK, in Matlab nimmt [mm] $err_k$ [/mm] in manchen Schritten einen Wert in der Größenordnung von [mm] $\pm 10^{-16}$ [/mm] an. Geht es um diese numerischen Fehler?
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:19 Di 05.12.2006 | Autor: | Fidel |
Hallo Martin
Jetzt wo Du's sagst, der Algorithmus ist nicht unbedingt auf Matlab beschränkt. Wir benutzen halt dieses Programm in der Nummerik.
Bei uns geht's momentan schon um die Rundungsfehler und Stellendefekte.
Also Summenfolgen von links und von rechts aufsummieren und gucken was rauskommt. Der Witz an der Geschichte sollte halt sein, dass dieser Algorithmus irgendwie genauere Werte berechnet wenn Summenglieder aufsummiert werden. Es geht also um die kleinen Werte, die Du angesprochen hast.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:48 Di 05.12.2006 | Autor: | Martin243 |
Ach so! Da kenne ich mich nicht so gut aus. Es mag ja sein, dass der Rundungsfehler zunimmt, aber nicht so stark wie bei der einfachen Summation.
Mit [mm] $err_k$ [/mm] berechnet man ja den bei der letzten Addition aufgetretenen Fehler und erzeugt mit [mm] $u_k [/mm] = [mm] a_k [/mm] + [mm] err_{k-1}$ [/mm] einen "fehlerkompensierten" Summanden für die nächste Addition. Man muss nämlich auf das Vorzeichen achten: Ist [mm] $S_k$ [/mm] nämlich durch einen Rundungsfehler zu groß geraten, dann wird [mm] $err_k$ [/mm] negativ und der nächste Summand wird vermindert. Umgekehrt sieht es aus, wenn [mm] $S_k$ [/mm] nach unten gerundet wurde. [mm] $err_k$ [/mm] ist dann positiv und [mm] $u_{k+1}$ [/mm] ist dann größer als [mm] $a_{k+1}$.
[/mm]
Mehr kann ich als Laie dazu nicht sagen...
Gruß
Martin
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:57 Di 05.12.2006 | Autor: | Fidel |
Hallo Martin
Das klingt schon nach etwas. Ich überleg's mir nochmal selber.
Besten Dank für die Mühe!
|
|
|
|