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