Was bewirkt hier (n-1)? < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:05 Sa 05.11.2011 | Autor: | bandchef |
Aufgabe | Ermitteln sie durch Rekursion die Zahlen [mm] $z_n, [/mm] n=2, 3, ... ,N und zeichnen Sie diese als rote Kringel. Rekursionsformel: [mm] $z_{n+1} [/mm] = e - n [mm] \cdot z_n$ [/mm] |
Hi Leute!
Ich hab hier heute diese Matlab-Code geschrieben:
%Teilaufgabe d) -> Integration mit der Vorwärtsrekursionsformel
N = 19; %Ende des Definitionsbereichs von z(x)=fint(t,x)
n = 2; %Beginn der Laufvariable
z = exp(1)-1; %Berechnung des Anfangswertes
Z(1) = z; %Anfangswert wird an die 1. Stelle des Ausgevektors geschrieben
it = 2; %Da erster Wert im Vektor schon belegt ist, wird Iterator "it" auf Position 2 gesetzt
for n = 2:1:N %Laut Aufgabe beginnt n ab 2 zu laufen
z = exp(1)-(n-1)*z; %Berechnung der eigentlichen Rekursionsformel
Z(it) = z; %jeweils neuen Rekursionswert in den Ausgabevektor schreiben
it = it + 1; %Erhöhung des Iterators um eins
end
%hold on;
plot(Z, 'ro');
Wenn ihr euch nun die Zeile mit der Berechnung der eigentlichen Rekursionsformel anseht, dann sieht man, dass da folgender Ausdruck mit drin steht: (n-1).
Mir ist die Bedeutung dessen nicht klar. Das war auch der Fehler warum mein Code bisher immer das falsche gezeichnet hat. Ich bin dann nur durch ausprobieren in Verbindung mit der Lösung draufgekommen. Könnt ihr mir vielleicht erklären, was diese Ausdruck macht? Ich war, bevor ich in die Lösung geguckt hab, der Meinung, dass die Zeile so lauten muss: z = exp(1)-1*z;
Könnt ihr mir meine Frage beantworten: Was macht bzw. was IST der Unterschied zwischen der Zeile "z = exp(1)-1*z;" und "z = exp(1)-(n-1)*z;"?
Danke!
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:19 Sa 05.11.2011 | Autor: | leduart |
Hallo
es ist doch [mm] z_n [/mm] definiert als [mm] z_n=e-(n-1)z_{n-1} [/mm] wie kommst du auf e-1*z?
fu hast den anfang der Iteration nicht angegeben war das [mm] z_1=1 [/mm] oder [mm] z_2=1?
[/mm]
warum benutzt du it, das ist doch n?
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:01 Sa 05.11.2011 | Autor: | bandchef |
Zitat: "es ist doch $ [mm] z_n [/mm] $ definiert als $ [mm] z_n=e-(n-1)z_{n-1} [/mm] $ wie kommst du auf e-1*z?"
Ich hab im ersten Moment wie ich losgelegt habe nicht kapiert, dass in der Aufgabenstellung mit [mm] $z_n$ [/mm] der Beginn der Rekursion gemeint war. Ich hab ehrlich gesagt überhaupt nicht weiter über die Bedeutung des [mm] $z_n$ [/mm] nachgedacht
Wenn die Rekursion laut Aufgabenstellung bie [mm] $z_n$ [/mm] beginnen soll und nicht wie ich fälschlicherweise geschrieben hab, bei [mm] $z_{n+1}$ [/mm] dann ist natürlich klar, dass ich vom n eine 1 abziehen muss und dann bei der Rekursionsformel [mm] $z_n=e-(n-1)$ [/mm] lande. Das ist nun klar.
Zitat: "warum benutzt du it, das ist doch n?"
Tja, das ist eine gute Frage. "it" is in der Tat überflüssig. Hab ich nun überall durch "n" ersetzt.
Zitat: "fu hast den anfang der Iteration nicht angegeben war das $ [mm] z_1=1 [/mm] $ oder $ [mm] z_2=1? [/mm] $"
Ehrlich gesagt verstehe ich hier nicht was du meinst. Den Anfangswert der Rekursion schreibe ich vor der for-Schleife mit diesen zwei Code-Zeilen in den Vektor "Z": "z = exp(1)-1; und Z(1) = z;". In der Aufgabenstellung steht auch nocht, dass man die Zahle n=2,3, ... ,N plotten soll. Den Anfang der Iteration bildet somit doch n=2, oder?
Danke für deine Hilfe!
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:28 Sa 05.11.2011 | Autor: | bandchef |
Aufgabe | Ich hab hier nochmal eine Aufgabe:
Setzen sie nun [mm] $z_{n+1} [/mm] = 0$ und berechnen sie durch Rückwärtsrekursion die Zahlen [mm] $z_n, [/mm] n = N, N-1, ..., 2, 1$.
Die Formel der Rückwärtsrekursion lautet: [mm] $z_n =\frac{e - z_{n+1}}{n}$ [/mm] |
Wenn ich zu dieser Aufgabe nun die Code schreiben möchte, weiß ich am Anfang leider schon wieder nicht mehr richtig weiter. Es heißt man muss [mm] $z_{n+1} [/mm] = 0$ setzen. Wie soll ich das notieren?
Ich hab's dennoch mal probiert. Matlab sagt mir dann aber, dass ein Fehler in der Zeile mit dem plot-Befehl sein soll. Weiß aber nicht was an diesem Befehl falsch sein soll.
Hier mal der neue Code:
N = 19;
n = N;
q = (exp(1)-0)/19; %In der Aufgabe steht ja, man soll [mm] $z_{n+1} [/mm] = 0$ setzen. n = 19 weil ich ja von hinten her nach vorne gehe, oder?
it = 1;
for n = N:1:1 %Der Schleifenzähler soll bei 19 beginnen und bis 1 zurückzählen mit einer Schrittweite von 1
q = (exp(1)-q)/n;
Q(it) = q;
it = it + 1;
end
plot(Q, 'ro');
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:47 Sa 05.11.2011 | Autor: | leduart |
Hallo
> Setzen sie nun [mm]z_{n+1} = 0[/mm] und berechnen sie durch
> Rückwärtsrekursion die Zahlen [mm]z_n, n = N, N-1, ..., 2, 1[/mm].
>
> Die Formel der Rückwärtsrekursion lautet: [mm]z_n =\frac{e - z_{n+1}}{n}[/mm]
richtig
>
> Wenn ich zu dieser Aufgabe nun die Code schreiben möchte,
> weiß ich am Anfang leider schon wieder nicht mehr richtig
> weiter. Es heißt man muss [mm]z_{n+1} = 0[/mm] setzen. Wie soll ich
> das notieren?
>
> Ich hab's dennoch mal probiert. Matlab sagt mir dann aber,
> dass ein Fehler in der Zeile mit dem plot-Befehl sein soll.
> Weiß aber nicht was an diesem Befehl falsch sein soll.
>
> Hier mal der neue Code:
>
> N = 19;
> n = N;
warum das n?
> q = (exp(1)-0)/19; %In der Aufgabe steht ja, man soll
> [mm]z_{n+1} = 0[/mm] setzen. n = 19 weil ich ja von hinten her nach
> vorne gehe, oder?
> it = 1;
> for n = N:1:1 %Der Schleifenzähler soll bei 19 beginnen
du siehst hier machst du dein n von oben kaput!
aber du willst rüchwärtszählen! also for n=19:-1:1
> und bis 1 zurückzählen mit einer Schrittweite von 1
> q = (exp(1)-q)/n;
> Q(it) = q;
nur wenn du jetzt was im alten Programm Q(19)hiess Q(1)nennen willst
sonst it=19 zur Initialisierung und dann it=it-1
Mein Rat insgesamt, prüf dein Programm im commandwindow, indem du erst mal die ; wegläßt, dann wird jedes ergebnis direkt ausgedruckt. natürlich ließ ich dann die schleife nicht von 19 bis 1 sondern erstmal bis 16 laufen.
Mansollte als anfänger immer teilresultate kontrollieren, das ist ja das schöne an matlab, dass das geht und du lernst viel schneller.
(oder du setzt dir ein paar print befehle in dein programm, die du später wegwirfst oder auskommentierst.)
Gruss leduart
> it = it + 1;
> end
>
> plot(Q, 'ro');
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 14:47 So 06.11.2011 | Autor: | bandchef |
Aufgabe | Nochmal eine neue Aufgabe:
Addieren Sie die maximalen Bitstellenverluste p bei beiden Rekursionen Schritt für Schritt auf und geben sie die Zahlen aus. |
Die Bitstellenverluste berechnen sich ja so:
$p = [mm] log_2 \( \abs(\frac{x+y}{x-y}) \)$
[/mm]
Wie ich das nun verstehe, muss ich meine Formel etwas umschreiben weil die Rekursionen die ich gemacht habe, haben als Variable nicht x bzw. y sondern Z und Q. Ich hab dann mal ein bisschen los programmiert und hab (leider) feststellen müssen, dass ich für beide Rekursionen den gleichen Wert bekommen habe...
Hier der Code:
N = 19;
pz = 0;
pq = 0;
for n = 1:1:N
pz = pz + log2(abs((Z(n)+Q(n))/(Z(n)-Q(n))));
pq = pq + log2(abs((Q(n)+Z(n))/(Q(n)-Z(n))));
end
disp(pz);
disp(pq);
Ich hab die neue Aufgabe so verstanden, aber mir leuchtet auch ein, dass es keine gleichen Werte geben kann, da bei der Rückwärtsrekursion die Werte genauer berechnet werden können...
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:48 So 06.11.2011 | Autor: | leduart |
Hallo
woher bezieht deine Schleife Q(n) und Z(n)
abgesehen davon sind pz und pq exakt gleich definiert,nur dass du Z und Q in umgekehrter Reihenfolge hingeschrieben hast. wieso soll dann was verschiedenes rauskommen?
Nett wäre übrigens irgendeine Erwähnung, ob die vorigen antworten geholfen haben! Die Motivation bei mir, zu helfen steigt nicht gerade mit dem einzigen Kommentar: noch ne Aufgabe.
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 17:42 So 06.11.2011 | Autor: | bandchef |
Entschuldige bitte, dass ich dir keine Erwähnung über deine bisherige Hilfe gegeben habe. Die zwei Aufgaben bisher, hab ich nun soweit sehr gut dank deiner Hilfe verstanden und stimmen auch Werte mäßig mit meiner Lösung überein ! Auch der Tip mit den Semikolon weglassen war sehr hilfreich! Also schon mal ein großes Danke an dich!
Nun zur neuen Aufgabe:
Zitat: "woher bezieht deine Schleife Q(n) und Z(n) "
Ich habe mir gedacht, dass Matlab so intelligent ist, dass es versteht, dass es die Vektoren aus den vorhergehenden Teilaufgaben kennt, die in dem gleiche m-sheet drin stehen! Wenn ich mir diese Vektoren mit disp() ausgeben lasse, dann kommen da auch diese Werte mit denen ich laut Aufgabe rechnen soll.
Zitat: "abgesehen davon sind pz und pq exakt gleich definiert,nur dass du Z und Q in umgekehrter Reihenfolge hingeschrieben hast. wieso soll dann was verschiedenes rauskommen? "
Mir ist die in der Fragestellung schon erwähnte Formel $ p = [mm] log_2 \left( \left|\frac{x+y}{x-y}\right| \right) [/mm] $ gegeben gewesen. Ich hab in dieser Formel x und y als meine beiden Ergebnis-Vektoren der vorangegangenen Teilaufgaben interpretiert. Wenn ich nun den Bitstellenverlust von bspw. Z berechnen will, habe ich mir gedacht, dass ich dann quasi Z für das x (weils an erster Stelle in der Formel kommt) und Q für y einsetzen muss und die einzelnen Ergebnisse über eine for-Schleife aufaddieren muss. Hingegen wenn ich den Bitstellenverlust von Q berechnen lassen will muss ich die beiden Variablen in umgekehrter Reihenfolge hinschreiben.
Denn es macht doch bei einer Minus-Rechnung wirklich unterschied wenn ich z.B. habe Z>Q und rechne dann einmal Q-Z und das andere Mal Z-Q...; da kommt doch dann wirklich was anderes raus. Insbesondere wenn man die Werte der Ergebnis-Vektoren aus den vorangegangen Aufgaben vergleicht. Wenn ich mir nun die beiden Vektoren der beiden ersten Aufgaben ausgeben lasse, kann man feststellen, dass sich die Werte ab dem 15. Wert unterscheiden und ab diesem Zeipunkt kein gleiches Ergebnis rauskommen sollte...
Edit: Ich sehe grad, dass mein latex-Code hier im Forum meinen Betrag nicht übernommen hat. Nun ist mir auch klar warum doch das gleich rauskommt; der Betrag macht ja das Minus weg...
So 100%ig bescheid weiß ich aber dennoch nicht. Vielleicht hilfst du mir ja noch weiter?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 18:27 So 06.11.2011 | Autor: | leduart |
Hallo
Hab ich richtig verstanden, dass deine iene Rekursion in Q, die andere in Z steht, die erste lief von 1 bis 19 die andere von 19 bis 1
also willst du doch x=Q(n) y=Q(n+1) für die erste Iteration entsprechend für die 2 te, Oder hab ich was mißverstanden.
die Differenz oder summe von 2 größen aus verschiedenen rechnungen macht doch nicht viel sinn.
also überleg das ganze mal nur für deine erste Iteration!
Deine rückmeldung war nett, das mit ; weglassen und Zwischenschritte überpüfen sollte man euch eigentlich beim Programmierkurs beibringen, das ist ja das schöne an ner Interpretesprache, man muss nicht erst kompilieren und viele Printbefehle einsetzen.(wie etwa in C)
Gruss leduart
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:20 Mo 07.11.2011 | Autor: | bandchef |
Die erste Rekursion, hier auch Vorwärtsrekursion genannt, ging von 1 bis 19 und die Werte stehen im Vektor Z.
Die zweite Rekursion, hier auch Rückwärtsrekursion genannt,
ging von 19 bis 1 und die Werte stehen im Vektro Q.
Zitat: "also willst du doch x=Q(n) y=Q(n+1) für die erste Iteration entsprechend für die 2 te, Oder hab ich was mißverstanden."
Genau. Jetzt wo du schreibst, dass sich x und y (die Variablen in der Formel) aus dem ersten Wert des Vektors und dem zweiten Wert des Vektors zusammensetzt wird es mir klarer. Hier mal mein neuer Code:
N = 19;
pz = 0;
pq = 0;
for n = 1:1:(N-1)
pz = pz + log2(abs( (Z(n)+Z(n+1))/(Z(n)-Z(n+1)) ));
pq = pq + log2(abs( (Q(n)+Q(n+1))/(Q(n)-Q(n+1)) ));
end
disp(pz);
disp(pq);
Die berechneten Zahlen sind übrigens: pz = 68.103779115983542 und pq = 75.256124582494380.
Nun bekomme ich auch zwei unterschiedliche Werte. Was mir aber noch nicht klar ist, wieso man den log2 einsetzen muss. In der Vorlesung dazu wurde gesagt, dass man mit dem 2er-Logarithmus die Bitstellenverluste von Zahlen im Gleitpunktformat, also quasi Zahlen die nur aus 0 und 1 bestehen berechnen kann. Ich rechne hier aber mit dem Standardzahlen-Format von Matlab welches ja "long" ist. Die Zahlen werden mir ja, wenn ich z.B. den Vektor Z ausgeben lasse auch im Dezimalformat ausgegeben. Müsste die Formel dann nicht eher mit dem log10 zu berechnen sein, oder muss ich die Zahlen die in den Vektoren stehen erst in das Binärformat umwandeln, was eigentlich eher zur Vorlesung passen sollte...
Noch eine Frage: Ich möchte nun die einzelnen Werte für pz und pq, bevor sie dann aufaddiert werden noch in einer Tabelle ausgeben lassen. In der Art:
n Q Z
1 W W
2 W W
3 W W
.
.
.
18 W W
Ich hab dazu einen Befehl gefunden nämlich "uitable". Nach genauerem Hinsehen ist mir aber aufgefallen, dass dieser Befehl das nicht so macht wie ich mir das vorstelle. Weißt du da genaueres?
Zitat: "die Differenz oder summe von 2 größen aus verschiedenen rechnungen macht doch nicht viel sinn."
Das hab ich mittlerweile auch gecheckt... Ich brauch manchmal etwas länger
Zitat: "Deine rückmeldung war nett, das mit ; weglassen und Zwischenschritte überpüfen sollte man euch eigentlich beim Programmierkurs beibringen, das ist ja das schöne an ner Interpretesprache, man muss nicht erst kompilieren und viele Printbefehle einsetzen.(wie etwa in C)"
Ich "kann" (sofern man das überhaupt 100%ig KÖNNEN kann...) C und ich bin das quasi gewöhnt; einen Matlab Kurs haben wir nicht bekommen wir wurden quasi ins kalte Wasser geworfen; naja kennt man ja.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:00 Mo 07.11.2011 | Autor: | leduart |
Hallo
fir werte die pz, pq nacheinander annimmt
schreibst du in W
W=[]
nach dem errechnen von pz,qz
schreibst du W=[W;[pz,pq];
dann werden sie untereinander ausgegeben, oder
W=[W,[pz;pq]; dann horizontal.
dass soviele bits verlorengehen wundert mich., aber die differenz von 2 iterationen ist wohl klein?
Wie dein matlab der irgendein programm mZahlen darstelt ist doch egal, innerlich kann der Addierer im Grunde ja nur 0 und 1 verwalten, also mit 64 bit dualzahlen rechen, das programm kann dann natürlich ne routine haben um daraus auch operationen mit "längeren" integers zu machen, aber bits gehen dabei immer verloren, bzw werden ungültig .
Die Formel für den Bitverlust seh ich im Augenblick nicht, wenn x=y ist, also etwa y=x+0 dann hast du ja angeblich [mm] log(2x/0)=\infty?
[/mm]
Für welche Operationen soll die Formel denn gelten?
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 15:43 Di 08.11.2011 | Autor: | bandchef |
Hi!
Danke für deine Antwort.
Zitat: "dass soviele bits verlorengehen wundert mich., aber die differenz von 2 iterationen ist wohl klein?"
Hm, das hat mich auch gewundert, aber wenn ich mir den Z bzw. den Q Vektor (die Ergebnis-Vektoren der vorhergehenden Rekursionen!) anschau, dann fällt auf, dass erst ab dem 15. Eintrag in den Ergenibs-Vektoren in der Dezimaldarstellung unterschiede beginnen...
Zitat: "Wie dein matlab der irgendein programm mZahlen darstelt ist doch egal, innerlich kann der Addierer im Grunde ja nur 0 und 1 verwalten, also mit 64 bit dualzahlen rechen, das programm kann dann natürlich ne routine haben um daraus auch operationen mit "längeren" integers zu machen, aber bits gehen dabei immer verloren, bzw werden ungültig .
Die Formel für den Bitverlust seh ich im Augenblick nicht, wenn x=y ist, also etwa y=x+0 dann hast du ja angeblich $ [mm] log(2x/0)=\infty? [/mm] $"
Danke für die Erklärung; hab mir gestern nach meinem letzten Eintrag auch noch Gedanken dazu gemacht und dabei auf den gleichen Schluss gekommen wie du
Zitat: "Für welche Operationen soll die Formel denn gelten?"
Das weiß ich leider selbst nicht so genau. Bei dieser Teilaufgabe steht da nix dabei für welche Formel das gelten soll!
Jetzt nochmal kurz zur tabellarischen Ausgabe. Ich hab das nun so gemacht:
N = 19;
pz = 0;
pq = 0;
it = 1;
W =[];
for n = 1:1:(N-1)
pz_ergebnis = log2(abs( (Z(n)+Z(n+1))/(Z(n)-Z(n+1)) ));
pq_ergebnis = log2(abs( (Q(n)+Q(n+1))/(Q(n)-Q(n+1)) ));
it = it + 1;
W = [W; [pz_ergebnis, pq_ergebnis]];
pz = pz + pz_ergebnis;
pq = pq + pq_ergebnis;
end
disp(W);
Da gibt mir Matlab nun die Ergebnisse von pz und pq tabellarisch aus. Ich möchte nun aber auch noch an erster Stelle einen Zähler mitlaufen haben. Den hab ich mit it berechnet bzw. wäre in mit n eh schon gegeben... Wie bring ich den noch zusätzlich mit rein? Der Ausdruck: W=[W; [it, pz_ergebnis, pq_ergebnis]]; tut's leider nicht :-(
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 23:07 Di 08.11.2011 | Autor: | leduart |
Hallo
bei mir - uralt matlab- tut der Befehl W=[W; [n, pz_ergebnis, pq_ergebnis]];
was du willst, allerdings die Zahlen nicht als integers sondern mit soviel Stellen wie deine reellen Zahlen.
Das besser zu machen verlangt viel, weil die arrays immer nur gleich lange objekte verdauen.
die Formel mit log:2 usw stand in der aufgabe oder wo hast du die her? vielleicht soll die nur auf differenzen angewendet werden? ich kann mir nicht vorstellen dass sie für Summen etwa gilt, dagegen verliert man bei Differenzen ganz schön Stellen. 10000.1-10000.0=.1
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 22:57 Mi 09.11.2011 | Autor: | bandchef |
Zitat von leduart: "die Formel mit log:2 usw stand in der aufgabe oder wo hast du die her? vielleicht soll die nur auf differenzen angewendet werden?"
Genau die Formel wurde in der Aufgabe erwähnt sowie in der Vorlesung. Die Formel wurde in der Aufgabe wie folgt als "Hinweis" erwähnt. Ich zitiere jetzt wortwörtlich die Aufgabe:
Zitat Aufgabe: "Hinweis: Bei Subtraktion $x-y$ gehen maximal $p=log2 [mm] \left( \left| \frac{x+y}{x-y} \right| \right)$ [/mm] Bit verloren."
Zitat von leduart: "ich kann mir nicht vorstellen dass sie für Summen etwa gilt, dagegen verliert man bei Differenzen ganz schön Stellen. 10000.1-10000.0=.1 "
Genau das weiß ich auch. Subtraktion ähnlich großer Zahlen mit Computerarithmetik birgt eine große Gefahr des Stellenverlustes.
Eine einzige Frage noch: Was macht diese Formel $p=log2 [mm] \left( \left| \frac{x+y}{x-y} \right| \right)$ [/mm] überhaupt? Laut Aufgabe berechnet es die maximale Anzahl an Bitstellen die verloren gehen.
=> Was bedeuten denn nun z.B. die ersten beiden Werte bei n=1.0000? <=
Soll das nun bedeuten, dass bei n=1 1.9201 Stellen verloren gegangen? Also quasi bei der Vorwärtsrekursion wie bei der Rückwärtsrekursion gleich viele Stellen verloren gegangen sind? Falls das so stimmt, dann sieht man, dass die Rechnung erst bei n=14.0000 unterschiedliche Werte ergibt. Um so weiter die Rekursionen fortschreiten um so mehr Stellen gehen anscheinend verloren. Was mich aber irritiert ist, dass auf einmal bei n=17.0000 und n=18.0000 wieder weniger Bits verloren bzw. Dezimalstellen verloren gehen... Was bedeutet das?
n: pz: pq:
1.0000 1.9201 1.9201
2.0000 2.6086 2.6086
3.0000 3.0492 3.0492
4.0000 3.3777 3.3777
5.0000 3.6412 3.6412
6.0000 3.8619 3.8619
7.0000 4.0521 4.0521
8.0000 4.2194 4.2194
9.0000 4.3688 4.3688
10.0000 4.5038 4.5038
11.0000 4.6270 4.6270
12.0000 4.7404 4.7404
13.0000 4.8453 4.8453
14.0000 4.9444 4.9431
15.0000 5.0122 5.0346
16.0000 5.5909 5.1201
17.0000 2.3816 5.2092
18.0000 0.3592 5.1336
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:05 Do 10.11.2011 | Autor: | leduart |
Hallo
3,234 bits gibt es nicht das sind 3 oder 4 steht da um deine log formel nicht eine Klammer, die die zahlen ganz macht (nach oben oder unten.
2, stehen in deiner tabelle die aufaddierten verluste, oder die pro iteration?
3. hast du doch die eine iteration von hinten nach vorn gemacht? dann müsstest du auch so die zugehörigen p ausrechnen.
4. ich betone ich bin kein Informatiker und hab keine Ahnung für welche Rechenoperationen die Abschätzung gilt. aber sicher liefert sie keine hundetstel bits!
steht denn die Formel ohne jeden Zusammenhang einfach da und ihr sollt nur damit rumrechnen. Noch mal, wenn ich 2 und 2 addiere kommt sicher kein unendlicher bitverlust raus wie deine Formel [mm] log_2(2+2)/0) [/mm] suggeriert!
bevor du also so sinnloses zeug ausrechnest frag nach der formel!
eben sehe ich deinen tip: Bei Subtraktion x-y gehen maximal $ p=log2 [mm] \left( \left| \frac{x+y}{x-y} \right| \right) [/mm] $ Bit verloren
bei subtraktion von 2 gleichen Zahlen gehen maximal alle vorhandenen bits verloren!
du darfst also um deine p zu berechnen nur die subtraktionen in deinen rechnungen betrachten. ich hab keine Lust zu überprüfen, ob du bei deinen rechnungen noch andere rechenarten verwendest. wenn ja musst du dein programm umschreiben. um die p zu finden. und sieh nach, ob das nicht gaze zahlen sind. aber auch sonst sind nur ganze zahlen sinnvoll! ein comp. kann kei n 0.3 bit irgendwo aufbewahren!
Gruss leduart
|
|
|
|