Hallo zusammen,
ich bin gerade am verweifeln, beim Versuch Sensordaten zu nullieren.
Bei einem Abstandssensor muss ich, unabhängig vom Abstand in der x-Achse
(norm: x=31000) in y immer den selben Wert angezeigt bekommen.
In der Zeichnung anbei habe ich das skizziert, d.h. in der oberesten
Kurve soll unabhängig von x immer der Wert von y=31000 ausgegeben
werden,also ca.0,9.
Ich würde gerne über die Steigung den y-Wert einfach ausgleichen durch
einfache lineare Addition, aber ich bekomme es nicht raus, wie man die
Steigung in jeden Punkt aus den Daten auslesen kann und mathematisch
beschreibt. Steh da leider gerade leider auf dem Schlauch.
Es muss doch so funktionieren, weil ich es per Hand auch in etwa
einzeichnen könnte ;-)
Vielleicht habt ihr ja einen Tipp?
Vielen Dank schon mal,
Michael
Sollte es sich um Geraden handeln, die sich alle in einem gemeinsamen
Ursprungspunkt treffen, musst du zunächst diesen Ursprungspunkt x0|y0
ermitteln.
Von diesem Punkt ausgehend kannst du dann zu jedem x|y Paar auf den
y-Wert zu x=31000 schließen
y = y0 + (31000 - x0) * ((y-y0)/(x-x0))
Sehr unklare Aufgabenstellung bzw. -Formulierung.
Bitte beim nächsten Mal mehr Mühe geben.
Ich habe es so verstanden: du suchst die Gleichung der Korrekturgeraden,
die man zur Originalgeraden addieren muss, um auf eine konstante
Funktion y=0,9 bzw. y=f(31000) zu kommen.
Die Korrekturfunktion yk=ak+bk*x hat die negative Steigung der
Originalgeraden. Und der Offset ak muss so gewählt werden, dass der
Schnittpunkt bei x=31000 / y=0,9 liegt.
Die Koeffizienten der Trendlinienformel werden bei Excel mit den
Standardeinstellungen nur auf 5 Stellen (z.B. 7e-06) ausgegeben und ist
deswegen ungenau. Rechtsklick auf die Formel | Trendlinie formatieren
und dann entweder:
"Zahl" auswählen mit höherer Stellenzahl oder
"Text", dann wird die Stellenzahl automatisch angepasst.
Vorn N. schrieb:> Sehr unklare Aufgabenstellung bzw. -Formulierung.> Bitte beim nächsten Mal mehr Mühe geben.>> Ich habe es so verstanden: du suchst die Gleichung der Korrekturgeraden,> die man zur Originalgeraden addieren muss, um auf eine konstante> Funktion y=0,9 bzw. y=f(31000) zu kommen.> Die Korrekturfunktion yk=ak+bk*x hat die negative Steigung der> Originalgeraden. Und der Offset ak muss so gewählt werden, dass der> Schnittpunkt bei x=31000 / y=0,9 liegt.
Ja genau, das ist mein Ansinnen. Danke für die klarere Formulierung.
Joe F. schrieb:> Sollte es sich um Geraden handeln, die sich alle in einem gemeinsamen> Ursprungspunkt treffen, musst du zunächst diesen Ursprungspunkt x0|y0> ermitteln.> Von diesem Punkt ausgehend kannst du dann zu jedem x|y Paar auf den> y-Wert zu x=31000 schließen> y = y0 + (31000 - x0) * ((y-y0)/(x-x0))
Die geraden haben leider keinen gemeinsamen Ursprung.
Korrektur:
Und der Offset ak muss so gewählt werden, dass der Schnittpunkt bei
x=31000 / y=0,9 liegt.
Und der Offset ak muss so gewählt werden, dass der Schnittpunkt mit der
x-Achse bei x=31000 / y=0,0 liegt.
Es geht tatsächlich so, wie Joe es beschrieb:
Für die blaue Linie lautet die Korrekturgleichung
1
y = (0,382262-0,258359)/(31000-13100)*31000 - (0,382262-0,258359)/(31000-13100)*x
2
y = (0,382262-0,258359)/(31000-13100)*(31000-x) (vgl. Joe)
3
y = 0,214581 - 6,92196e-6*x
Ein kleines Problem ist allerdings, dass die Steigung im ersten
Abschnitt nicht genau gleich der Steigung im zweiten Abschnitt ist.
Ich habe die mittlere Steigung der gesamten Geraden verwendet.
Ggf. Fallunterscheidung, ob 1. oder 2. Abschnitt.
Vorn N. schrieb:> Es geht tatsächlich so, wie Joe es beschrieb:> Für die blaue Linie lautet die Korrekturgleichung>
1
> y = (0,382262-0,258359)/(31000-13100)*31000 -
2
> (0,382262-0,258359)/(31000-13100)*x
3
> y = (0,382262-0,258359)/(31000-13100)*(31000-x) (vgl. Joe)
4
> y = 0,214581 - 6,92196e-6*x
5
>
> Ein kleines Problem ist allerdings, dass die Steigung im ersten> Abschnitt nicht genau gleich der Steigung im zweiten Abschnitt ist.> Ich habe die mittlere Steigung der gesamten Geraden verwendet.>> Ggf. Fallunterscheidung, ob 1. oder 2. Abschnitt.
Danke für deine Antwort. Es geht schon so, wie du es dargestellt hast,
nur leider habe ich die Sensordaten nicht so wie hier geplottet, sondern
ich habe habe einen Sensorwert als Punkt, der irgendwo im Diagramm
verortet ist. An dem Ort bräuchte ich dann die Steigung der
Ausgleichsgeraden. Delta x habe ich ja durch 31000-x, nur das Delta y
habe ich nicht, da den y-Wert bei 31000 für die Kurve nicht habe.
Michael F. schrieb:> Die geraden haben leider keinen gemeinsamen Ursprung.
Auch nicht mit etwas "Spielraum" (sieht graphisch so aus)?
Falls nicht hast du ein Problem, denn du kannst eine einzelne x|y
Koordinate nur dann einer der Geraden zuordnen, wenn ein 2. Punkt auf
der selben Geraden bekannt ist.
Joe F. schrieb:> Michael F. schrieb:>> Die geraden haben leider keinen gemeinsamen Ursprung.>> Auch nicht mit etwas "Spielraum" (sieht graphisch so aus)?> Falls nicht hast du ein Problem, denn du kannst eine einzelne x|y> Koordinate nur einer der Geraden zuordnen, wenn ein 2. Punkt auf der> selben Geraden bekannt ist.
Ja, das fürchte ich auch, dass die Gesetzte der Mathematik mir da einen
Strich durch die Rechnung machen.
Michael F. schrieb:> dass die Gesetzte der Mathematik mir da einen> Strich durch die Rechnung machen
nennt sich "Gleichung mit zu vielen Unbekannten".
Aber wie gesagt, eigentlich sieht es schon so aus, als ob sich die
Geraden irgendwo weit links aussen treffen...
Wo kommen die Daten denn her (Anwendungsfall)?
Dann musst du dir einen kleinen Memory (Array) anlegen, in dem Du ein
paar Werte (Stützstellen) speicherst und daraus die Steigungen
errechnest, ggf. mit Interpolation und Fallunterscheidung.
Wenn du mit einem Fehler von max. 0,32% für das Ergebnis leben kannst
ist folgende Funktion für deine drei Beispielgeraden passend:
y_31000 = 0,329084662 + (31000 + 71880) * (y - 0,329084662) / (x +
71880)
Der zur Hilfe genommene (gemittelte) Schnittpunkt der 3 Geraden liegt
dabei bei (-71880,0 | -0,329084662)
Joe F. schrieb:> Wenn du mit einem Fehler von max. 0,32% für das Ergebnis leben> kannst> ist folgende Funktion für deine drei Beispielgeraden passend:>> y_31000 = 0,329084662 + (31000 + 71880) * (y - 0,329084662) / (x +> 71880)>> Der zur Hilfe genommene (gemittelte) Schnittpunkt der 3 Geraden liegt> dabei bei (-71880,0 | -0,329084662)
Vielen dank für deine Berechnung. Mit welchem Programm hast du diesen
Schnittpunkt errechnet? Ich habe leider nur Excel zur Verfügung und
müsste bei neuen Daten das ja selbst errechnen...
Michael F. schrieb:> Mit welchem Programm hast du diesen> Schnittpunkt errechnet?
Mit einer Tabellenkalkulation.
Du musst halt über 2 (möglichst weit auseinanderliegenden Punkten) die
Steigung (a) und den y-Wert bei x=0 (y0) ermitteln, um die
Geradengleichung aufzustellen
y = y0 + a * x
Dann nimmst du jeweils 2 Gleichungen und setzt sie gleich, um den
Schnittpunkt zu ermitteln
y0_a + a_a * x = y0_b + a_b * x
Aufgelöst nach x ergibt das die x-Koordinate des Schnittpunktes
x = (y0_b - y0_a) / (a_a - a_b)
x des Schnittpunktes setzt du dann in eine der Geradengleichungen ein
und erhältst y des Schnittpunktes.
Das machst du für mehrere Kombinationen von Geraden und mittelst dann
die Koordinaten des Schnittpunktes.
Michael F. schrieb:> und> müsste bei neuen Daten das ja selbst errechnen...
Solange die neuen Daten zu den 3 Beispiel-Geraden passen (ähnlicher
Schnittpunkt) musst du an der Formel eigentlich nichts ändern.
Ich habe dir hier mal beispielshalber eine 4. Gerade dazu fantasiert.
Messwert wäre bei x=20000 y=0,6
Über die Funktion
y_31000 = 0,329084662 + (31000 + 71880) * (y - 0,329084662) / (x +
71880)
erhältst du auf dieser Geraden dann für x=31000 den y-Wert 0,711
(schwarze Linie)
Joe F. schrieb:> Ich habe dir hier mal beispielshalber eine 4. Gerade dazu fantasiert.>> Messwert wäre bei x=20000 y=0,6> Über die Funktion> y_31000 = 0,329084662 + (31000 + 71880) * (y - 0,329084662) / (x +> 71880)>> erhältst du auf dieser Geraden dann für x=31000 den y-Wert 0,711> (schwarze Linie)
Die von dir errechneten Werte bzgl. Koordinatennullpunkt haben einen
fast perfekten Ausgleich der Sensordaten übergeben, viele Dank nochmal.
Nun habe ich nochmal veränderte Sensordaten und wollte in Excel den
Schnittpunkt selbst errechen, habe aber erstmal die gleichen Zahleninput
verwendet.
Leider komme ich auf einen anderen Schnittpunkt, nämlich 70980 (x) und
1,2096 (y). Welches Tabellenkalkulation hast denn du dafür verwendet?
Ist finde das sehr eigenartig, bei dem lineraren Gleichugnssystem sollte
es doch eingentlich keine so großen Unterschiede geben, oder?
Joe F. schrieb:> x des Schnittpunktes setzt du dann in eine der Geradengleichungen ein> und erhältst y des Schnittpunktes.
Hier kommen, je nachdem in welcher der beiden Gleichungen den
Schnittpunkt eingebe, verschiedene Werte raus. Wie kann das denn sein?
Michael F. schrieb:> Wie kann das denn sein?
Dann ist dir beim Gleichsetzen und Auflösen der Geradengleichungen nach
x ein Fehler passiert.
Zeige mal den Rechenweg.
Joe F. schrieb:> Michael F. schrieb:>> Wie kann das denn sein?>> Dann ist dir beim Gleichsetzen und Auflösen der Geradengleichungen nach> x ein Fehler passiert.> Zeige mal den Rechenweg.
Ich habs genau so gemacht, wie du oben beschrieben. Im Bild die
einzelnen Steigungen und Achsenabschnitte meiner 3 Kurven (1,2,4.
Ich kann das so nicht nachvollziehen, aber es muss ein Fehler in deiner
Berechnung sein.
Der Schnittpunkt muss sowohl vom x als auch vom y Wert her negativ sein,
zumindest, wenn es sich um deine ursprünglich genannten Daten handelt.
Der Schnittpunkt S einer Gerade A und B errechnet sich so:
x_S = (y0_A - y0_B) / (s_B - s_A)
y0_A und y0_B sind deine "Achsenabschnitte" (Schnittpunkt der Gerade mit
y-Achse), s_A und s_B sind die Steigungen der Geraden A und B.
Wenn du dann x_S in eine der beiden Geradegleichungen
y_A = y0_A + s_A * x_S
oder
y_B = y0_B + s_B * x_S
einsetzt, muss das gleiche für y_A und y_B herauskommen (= y_S)
Hallo, sorry, ja war natürlich mein Fehler. Habe bei der Errechnung des
x-Werts des Schnittpunkts im Nenner das falsche von einander
subtrahiert, entschuldige bitte.