Messpunkte in Gleichung umwandeln

Neue Frage »

ks230803 Auf diesen Beitrag antworten »
Messpunkte in Gleichung umwandeln
Meine Frage:
Guten Tag,

ich habe als Nicht- Mathematiker folgendes Problem:

Ich habe eine Messreihe von 400 Werten aus einer Produktion (siehe Bild).

Es wäre sehr hilfreich, wenn man daraus eine f(x) Formel ableiten könnte.



Fragen
a)
Ist die Suche nach einer f(x) Funktion in so einem Fall überhaupt sinnvoll?
D.h. ist davon auszugehen, daß so eine Funktion überhaupt existiert?

b)
Falls a) bejaht werden kann:
Wie kann man eine solche f(x) finden?

Vielen Dank für sachdienliche Hinweise!
KS






Meine Ideen:
Bisherige Versuche, die Reihe mit exp, acrtan. sin, parabel oder einer
Kombination dieser Funktionen per Software Programmierung anzunähern waren erfolglos.
IfindU Auf diesen Beitrag antworten »

Interpolation/Approximation einer Messreihe klingt doch ganz vernünftig. Auf den ersten Blick sieht das auch sehr nach einer logistischen Funktion aus: Wikipedia. Insb. das Beispiel zur Epidemie in Westafrika (Todeskurve) sieht deiner ja sehr ähnlich.
mYthos Auf diesen Beitrag antworten »
RE: Messpunkte in Gleichung umwandeln
Zitat:
Original von ks230803
...
Es wäre sehr hilfreich, wenn man daraus eine f(x) Formel ableiten könnte.
..Fragen

a)
Ist die Suche nach einer f(x) Funktion in so einem Fall überhaupt sinnvoll?
...

Ja! In vielen Fällen können natürliche Vorgänge (exponentielles Wachstum, - Abnahme) mathematisch ziemlich gut modelliert werden (sh. z.B. logistische Funktion).

Hier, logistische Funktion: Logistisches Wachstum - Funktion verändern

Zitat:
Original von ks230803
...
b)
Falls a) bejaht werden kann:
Wie kann man eine solche f(x) finden?
...


Im einfachsten Fall mit GeoGebra [TREND] oder Excel (wie im obigen Link). Das Verfahren heißt Regression (Regressionsanalyse). --> Fiktiver Datensatz - nichtlineare Regression

Zitat:
Kombination dieser Funktionen per Software Programmierung anzunähern waren erfolglos.

Es gibt schon effiziente Tools dazu. Möglicherweise sind dir diese nicht bekannt oder du konntest sie nicht erfolgreich einsetzen. Siehe die Links zu den Anwendungen mit Excel.
Es gibt allerdings Kurven, für die auf den ersten Blick keine Näherungsfunktion als gegeben erscheint. Dann hilft manchmal das Tool 'curveexpert', es ist erstaunlich, was dieses findet!

Z.B. hier: Funktion aus mehreren Punkten

Daneben gibt es auch Online-Konvertierer, worin du deine Messwerte eingeben kannst!

Voraussetzung ist also, dass du eine Wertetabelle zur Verfügung hast oder eben eine erstellst und diese Wertepaare dann eingibst. Du kannst sie auch hier posten, falls du nicht damit zu Rande kommst.

mY+
debug110 Auf diesen Beitrag antworten »

Danke, das werde ich probieren und melde mich danach.
KS


Willkommen im Matheboard!
Du bist hier zweimal angemeldet, ks230803 wird daher demnächst gelöscht.
Viele Grüße
Steffen
debug110 Auf diesen Beitrag antworten »
RE: Messpunkte in Gleichung umwandeln
Danke für die Antwort.
>Tool 'curveexpert',
Shareware download: Virustotal schlägt hier Alarm.

>Wertetabelle zur Verfügung hast oder eben eine erstellst und diese Wertepaare dann eingibst. Du kannst sie auch hier posten, falls du nicht damit zu Rande kommst.

Siehe Anhang als 2 spaltige .txt datei.
Die Spalten sind durch einen tab getrennt.


KS
mYthos Auf diesen Beitrag antworten »

Der Virus-Alarm ist ein Fehlalarm. Ich habe die Version 2.2.0 Pro, diese ohne Probleme.
Aber bei deiner Messreihe funktioniert es auch mit Excel, beide, Excel und CurveExpert zeigen fast gleiche Resultate.
Auf den ersten Blick bringt ein Polynom 3. oder auch 4. Ordnung recht gute Werte.
In Excel erstelle ein x-y Diagramm und davon dann eine Trendfunktion.
----------
Ob eine logistische Funktion möglich ist, da wäre noch zu experimentieren, hier ist allerdings die Custom-Einstellung zu wählen.

mY+
 
 
debug110 Auf diesen Beitrag antworten »

>Ob eine logistische Funktion möglich ist, da wäre noch zu experimentieren
Ich habe die eine logistische Funktion in mein Programm eingebaut und mit verschiedenen
Parametern getestet. Das nächste Ergebnis (schwarz) liegt näher an den Messwerten (blau) als alle
bisherigen Versuche. Die Ausbuchtung unten links ist jedoch nicht mit den Gegebenheiten vereinbar.

>Auf den ersten Blick bringt ein Polynom 3. oder auch 4. Ordnung recht gute Werte.
Danke. Kannst Du mir dafür Formeln angeben, die ich durchtesten kann?

KS
mYthos Auf diesen Beitrag antworten »

Ich bin noch nicht dazugekommen, weiter zu testen, will es aber heute noch machen (auch mit LogisFkt).
Welche Technologie-Mittel hast du (außer CurveExpert)?

In Excel kannst du von jedem Funktionstyp (dessen Gerüst allgemein in Parametern vorliegt), eine Regressionsanalyse mittels Minimierung der Summe der Fehlerquadrate durchführen.
Hier im Board schon mehrmals gezeigt, bitte auch mal suchen.

Die Polynome, die ich bisher ermittelt habe:


(R² = 0.9975, Korrel, Bestimmtheitsmaß)


(R² = 0.9951)

Das Poly p3 ist am Ende etwas unbefriedigend, das Poly p4 ist besser!

[attach]52297[/attach]

mY+
debug110 Auf diesen Beitrag antworten »

Vielen Dank für Deine Hilfen!
Die Kurve sieht vielversprechend aus.
Was bedeutet das groß geschriebene E in der Formel?

>Welche Technologie-Mittel hast du (außer CurveExpert)?
c++

KS
mYthos Auf diesen Beitrag antworten »

Das bei Fließkommadarstellung übliche E steht für 10, das ist eine gängige Schreibweise z.B. bei Taschenrechnern, denn die können bei der Fließkommadarstellung oft keine Hochzahlen schreiben.
Vor allem muss diese Schreibweise bei sehr kleinen oder sehr großen Zahlen angewandt werden, das machen die Rechner dann automatisch.

1.83E-04 meint 1.83 , 4E-05 = 0.00004, 3E09 = 3 Mrd

mY+
Ulrich Ruhnau Auf diesen Beitrag antworten »
RE: Messpunkte in Gleichung umwandeln
Ich benutze gerne Matlab und bevorzuge den Rationalen-Polynomfit zumal es sich hier um eine glockenähnliche Kurve handelt.

[attach]52298[/attach]
mYthos Auf diesen Beitrag antworten »

Ich würde gerne wissen, wie gut deine Kurve "fittet". Hast du zufällig das Bestimmtheitsmaß (R² bzw. Korrel)?

p4 hat 0,9975

mY+
debug110 Auf diesen Beitrag antworten »

>Hast du zufällig das Bestimmtheitsmaß (R² bzw. Korrel)?
Bislang noch nicht. Ich muß mich erst noch einlesen, was genau das Bestimmtheitsmaß ist.

>Ich würde gerne wissen, wie gut deine Kurve "fittet"
Ich war mir bis heute nicht sicher, ob es überhaupt eine Gleichung gibt. Ich habe zur Vereinfachung
die u.a. Funktion geschrieben. Durch Drehen des Mausrades läßt sich die Kurve "auf Sicht fitten".

Ich werde am WE Deine p4(x) in mein Programm einbinden und melde mich danach.

