Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Rechenfehler - Denkfehler bei "Klammerfunktionen"?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Rechenfehler - Denkfehler bei "Klammerfunktionen"?

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      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:
      Mittel-Hitze.png

      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?

      L 1 Reply Last reply Reply Quote 0
      • L
        lonsimbt @Homoran last edited by

        @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

        1 Reply Last reply Reply Quote 1
        • I
          I-Punkt last edited by

          n = Anzahl der gewünschten Stützstellen
          Neuer MW = (alter MW * (n-1) + neuer Wert ) / n

          Dein 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.
          Unbenannt.PNG

          1 Reply Last reply Reply Quote 1
          • M
            mehrwiedu last edited by mehrwiedu

            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,74855072

            Da 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,2692029

            Also 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.

            Homoran 1 Reply Last reply Reply Quote 1
            • Homoran
              Homoran Global Moderator Administrators @mehrwiedu last edited by Homoran

              @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üngen

              4-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:
              Mittel-Hitze_neu.png

              1 Reply Last reply Reply Quote 1
              • paul53
                paul53 last edited by

                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):
                Blockly_gleitend_Mittel4.JPG

                Homoran 1 Reply Last reply Reply Quote 1
                • rantanplan
                  rantanplan last edited by

                  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.

                  Rechnen_001.png

                  Export:

                  <xml xmlns="http://www.w3.org/1999/xhtml">
                    <variables>
                      <variable type="" id=";n:cqW_i{Wk?|i^b;r?q">akt_Hitzestatus_hinten</variable>
                      <variable type="" id="pHw}S)9MWPUzWt|+t*Y0">akt_mittlere_hitze_hinten</variable>
                      <variable type="" id="-xwNt2JMiJNB9J5-`qz:">Ergebnis</variable>
                    </variables>
                    <block type="debug" id="im^Q,7`S8l.0.(#]I(lM" x="88" y="38">
                      <field name="Severity">log</field>
                      <value name="TEXT">
                        <shadow type="text" id=";I0^nqg~DTVQ_$x9;~zr">
                          <field name="TEXT">test</field>
                        </shadow>
                        <block type="text_join" id="qRg.ODbKt)#`+~SKQ@Zy">
                          <mutation items="2"></mutation>
                          <value name="ADD0">
                            <block type="text" id="$*PvA17(=%pD)0F@@bm~">
                              <field name="TEXT">ERGEBNIS: </field>
                            </block>
                          </value>
                          <value name="ADD1">
                            <block type="procedures_callreturn" id="th-xDe6~}Am.hm_ld:@g">
                              <mutation name="Berechnung">
                                <arg name="akt_Hitzestatus_hinten"></arg>
                                <arg name="akt_mittlere_hitze_hinten"></arg>
                              </mutation>
                              <value name="ARG0">
                                <block type="math_number" id="C=Sh?|pb:Ifr|Z}UYflq">
                                  <field name="NUM">0.923</field>
                                </block>
                              </value>
                              <value name="ARG1">
                                <block type="math_number" id="7LTb0YCoM=A3SG530Mri">
                                  <field name="NUM">2.3</field>
                                </block>
                              </value>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                    <block type="procedures_defreturn" id="{!kE%gWB@.4D,:uA~A|R" x="263" y="188">
                      <mutation>
                        <arg name="akt_Hitzestatus_hinten" varid=";n:cqW_i{Wk?|i^b;r?q"></arg>
                        <arg name="akt_mittlere_hitze_hinten" varid="pHw}S)9MWPUzWt|+t*Y0"></arg>
                      </mutation>
                      <field name="NAME">Berechnung</field>
                      <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                      <statement name="STACK">
                        <block type="variables_set" id="U8zMu6^VE2:Hj~_!jp/{">
                          <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                          <value name="VALUE">
                            <block type="math_arithmetic" id="KsD=}R)(|t7J:k|]U{jb">
                              <field name="OP">DIVIDE</field>
                              <value name="A">
                                <shadow type="math_number" id="dI7QFQzZJ6mbea!7ih=B">
                                  <field name="NUM">1</field>
                                </shadow>
                                <block type="variables_get" id="vIrP^63=%(cf(*]WkVzt">
                                  <field name="VAR" id=";n:cqW_i{Wk?|i^b;r?q" variabletype="">akt_Hitzestatus_hinten</field>
                                </block>
                              </value>
                              <value name="B">
                                <shadow type="math_number" id="j}T2)LZ[h!^$%7,IHGzj">
                                  <field name="NUM">4</field>
                                </shadow>
                              </value>
                            </block>
                          </value>
                          <next>
                            <block type="variables_set" id=":(s+3}_$xmBwOmnTm=z@">
                              <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                              <value name="VALUE">
                                <block type="math_arithmetic" id="S#uK:v/gGiem[{FsoU}q">
                                  <field name="OP">MULTIPLY</field>
                                  <value name="A">
                                    <shadow type="math_number" id="dI7QFQzZJ6mbea!7ih=B">
                                      <field name="NUM">1</field>
                                    </shadow>
                                    <block type="variables_get" id="zizO+?_W^}rFW:]6=oYH">
                                      <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                    </block>
                                  </value>
                                  <value name="B">
                                    <shadow type="math_number" id=")%H!WlNdC_4mYQxmkZ)L">
                                      <field name="NUM">3</field>
                                    </shadow>
                                  </value>
                                </block>
                              </value>
                              <next>
                                <block type="variables_set" id="JvfqQFeOcmviH#PjJP~W">
                                  <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                  <value name="VALUE">
                                    <block type="math_arithmetic" id="HQJm-8~hoBqt0W3RsK]y">
                                      <field name="OP">ADD</field>
                                      <value name="A">
                                        <shadow type="math_number" id="C0zQ*[UNi5^5`,/jy~x]">
                                          <field name="NUM">1</field>
                                        </shadow>
                                        <block type="variables_get" id="hcqlTglgFbtl}q@GrE^L">
                                          <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <shadow type="math_number" id="8E2x_A:r=Ro)i+cW*uI{">
                                          <field name="NUM">0</field>
                                        </shadow>
                                        <block type="variables_get" id="!9bzw:H6o`UCV]-f_Q(R">
                                          <field name="VAR" id="pHw}S)9MWPUzWt|+t*Y0" variabletype="">akt_mittlere_hitze_hinten</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="variables_set" id="Z_i*_BG5FlotNXTWry6+">
                                      <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                      <value name="VALUE">
                                        <block type="math_arithmetic" id="WG5lc2%J}s/K^,p!cOM[">
                                          <field name="OP">DIVIDE</field>
                                          <value name="A">
                                            <shadow type="math_number" id="C0zQ*[UNi5^5`,/jy~x]">
                                              <field name="NUM">1</field>
                                            </shadow>
                                            <block type="variables_get" id="$5,magvf.znfy9F3YY!C">
                                              <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                                            </block>
                                          </value>
                                          <value name="B">
                                            <shadow type="math_number" id="]V.4I@|8rn?m5@o%-XnK">
                                              <field name="NUM">4</field>
                                            </shadow>
                                          </value>
                                        </block>
                                      </value>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                          </next>
                        </block>
                      </statement>
                      <value name="RETURN">
                        <block type="variables_get" id="p5V*jU]q%:*/7+(z[B:I">
                          <field name="VAR" id="-xwNt2JMiJNB9J5-`qz:" variabletype="">Ergebnis</field>
                        </block>
                      </value>
                    </block>
                  </xml>
                  

                  Grüße

                  1 Reply Last reply Reply Quote 2
                  • Homoran
                    Homoran Global Moderator Administrators @paul53 last edited by

                    @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 😞

                    Homoran 1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @Homoran last edited by

                      Ihr zwei schafft mich noch 😉

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      899
                      Online

                      31.9k
                      Users

                      80.1k
                      Topics

                      1.3m
                      Posts

                      6
                      9
                      1781
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo