NEWS
Rechenfehler - Denkfehler bei "Klammerfunktionen"?
-
Ich habe das bereits auf der CCU geregelt, dass ich mir einen fließenden "Mittelwert für Arme" bilde indem ich einen Wert durch eine Anzahl Teile, dann mit einem weniger Multipliziere und anschließend den aktuellen Wert dazu addiere und das gesamte wieder durch die Anzahl Teile.
Also (sicherheitshalber zu viele Klammern):neuer Mittelwert = ((((alter Mittelwert : 4)*3)+ neuer Wert)/4)
in Blockly umgesetzt ist es so:
Die Werte passten nicht, also die Debug eingebaut.
Das kommt dabei raus:
2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: Inhalt von mittlerer Hitze hinten: 0.9256038654802249 2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: aktueller Hitzestatus: 2.3 2019-03-04 11:41:57.769 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: Variable Mittelhitze: 0.7485507247775421 2019-03-04 11:41:59.771 - info: javascript.0 script.js.Rollladen.Hilfsprogramme: neuer Inhalt von mittlerer Hitze hinten: 0.7485507247775421
Wo ist mein Denkfehler?
-
@Homoran
Da wird m. E. einmal zu oft durch vier geteilt.Das bisherige Mittel sollte mit dem Gewicht drei einfließen, der neue Wert mit Gewicht eins und anschließend wird durch vier geteilt. Oder: das bisherige Mittel mit Gewicht 3/4 und der neue Wert mit Gewicht 1/4. Dann sollte es passen.
Gruß Marco
-
n = Anzahl der gewünschten Stützstellen
Neuer MW = (alter MW * (n-1) + neuer Wert ) / nDein alter Mittelwert "ersetzt" quasi 3 Einzelwerte (deshalb *3) dann den vierten Wert noch dazu und am Ende wieder durch 4 teilen um auf den neuen Mittelwert zu kommen.
Ist nicht ganz ein gleitender Mittelwert, kommt dem aber für die meisten Anwendungen hinreichend nahe.
-
Es kommt raus, was bei der Berechnung oben rauskommen muss.
Du teilst oben im Blockly nicht den neuen Wert 2.3 durch 4, sondern addierst ihn zuerst zum errechneten neuen Drittel.In Zahlen ist Deine Rechnung so:
0,92560387 / 4 = 0,23140097
0,23140097 * 3 = 0,6942029
0,6942029 + 2,3 = 2,9942029
2,9942029 / 4 = 0,74855072Da liegt der Fehler im Blockly
Du musst zuerst 2,3 / 4 teilen = 0,575 und dies dann zum errechneten Drittel addieren. 0,6942029 + 0,575 = 1,2692029Also anstelle:
((((alter Mittelwert : 4) * 3) + neuer Wert) :4)
((alter Mittelwert : 4) * 3) + (neuer Wert :4)Was ja exakt das gleiche ist wie die Rechnung von @I-Punkt, wenn man die 4 oder bei ihm n ausklammert. So kommt man mit immer weniger Klammern und Berechnungen aus. In Zahlen:
(alter Mittelwert * (4-1) + neuer Wert) / 4
oder wenn n bei Dir konstant 4 ist, läuft das auch so.
(alter Mittelwert * 3 + neuer Wert) / 4
Nur wie das in ein Blockly jetzt gesetzt wird?...keine Ahnung.
-
@mehrwiedu sagte in Rechenfehler - Denkfehler bei "Klammerfunktionen"?:
(alter Mittelwert * 3 + neuer Wert) / 4
So sollte es sein! - Danke.
das passt zu@lonsimbt sagte in Rechenfehler - Denkfehler bei "Klammerfunktionen"?:
Da wird m. E. einmal zu oft durch vier geteilt.
und ja:
@I-Punkt sagte in Rechenfehler - Denkfehler bei "Klammerfunktionen"?:
Ist nicht ganz ein gleitender Mittelwert, kommt dem aber für die meisten Anwendungen hinreichend nahe.
das ist mir bewusst.
Extrem wird diese Umgenauigkeit bei großen Sprüngen4-4-4-4-0-0-0-0
sollte als echter Mittelwert der letzten 4 Werte 0 ergeben, nach disere Methode ist er deutlich höher
Danke erstmal!
sieht jetzt so aus:
-
Für einen gleitenden Mittelwert sollte auf Aktualisierung getriggert werden. Bei nur 4 Werten ist eine echte gleitende Mittelwertbildung auch nicht so schwierig (nicht getestet):
-
Komplexe Berechnungen in einen Baustein packen ist in Blockly fast nicht möglich.
Mit der Klammersetzung hapert es da irgendwo.
Am Besten sieht man das, wenn man kurz auf die JavaScript Anzeige umschaltet.
Um mir weitere graue Haare zu ersparen, habe ich mir es angewöhnt solche Dinge "aufzudröseln".
Ich packe mir die Berechnungen immer in eine Funktion. Da bleibt das Blockly übersichtlicher.Export:
Grüße
-
@paul53
Danke Paul.mit arrays beschäftige ich mich gerade erst.
Auf der CCU hatte ich es noch nicht. Und erst einmal die Formel von dort (falsch) übernommen
-
Ihr zwei schafft mich noch