<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich habe einen Datensatz, wo:
x = Stunde
y = durchschnittlicher Baumwasserverbrauch [von 3, 2 oder 1 Werten aufgrund von Datenverlust]
Dieser Zyklus wiederholt sich monatelang zu der Zeit [24 Stunden pro Tag], und jeder Tag "y" hat ein anderes Muster. Hier sind dreitägige Beispieldaten:

Das Addieren von Stunden ist ein einfacher Weg, aber es wird davon ausgegangen, dass der Wasserverbrauch während der gesamten Stunde gleich war [falsche Annahme].
Gibt es eine bessere Möglichkeit, die Fläche unter jeder Kurve zu integrieren, damit die Auflösung von "y" nicht eine Stunde beträgt?
Ich habe bereits versucht, verschiedene nichtlineare Modelle aus der Modellbibliothek anzupassen, aber keines liefert günstige Ergebnisse und kann sie nicht an die täglichen Änderungen der Kurvenform von "y" anpassen.
Als nächstes werde ich einen Gaußschen Prozess ausprobieren, um zu sehen, ob ich die Auflösung erhöhen kann.
Danke schön,
-JGL
Hier ist eine Funktion, die Ihnen eine neue Bereichsspalte gibt.Es ist im Moment nicht schlau genug, es auszuführen, während Sie Berichte geöffnet haben, also stellen Sie einfach sicher, dass das Fenster sortiert werden kann.
Alles, was Sie tun müssen, ist die Funktion auszuführen und dann riemann_sum() aufzurufen.
riemann_summe = Funktion (
{dt = Aktuelle Datentabelle (), xcol = "Wählen" , ykol = "Wählen" , bycol = "Wählen" },
{STANDARD LOKAL},
Aktuelle Datentabelle (dt);
Wenn ( xcol == "Wählen" ,
nc = N Spalte (dt);
lbbreite = 130 ;
nw = Neues Fenster ( "Reimann-Summe" ,
<< Modal ,
Border-Box ( Links ( 3 ), Spitze( 2 ),
V Listenfeld (
Textfeld ( "Bekommt die Fläche unter einer Kurve" ),
H Listenfeld (
V Listenfeld (
Panel-Box ( "Spalten auswählen" ,
colListData = Col Listenfeld ( Alle, width( lbWidth ), nLines( Mindest (nc, 10 ) ) )
),
),
Panel-Box ( "Ausgewählte Spalten in Rollen umwandeln" ,
Lineup-Box ( N Spalte ( 2 ), Abstand ( 3 ),
Button-Box ( "Y, Spalten" , colListY << Anhängen ( colListData << GetSelected ) ),
colListY = Col Listenfeld (
Breite (lbBreite),
nZeilen( 1 ),
maxausgewählt( 1 ),
minItems( 1 ),
"numerisch"
),
Button-Box ( "X" , colListX << Anhängen ( colListData << GetSelected ) ),
colListX = Col Listenfeld (
Breite (lbBreite),
nZeilen( 1 ),
maxausgewählt( 1 ),
minItems( 1 ),
"numerisch"
),
Button-Box ( "Von" , colListB << Anhängen ( colListData << GetSelected ) ),
colListB = Col Listenfeld ( Breite( lbWidth ), nZeilen ( 1 ), maxselektiert( 1 ) )
)
),
Panel-Box ( "Aktion" ,
Lineup-Box ( N Spalte ( 1 ),
Button-Box ( "OK" ,
ykol = Spalte ((colListY << Artikel erhalten )[ 1 ]);
xcol = Spalte ((colListX << Artikel erhalten )[ 1 ]);
nby = Gegenstände (colListB << Artikel erhalten );
Wenn (nebenbei,
bykol = Spalte ((colListB << Artikel erhalten )[ 1 ]),
bykol = Neue Spalte ( "Fakeby" , Formel( verkohlen ( 1 )));
);
),
Button-Box ( "Stornieren" , nw << Fenster schließen ),
Textfeld ( " " ),
Button-Box ( "Entfernen" ,
colListY << Ausgewählte entfernen ;
colListX << Ausgewählte entfernen ;
colListB << Ausgewählte entfernen ;
),
)
)
)
)
)
);
);
Zusammenfassen ( list_by = Von ( bycol ) );
dt << Sortieren ( //sortiert, um sicherzustellen, dass x in der richtigen Reihenfolge sind
Von ( bycol, xcol ),
Reihenfolge (aufsteigend, aufsteigend),
Tabelle ersetzen
);
list_valuesx = xcol << Werte bekommen ;
list_valuesy = ycol << Werte bekommen ;
Warten ( 0,1 );
AA = Assoziatives Array ();
Für ( ich = 1 , ich <= N Artikel ( list_by ), i++,
dt << klar auswählen ;
list_rows = dt << Holen Sie sich Zeilen wo ( bycol[ Reihe ()] == list_by );
//dif_x und sum_y sind, wo die Magie passiert
dif_x = list_valuesx[list_rows[ 2 :: ( N-Reihe ( list_rows ))]] - list_valuesx[list_rows[ 1 :: (
N-Reihe ( list_rows ) - 1 )]];
sum_y = .5 * (list_valuesy[list_rows[ 2 :: ( N-Reihe ( list_rows ))]] + list_valuesy[list_rows[ 1 :: (
N-Reihe ( list_rows ) - 1 )]]);
aa[list_by ] = Summe ( diff_x
sum_y );
);
dt << Neue Spalte ( "Integral" , numerisch, stetig, Formel( aa[bycol[ Reihe ()]] ) );
Spalte (dt, "Integral" ) << Formel löschen ; // macht es und tötet es dann, damit aa lokal bleiben kann
Wenn (!nby, dt<< Spalten löschen ({bycol}));
);