Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Tageswerte aus Monatsmitteln interpolieren

Tageswerte aus Monatsmitteln interpolieren

Universität / Fachhochschule

Tags: interpolation, Kurvendiskussion, Näherung

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
Ronsen

Ronsen aktiv_icon

14:13 Uhr, 23.10.2020

Antworten
Hallo,

Gegeben sind fünf Monatsmittelwerte eines Parameters (z.B. relative Feuchte).

Januar: 1.0
Februar: 0.8
März: 0.2
April: 0.6
Mai: 0.8

Ich suche nach einer Methode, Tageswerte zu bilden, ohne dass es zu scharfen Kanten zwischen den Monaten kommt. Außerdem darf sich das Monatsmittel nicht verändern.

Zur Veranschaulichung:

Abbildung 1 zeigt die Daten. Wenn man sagt, dass jeder Tageswert dem Monatsmittelwert entspricht, dann bleiben die Monatsmittel gleich, aber wir haben kantige Übergänge zwischen den Monaten.

Abbildung 2 zeigt eine lineare Interpolation zwischen den benachbarten Monatsmitteln. Problem hier ist, dass die Tageswerte dann, wenn man den roten Werten folgt, nicht mehr im monatlichen Mittel den gegebenen Wert entspricht (siehe z.B. März: der Mittelwert wäre zu hoch).

Abbildung 3 zeigt, wie ich es mir ungefähr vorstelle. Wenn ihr ein geeignetes Verfahren kennt, mit dem ich auf eine solche Kurve komme, dann nennt es mir gern.

Ich hoffe, die Erklärung ist verständlich :-)

Forum_Abb1
Forum_Abb2
Forum_Abb3

Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert):
"Ich benötige bitte nur das Ergebnis und keinen längeren Lösungsweg."
Hierzu passend bei OnlineMathe:
Kurvendiskussion (Mathematischer Grundbegriff)
Online-Nachhilfe in Mathematik
Antwort
DrBoogie

DrBoogie aktiv_icon

14:24 Uhr, 23.10.2020

Antworten
"Problem hier ist, dass die Tageswerte dann, wenn man den roten Werten folgt, nicht mehr im monatlichen Mittel den gegebenen Wert entspricht"

Das kommt darauf an, wie du linear interpolierst. Es gibt auf jeden Fall lineare Interpolationen, die deine Bedingung erfüllen. Eine Möglichkeit ist, Monat für Monat eine Anpassung für eine "falsche" lineare Interpolation zu machen.
Antwort
DrBoogie

DrBoogie aktiv_icon

14:43 Uhr, 23.10.2020

Antworten
Konkret könnte die Lösung so aussehen.
Januar: 1.1-t160
Februar: 0.9625-t0.32529
Für März müsste man dann a finden, so dass 0.6375-ta den Mittelwert 0.2 hat, was zu
0.6375-at=131t31=0.6375-a16=0.2 führt.

Usw.
Ronsen

Ronsen aktiv_icon

16:52 Uhr, 23.10.2020

Antworten
Vielen Dank für die Antworten.

Der Lösungsansatz ist soweit gut für den gegebenen Datensatz. Allerdings scheinen das individuelle Lösungen für jeden Monatsübergang zu sein. Oder ich erkenne die Systematik dahinter noch nicht.

Ich muss wohl meine Frage erweitern, denn ich suche nach einer (oder mehreren) konkreten Formeln, die ich auf einen großen Datensatz von Monaten anwenden kann. Am Ende möchte ich diese Rechnungen in einem Programm automatisieren.

Es muss auch nicht zwingend eine lineare Näherung sein.
Antwort
DrBoogie

DrBoogie aktiv_icon

17:06 Uhr, 23.10.2020

Antworten
Was ich oben beschrieben habe, ist einfach zu programmieren. Man beginnt in Januar mit einer linearen Funktion, die am Ende des Monats den Mittelwert zwischen Januar und Februar liefert und für Januar den richtigen Mittelwert bringt. Der Übergang von einem Monat zu dem anderen wird durch durch die Annahmen gesteuert, dass 1. die Funktion am Anfang des Monats gleich de Wer am Ende des Vormonats ist, 2. der Mittelwert für den Monat richtig ist.

Ob eine fertige Formel für so eine Aufgabe existiert, daran habe ich meine Zweifel.
Antwort
Roman-22

Roman-22

17:48 Uhr, 23.10.2020

Antworten
Man könnte auch die Messwerte kumulieren, quasi das Integral bilden und dann eine Polynomfunktion (oder auch eine andere, stetig differenzierbare Funktion) fitten. Diese muss dann nur noch differenziert werden.
Wie das beigefügte Bild aber zeigt, erfüllt die Ergebnisfunktion zwar die Forderung nach dem gleichen Monatsschnitt, neigt aber zum schwingen und zeigt vor allem an den Rändern nicht den erwarteten/gewünschten Verlauf.
Außerdem ist das Verfahren nicht geeignet, wenn es sich um einen Datensatz mit sehr vielen Monaten handelt, da ja auch der Grad der Polynomfunktion entsprechend erhöht werden müsste. Hier wäre dann die Anpassung mit Spline-Funktionen sicher zielführender.
Das Ergebnis eines derartigen Ansatzes mit Splines ist im zweiten Bild zu sehen. Ich habe dabei den ersten und letzten Messwert verdoppelt, um das Verhalten der Kurve an den Enden realistischer zu gestalten. Verwendet habe ich kubische Splines mit linearen Enden.
Die programmtechnische Umsetzung der Splines und deren Ableitung wird natürlich deutlich aufwändiger als ein linearer Ansatz und natürlich wird der Verlauf dann auch nicht durch EINE einzige Funktion beschrieben, sondern eine Reihe von Parabeln.


B
BB
Frage beantwortet
Ronsen

Ronsen aktiv_icon

18:21 Uhr, 23.10.2020

Antworten
Danke für eure Tips und Anregungen.

Ich werde mich mal ransetzen und versuchen, das programmtechnisch zu lösen :-)
Antwort
Roman-22

Roman-22

18:30 Uhr, 23.10.2020

Antworten
Zur Verdeutlichung im Anhang der Screenshot des vollständiges Arbeitsblattes. Ich habs ein wenig kommentiert, sollte soweit selbsterklärend sein. Natürlich ist Spline-Interpolation eine eingebaute Funktion des verwendeten Programms ebenso wie das Differenzieren. Das müsstest du in deinem Programm entsprechend implementieren.
Zusätzlich habe ich auch die Ergebnisse der beiden anderen Möglichkeiten für das Endverhalten des kubischen Splines (parabolisch bzw. kubisch) angefügt.


B1
B2
B3
Ronsen

Ronsen aktiv_icon

16:22 Uhr, 26.10.2020

Antworten
Hallo noch mal,

Also ich habe zunächst den Lösungsansatz von DrBoogie programmtechnisch umgesetzt und linear interpoliert. Das hat technisch auch gut funktioniert und die Bedingungen korrekt erfüllt. Es führte letztlich dazu, dass die Maxima bzw. Minima immer am Anfang bzw. Ende des Monats auftraten (logischerweise), was nach Rücksprache mit meinen Kollegen nun doch nicht optimal ist. Der März soll sein Minimum bitte in der Monatsmitte haben, usw.

Ich habe jetzt Romans Spline-Ansatz ausprobiert und komme auch auf eine optisch ansprechende Kurve, allerdings sind die y-Werte noch verzerrt. Das ist vermutlich mehr ein programmtechnisches Problem.

@ Roman: Wenn es keine Umstände macht, könntest du mir bitte deine tageweise bestimmten Werte für S(x) und p(x) als Tabelle uploaden (für Abbildung B1)? Das könnte mir helfen, bei meinem Programm die korrekten Werte zu erzeugen.
Mit welchem Programm bzw. welcher Programmiersprache hast du das gerechnet?

LG
Ron
Antwort
Roman-22

Roman-22

17:20 Uhr, 26.10.2020

Antworten
Du hast Glück, dass ich die Datei noch nicht gelöscht hatte.

> Mit welchem Programm bzw. welcher Programmiersprache hast du das gerechnet?
Das Programm, welches ich fürs Prototyping verwende ist Mathcad 15.
Wie schon gesagt - alles, was ich eintippen musste siehst du im Bild - mehr gibt es nicht.

> Wenn es keine Umstände macht, könntest du mir bitte deine tageweise bestimmten Werte für S(x) und p(x) als Tabelle uploaden (für Abbildung B1)?
Tageweise?? Es handelt sich um stetige Funktionen, die für die zur Verfügung stehenden Daten im Bereich von 0 bis 5 Relevanz haben.
Ich kann dir die beiden Funktionen von 0 bis 5 mit der Schrittweite 130 auswerten lassen. Die entsprechenden Daten habe ich dir in eine EXCEL-Datei exportieren lassen, die ich unter workupload.com/file/ptZrHJ58Q7Q für dich zum Download hinterlegt habe.

Im Anhang noch die Grafik mit den kumulierten Daten und der Funktion S.

Viel Erfolg!

P.S.: Zusäztliche Anmerkung: Wenn man den ersten und letzten Wert nicht nur einfach verdoppelt, sondern (der von dir offenbar vermuteten Tendenz entsprechend) höhere Werte am Beginn und am Ende des Datensatzes hinzufügt und zusätzlich am Anfang noch einen beliebigen Dummywert (als Funktionswert für m=-1), dann stellt sich ein Kurvenverauf ein, der sehr ähnlich dem von dir eingangs händisch skizzierten ist. Siehe Bild.



B
B4
Frage beantwortet
Ronsen

Ronsen aktiv_icon

12:52 Uhr, 27.10.2020

Antworten
Top! Danke dir.

Ja, tagesweise und Schrittlänge 130 meinen hier fast das gleiche. Das hat mir jedenfalls sehr geholfen.

Es ist mir jetzt gelungen, eine für meine Zwecke akzeptable Lösung mit Cubic-Splines in Python zu programmieren :-)