Hallo zusammen, ich habe ein kleines Problem und stecke fest. Mein Ziel ist es eine Funktion zu implementieren, welche eine Funktion (z.B. im Bild rot) in N lineare Stücke unterteilt. Klar, optisch würde man die Punkte 0,5, 12, 13.5, 25,... als Stützstellen wählen. Würde man dazwischen linear interpolieren hätte man eine sehr geringe Abweichung zur Funktion. Nun meine Frage: Gibt es einen Algorithmus der mir die optimalen Stützstellen berechnet (am besten kann ich auch noch auswählen wie viele Stützstellen ich gerne hätte) oder irgendwas das dieses Problem/diese Aufgabe mathematisch beschreibt, sodass ich selbst einen Algorithmus entwerfen kann? Hintergrund ist der, dass ich meinem Regler nur Wertepaare übergeben kann, zwischen denen er linear interpoliert und sich die Wertepaare (also Kurve) hierfür mit der Zeit ändert. Ist auch dabei hilfreicher eine Funktionsgleichung zu haben reichen die Wertepaare aus dem Plot hierbei aus? Ich hoffe ihr versteht was ich meine und könnt mir auf die Sprünge helfen Liebe Grüße, Max
Hast du die Funktion zur Verfügung? Sonst würd ich sagen schau dir die Änderungsrate der Steigung (2te Ableitung) der Funktion an. Wenn sich die Steigung schnell ändert, kleinere Diskretisierungsabstände und bei geringer Änderung bzw. konstanter Steigung größere Abstände.
Eine Frage wäre noch, ob die Stützstellen äquidistant sein müssen oder nicht. Eine fertige Implementierung dafür kenne ich leider nicht. Aber in beiden Fällen wäre das ein Minimierungsproblem dahingehend, dass die Summe der Abweichungen von lineare Regressionen zwischen Stützpunkten minimiert werden soll. Was die Wahl der Stützpunkte betrifft, würde ich spontan, beginnend mit den Anfangs- und Endpunkten jeweils die Mitte wählen und diesen Punkt dann verschieben bis die Summe minimal ist. Dann die beiden neuen Bereiche wieder so behandeln bis entweder die Anzahl der maximalen Stützpunkte erreicht ist oder die Summe der Abweichungen eine Schwelle unterschreitet. Das kann natürlich auch fehlschlagen.
Octave (frei zugängliches Matlab) bietet Polyfit oder Splinefit an. Oder welche Plattform möchtest du benutzen?
Lars Schmitt schrieb: > Octave (frei zugängliches Matlab) bietet Polyfit oder Splinefit an. Oder > welche Plattform möchtest du benutzen? Wenn ich polyfit und Splinefit recht verstehe ergibt das keine lineare Funktion. Im Falle von polyfit lässt sich der Grad zwar auf 1 setzen, aber dann bleibt das Problem der Wahl der Bereiche. Aber da wird sich was draus machen lassen denke ich. Ein Problem sind noch die lokalen Minima bei meinem Ansatz.
Hallo zusammen, danke für die vielen Antworten! Ich versuche mal alle Fragen zu beantworten @Flo Eine Funktion habe ich nicht zur Verfügung, werde aber versuchen die Arbeitspunkte mit einer Funktion Anzunähern. Die Funktion sollte dabei folgende Kriterien erfüllen: Start bei (0|0), dann Wendepunkt, dann Hochpunkt, nächster Wendepunkt, konvergiert gegen 0 für t=inf. Eine Funktion die diese Kriterien erfüllt und genug Freiheitsgrade bietet um jeden dieser markanten Punkte zu verschieben (=>Stauchen, Strecken, usw.) habe ich noch nicht gefunden. Hätte jmd. einen guten Ansatz hierfür? @Lexington Nein, die Stützstellen müssen nicht äquidistant sein. Dein Ansatz ist gut, führt aber nicht zum optimalen Ergebnis wenn ich durch die Halbierung ein evtl. bereits lineares Stück durchschneiden. Deshalb würde ich lieber versuchen die Kurve mit einer Funktion zur beschreiben und irgendwie daraus die besten Stützpunkte zu berechnen. @Flo, Lexington Ich nutze MATLAB und habe auch die optimization toolbox welche das Curve-Fitting-Tool bietet. Jedoch habe ich hier nicht die Möglichkeit die Anzahl der Stützstellen vorzugeben. Dieses Tool nutze ich nur, um die Koeffizienten für die noch unbekannte Funktion aus den Arbeitspunkten zu bestimmen. Ich freue mich auf eure Antworten Lg
Ich würde um die zu implementierende Funktion einen Toleranzschlauch legen und dann mit Geradenstücken immer wechselseitig daran anstoßen. D.h. man gibt den Fehler vor und daraus ergibt sich die nötige Anzahl der Stützstellen. Könnte man z.B. als Excel-Sheet machen.
Max schrieb: > @Lexington > Nein, die Stützstellen müssen nicht äquidistant sein. Dein Ansatz ist > gut, führt aber nicht zum optimalen Ergebnis wenn ich durch die > Halbierung ein evtl. bereits lineares Stück durchschneiden. Da stimme ich Dir zu, aber wer zwingt Dich denn dazu, einen schon linearen Abschnitt, noch einmal zu teilen? Lass es doch einfach. > Deshalb > würde ich lieber versuchen die Kurve mit einer Funktion zur beschreiben > und irgendwie daraus die besten Stützpunkte zu berechnen. Führe doch lieber eine Abbruchbedingung ein. Das ist einfacher. Ich will mal folgendes dazu bemerken: 1. Die einfachste Lösung der Approximation einer arbiträren Wertefolge ist die Abschnitte einfach zwischen den Stützstellen (ein Arbeitspunkt ist etwas völlig anderes) zu wählen. 1.a. Das verfälscht einen insgesamt nicht-linearen Zusammenhang. 1.b. Eine Modellfunktion aber haben wir nicht. Das wäre das nächst Bessere um die Approximation zu verbessern. 2. Ausgehend von 1. willst Du aber lieber längere lineare Abschnitte. 2.a. Nimmst Du nun den nächsten Stützpunkt dazu, dann verändert sich das Bestimmtheitsmaß oder es tut es nicht. Im letzteren Fall, ist es gut. Im ersteren, wird das Bestimmtheitsmaß schlechter. (Besser kann es nicht werden, denn zwischen zwei nebeneinanderliegenden Stützstellen und unter der Voraussetzung, dass die nicht gemessenen Zwischenwerte eine linearen Zusammenhang haben, kann es nicht "linearer" werden). 3. Eine andere Betrachtungsweise geht von der zweifachen, numerischen Differentiation aus. Die erste Ableitung wird in linearen Abschnitten konstant sein (aber nicht notwendigerweise 0). Die zweite wird dort dann 0 sein. 3.a. Es ergeben sich also Abschnitte in denen die zweite Ableitung 0 ist - dort ist die Funktion schon linear und andere in denen das nicht der Fall ist. 3.b. In diesen nicht-linearen Abschnitten hast Du nur die Wahl, eine lineare Approximation zu wählen deren Abweichung einen bestimmten Mindestwert hat, oder den Abschnitt noch einmal zu unterteilen. Im Extremfall bis die Abschnitte mit den Stützstellen übereinstimmen (das ist ja, wie unter 1. beschrieben zwingend linear [wenn man von der linearität des zugrundeliegenden Modells ausgeht]). 4. Es mag zwar unter bestimmten Voraussetzungen wichtig sein, dass man eine Funktion erhält, die etwa einem gegebenen x-Wert den nächst grösseren zuordnet, für den die lineare Approximation noch eine Null-Abweichung ergibt (oder eben eine Abweichung unterhalb einer Schwelle), aber das ist nur eine Verfahrensfrage bei der man sich fragen sollte, ob es den Aufwand wert ist. Mal abgesehen davon, wie das denn gehen sollte. Ob das nun vielleicht auch eine Funktion ist, die einem Vektor einen anderen Vektor zuordnet etc. ist für meine Begriffe nur eine Detailfrage. Das Hauptproblem an sich scheint mir zu sein, dass kein impliziter Zusammenhang zwischen den Stützstellen und der Linearität ihrer angrenzenden Abschnitte besteht. Immer vorausgesetzt, es gibt keine Modellfunktion. Selbst wenn es eine Modellfunktion gäbe, dann stellte sich immer noch das Problem wiederum einen Operator zu definieren, der aus der Modellfunktion eine Funktion macht, die Stützstellen auswählt. Vermutlich ist das möglich, aber sicher ist das nicht trivial (oder es liegt jenseits meiner Fähigkeiten). Ich mag mich ja täuschen, aber dann scheint es mir wesentlich einfacher, so ein Verfahren, wie ich es vorschlug anzuwenden. Das Du dabei mal selbst ein wenig denken musst, weil mein Kochrezept mal eine Abbruchbedingung auslässt, liegt daran, dass ich das hier freiwillig und kostenlos mache - es also nicht zu Ende ausführe. Das erwarte ich von Dir. Ansonsten mache ich Dir gerne ein kostenpflichtiges Angebot.
Ich fühle mich jedenfalls dadurch bestätigt, dass Peter etwas den Grundlagen nach Äquivalentes wie ich vorschlägt - falls ich ihn richtig verstehe. Der Toleranzschlauch ist nur eine andere (soweit ich das gerade überblicke, nicht vollständige) Darstellung des minimal nötigen Bestimmtheitsmaßes. Es ergibt sich eine Schar von Geraden für jeden möglichen Abschnitt, der innerhalb des Toleranzschlauches liegt. Das Problem ist nun, einen Abschnitt und darin eine der Geraden auszuwählen - und dazu noch, dabei eine stetige Gesamtfunktion zu erhalten. Ich komme gerade nicht darauf, wie Peter sich das im Detail vorstellt, aber vielleicht erklärt er das ja noch, wenn er Lust dazu hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.