void Graphen::logistic(double dlcurv[400], BOOL Blimit)
{

//dexpshape0; 1. Variable Wertebereich des Graphen
//dScal : 2 Variable verschiebt die Kurve horizontal an die Messwerte

double deuler = 2.7182818284590452353602874713527;
double dstp = dexpshape0;
dstp /= 400;

double dexp;
for(int x = 0; x < 400; x++)
{
dexp = -dexpshape0/2;
dexp -= dScal;
dexp += x * dstp;
dexp *= -1;
dlcurv[x] = pow(deuler, dexp);
dlcurv[x]++;
dlcurv[x] = 1/dlcurv[x];
}

if(Blimit)limitCurve(dlcurv);//skaliert die Ausgabe auf Fenstergröße
}

KS
debug110 Auf diesen Beitrag antworten »
RE: Messpunkte in Gleichung umwandeln
Auch danke für diesen Beitrag.
Wie ist eigentlich die Herangehensweise um eine derart komplexe Gleichung zu finden?
KS
mYthos Auf diesen Beitrag antworten »

Zitat:
Original von mYthos
Ich würde gerne wissen, wie gut deine Kurve "fittet". Hast du zufällig das Bestimmtheitsmaß (R² bzw. Korrel)?

p4 hat 0,9975

mY+

Diese Frage war an Ulrich Ruhnau gerichtet Augenzwinkern
Ulrich Ruhnau Auf diesen Beitrag antworten »

