Forum: Analoge Elektronik und Schaltungstechnik Funktion in N lineare Abschnitte unterteilen


von Max (Gast)


Angehängte Dateien:

Lesenswert?

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

von Flo (Gast)


Lesenswert?

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.

von Lexington (Gast)


Lesenswert?

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.

von Lars Schmitt (Gast)


Lesenswert?

Octave (frei zugängliches Matlab) bietet Polyfit oder Splinefit an. Oder 
welche Plattform möchtest du benutzen?

von Lexington (Gast)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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.

von Lexington (Gast)


Lesenswert?

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.

von Lexington (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.