Jörg Reinholz: Lineare Interpolation - Eine Lösung in PHP

Beitrag lesen

Moin!


> Datum = 2015.01.01 06:00:00, Wert = 1224,167
> Datum = 2015.01.01 06:15:00, Wert = 1344,207
> Datum = 2015.01.01 06:30:00, Wert = 1524,367
> Datum = 2015.01.01 06:45:00, Wert = 1555,707
> ...
> Datum = 2015.01.02 06:15:00, Wert = 1024,57
> Datum = 2015.01.02 06:30:00, Wert = 1924,50
> ...

-> wende hier beide methoden an, die lineare und die lagrange und vergleiche beide ergebnisse. im übrigens sprechen wir bei der linearen interpolation von polynomen vom grad 1, weil xa+b nach x differenzierbar ist (f'(x)=a -> steigung der geraden).

Das wissen wir nicht! Wir wissen auch gar nichts brauchbares über die Herkunft der Zahlen. Das kann eine "Sägezahnfunktion" sein, z.B. eine Produktionsmenge, die nachts um 0:00 auf Null zurück gesetzt und ansonsten aller 15 Minuten abgemessen wird.

Dazu würden die Zahlen passen.

Hier die Lösung mit der in dem Fall sinnvollen lineare Interpolation über einen Tag- aber in PHP

<?php
# Eingangsdaten:
$ar[strtotime("2015-01-01T06:00:00")]=1224.167;
$ar[strtotime("2015-01-01T06:15:00")]=1344.207;
$ar[strtotime("2015-01-01T06:30:00")]=1524.367;
$ar[strtotime("2015-01-01T06:45:00")]=1555.707;

$mitte=count($ar)/2;
$median=(count($ar)+1)/2;
$_Dx_1=0;
$_Dx_2=0;
$_Dy_1=0;
$_Dy_2=0;

$i=1;
foreach (array_keys($ar) as $key) {
   if ($i <= $median) {
       $_Dx_1=$_Dx_1+$key;
       $_Dy_1=$_Dy_1+$ar[$key];
   }
   if ($i >= $median) {
       $_Dx_2=$_Dx_2+$key;
       $_Dy_2=$_Dy_2+$ar[$key];
   }
   $i++;
}
$x0=$_Dx_1/ceil($mitte);
$y0=$_Dy_1/ceil($mitte);
$x1=$_Dx_2/ceil($mitte);
$y1=$_Dy_2/ceil($mitte);


$arKeys = array_keys($ar);
$start  = $arKeys[0];
$ende   = $arKeys[count($arKeys)-1];

$step=60; # Sekunden

for ($x=$start; $x<=$ende; $x=$x+60) {
   echo $x, "\t", lineareInterpolation ($x, $x0, $y0, $x1, $y1), "\n";
}


function lineareInterpolation ($x, $x0, $y0, $x1, $y1) {
     return ($y0 * ($x1-$x) / ($x1-$x0)) + ($y1 * ($x-$x0) / ($x1-$x0));
}

Ergebnisse:

1420088400      1220.2245
1420088460      1228.7528333333
1420088520      1237.2811666667
1420088580      1245.8095
1420088640      1254.3378333333
1420088700      1262.8661666667
1420088760      1271.3945
1420088820      1279.9228333333
1420088880      1288.4511666667
1420088940      1296.9795
1420089000      1305.5078333333
1420089060      1314.0361666667
1420089120      1322.5645
1420089180      1331.0928333333
1420089240      1339.6211666667
1420089300      1348.1495
1420089360      1356.6778333333
1420089420      1365.2061666667
1420089480      1373.7345
1420089540      1382.2628333333
1420089600      1390.7911666667
1420089660      1399.3195
1420089720      1407.8478333333
1420089780      1416.3761666667
1420089840      1424.9045
1420089900      1433.4328333333
1420089960      1441.9611666667
1420090020      1450.4895
1420090080      1459.0178333333
1420090140      1467.5461666667
1420090200      1476.0745
1420090260      1484.6028333333
1420090320      1493.1311666667
1420090380      1501.6595
1420090440      1510.1878333333
1420090500      1518.7161666667
1420090560      1527.2445
1420090620      1535.7728333333
1420090680      1544.3011666667
1420090740      1552.8295
1420090800      1561.3578333333
1420090860      1569.8861666667
1420090920      1578.4145
1420090980      1586.9428333333
1420091040      1595.4711666667
1420091100      1603.9995

Die Zahlen für den 2. Tag werfen dann die Frage nach der Herkunft der Zahlen auf. Aber hier eine Kurve hereinzuinterpretieren ist, wenn es sich - die Zahlen legen das nahe - um die "Sägezahn-Sache" handelt, falsch - weil dann höchst merkwürdige Kurven auftauchen (Welchen Grad hat denn ein Polynom, wenn 48 Stunden lang aller 15 Minuten gemessen wird?) die zu unsäglich von der Realität abweichenden Kurven führen und nicht gerade produktiv sind, wenn es um eine Abschätzung des Wertes zu einem nicht gemessenen Zeitpunkt handelt.

Mathematiker zu sein ist sicherlich ein ehrenvoller Zustand. Aber man muss auch ein wenig Realitätssinn bewahren.

Jörg Reinholz

0 45

Lineare Interpolation

Casalblanca
  • c#
  1. 0
    Student07.05.2015
    1. 0
      Casalblanca
      1. 0
        Tabellenkalk
        • c#
        • programmiertechnik
        • statistik
  2. 1
    Jörg Reinholz
    1. 0
      Casalblanca
      1. 0
        Jörg Reinholz
        1. 0
          Casalblanca
          1. 0
            Jörg Reinholz
            1. 0
              Casalblanca
              1. 0
                Jörg Reinholz
                • c#
                • programmiertechnik
        2. 0
          dedlfix
      2. 0
        bernd
  3. 0
    Student26.05.15
    1. 0
      Jörg Reinholz
      1. 0
        Student27.05
        1. 0
          Jörg Reinholz
          1. 0
            Student27.05
            1. 0

              Lineare Interpolation - Eine Lösung in PHP

              Jörg Reinholz
              • php
              • statistik
              1. 4
                1unitedpower
                1. 0

                  Lineare Interpolation mit Zacken - Eine Lösung in PHP

                  Jörg Reinholz
                  1. 0

                    Mann, sind die Rechner schnell geworden...

                    Jörg Reinholz
                    1. 0
                      1unitedpower
                      1. 0
                        Jörg Reinholz
                        1. 0

                          lösung mit lagrange...

                          Student29.05
                          1. 1
                            Christian Kruse
                            1. 0
                              Student29.05
                              1. 5
                                Christian Kruse
                                1. 0
                                  Student29.05
                                  1. 1
                                    Christian Kruse
                                    1. 1
                                      Der Martin
                                      • programmiertechnik
                                      • software
                                  2. 3
                                    Camping_RIDER
                                    1. 0
                                      Student29.05
                                      1. 0
                                        Student29.05
                                        1. 0
                                          Der Martin
                                      2. 0
                                        Der Martin
                                        • software
                                        1. 0
                                          Student29.05
                          2. 0
                            1unitedpower
                            1. 0
                              Student29.05
                              1. 1
                                unkown
                              2. 0
                                1unitedpower
                          3. 0
                            Jörg Reinholz
                        2. 0
                          1unitedpower
                          1. 0
                            Christian Kruse
                          2. 0

                            PHP, Ausgabe- Pufferung. Performance

                            Jörg Reinholz