Zitat:
Original von mYthos
[Ich würde gerne wissen, wie gut deine Kurve "fittet". Hast du zufällig das Bestimmtheitsmaß (R² bzw. Korrel)?

Ich berechne zwischen den Messwerten und den Modellwerten ein .
Ulrich Ruhnau Auf diesen Beitrag antworten »

Zitat:
Original von debug110
double deuler = 2.7182818284590452353602874713527;
dlcurv[x] = pow(deuler, dexp);

So etwas geht auch besser. Statt pow kannst Du exp benutzen. Außerdem ist mir nicht klar, was Du da eigentlich machst.

Was meinen Fit betrifft, könnte ich den Matlab-Quellcode hier angeben. Falls Du ihn in C++ umsetzen wolltest, brauchst du zusätzlich die Singulärwertzerlegung.
mYthos Auf diesen Beitrag antworten »

Jene Funktionen, die der Messreihe am Nächsten kommen, sind die Polynome ab dem Grad 4, das rationale Modell von Ulrich und letztendlich auch die logistische Funktion.
Wobei sich zwischen ihnen Stärken und Schwächen hinsichtlich der Abweichungen am Anfang und Ende der Reihe zeigen.
Alle 3 Typen haben ein sehr gutes Bestimmtheitsmaß (r², das Quadrat des Korrelationskoeffizienten), es liegt bei allen rund um die 0,9961 bis 0,9974

[attach]52303[/attach]
Excel, Methode der kleinsten Summe der Fehlerquadrate (Differenzenquadrate), mit dem Solver minimiert.

Trotz der verhältnismäßig hohen Abweichungen im Bereich von 0 < x < 40 gefällt die logistische Funktion am Besten, denn sie ist überall sonst den realen Werten sehr nahe.
Das rationale Modell gleicht diesen Nachteil im unteren Bereich aus, zeigt aber am oberen Ende anstatt eines asymptotischen ein Extremwertverhalten.
Ein effizientes Vorgehen ist es, die Kurve eben aus diesem Grund abschnittsweise zu modellieren, also im unteren Bereich rational und ab 40-50 logistisch.

-------------

Übrigens, CurveExpert berechnet diese Funktionen exakt gleich wie Excel. Die Anwendung ist sehr komfortabel, denn man kann die einzelnen, bereits zahlreich eingebauten Kurven sofort direkt - live! - vergleichen.
Die Ergebnisse sind sehr detailliert, sie enthalten neben der Graphen auch die Fehlerwerte, Standardabweichung und Korrelationsmaße.
Die heruntergeladene Installationsdatei (ver 2.2.0) beinhaltet absolut KEINEN Virus, der Alarm entspricht nicht den Tatsachen.

[attach]52305[/attach][attach]52306[/attach]

mY+
debug110 Auf diesen Beitrag antworten »

Ich habe mit
f(x) = 9.82*x^4 + 9.74*x°3
im Wertebereich -0.72 bis 0.12
eine recht brauchbare Annäherung gefunden.

Der Hinweis Polynome war hilfreich, danke noch einmal
KS
mYthos Auf diesen Beitrag antworten »

Da komme ich jetzt nicht mehr mit. verwirrt
Entweder du hast eine überhaupt falsche Funktion geliefert, die hier nicht hingehört oder es ist irgendwo mit den Koeffizienten ein Schreibfehler passiert.
Jedenfalls stellt die Funktion in keiner Weise eine geeignete Approximation dar, auch nicht nur im Wertebereich von -0.72 bis 0.12, der übrigens recht klein ist.
Das sind gerade mal 36 Messpunkte. Woher kommen übrigens die Minuswerte?

Das Polynom 4. Ordnung für die gesamte Messreihe habe ich dir bereits in meinem 3. Beitrag (18.12./18:56 h) angegeben. Jenes nur für die ersten 36 Messpunkte lautet - leicht abgeändert:


(R² = 0.9998)

Anmerkung:
Bei der Iteration sollten die Anfangsparameter bereits möglichst genau geschätzt eingegeben werden, andernfalls konvergiert das Verfahren nicht oder - was noch unangenehmer ist - endet mit völlig falschen Werten.

mY+
mYthos Auf diesen Beitrag antworten »
Anderer Ansatz und Fehler
Das, was du offensichtlich gemacht hast, ist, ein Polynom 4.O. zu finden, das die Messwerte auf sich selbst abbildet.

[attach]52317[/attach]

Selbst dann hast du dort das negative Vorzeichen vor 9,82 vergessen.
Wozu soll das gut sein? Wodurch - bei welcher Messung - sind diese Werte entstanden und was willst du damit ereichen?

Eine bessere Näherung (nur für den hypothetischen Fall hier) wäre a= -12.49 und b = 10.62. Damit würden dann auch nur etwa 145 Messwerte erfasst.

Deine Messreihe besteht aus zwei Spalten und zwischen DIESEN soll der Zusammenhang gefunden werden.
In der ersten Spalte stehen die Zahlen von 0 - 399, diese sind in die Rechnung einzubeziehen.

mY+
debug110 Auf diesen Beitrag antworten »

Die Funktion ist richtig angegeben. Ich hatte den Graphen horizontal so verschoben, daß eine möglichts große Übereinstimmung mit den Messungen entstand.
Dies war im Wertebereich von -0,72 bis 0,12.
debug110 Auf diesen Beitrag antworten »

>s: 0,0213

Ich habe Deinen Ansatz verwendet und eine Routine geschrieben, welche alle vier Variablen Deiner Gleichung verändert und das jeweils bessere Ergbnis festhält (s.u.).

Dabei habe ich erhalten:
Summe der Beträge Messung - Kurve: 5.1891219
5,1891219 / 400 = 0,01297280475 wäre mein s

Die .txt Datei im Anhang enthält in der zweiten Spalte die Messwerte und in der dritten die ermittelte Kurve.

Ich möchte nun an meinem Prototypen testen (1.KW 2021) ob die ermittelte Kurve tatsächlich erfolgreich verwendet werden kann und melde mich dann.

>Was meinen Fit betrifft, könnte ich den Matlab-Quellcode hier angeben.
Wäre es damit möglich eine geeignete Basisfunktion zu erhalten, die man mit Koeffizienten füttert und sich so herantastet?

KS




//Beste Koeffizienten
231.12949921875 //double dfz_x
521.84615000000 //double dfz_lin
416.18761093750 //double dfn_x
103172.99669453 //double dfn_lin





void Graphen::poly2(double p2[400], double dfz_x, double dfz_lin, double dfn_x, double dfn_lin)
{
double dn;
for(int x = 0; x < 400; x++)
{
p2[x] = dfz_x * x;
p2[x] += dfz_lin;
dn = x*x;
dn -= dfn_x*x;
dn += dfn_lin;
p2[x] /= dn;
}
}
mYthos Auf diesen Beitrag antworten »

Ich kann bestätigen, dass deine Kurve (gebr. rat. Funktion) die derzeit beste ist.
Mit meiner quadratischen Regression (in Excel/Solver - Minimum der Summe der Differenzenquadrate) sind die Koeffizienten bestenfalls:

230.8847803
522.0109805
-417.5725212
103172.9876

Bei mir ist die minimale Summe der Abweichungsquadrate 0.1064, mit deinen Koeffizienten allerdings 0.0046, also besser!
Möglicherweise könnte man beim Solver noch herumschrauben, das habe ich aber jetzt nicht mehr versucht.

mY+
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »