Forum: Mikrocontroller und Digitale Elektronik Algorithmus gesucht


von Polynom (Gast)


Lesenswert?

Problemstellung
===============
Angenommen man hat eine Funktion

y = f(x)

Beispielsweise sei diese Funktion zur Linearisierung eines Sensorsignals 
x, wobei y das linearisierte Sensorsignal ist. Man betrachtet das 
Interval x in [a, z] (a <= x <= z). In diesem Intervall möchte man eine 
Näherung der Funktion durch lineare Interpolation zwischen Stützstellen 
finden. Diese interpolierte Funktion sei f'.

Man kann davon ausgehen, dass die Funktion hinreichend "wild" ist, 
sodass es nicht möglich ist ein passendes Polynom oder einen anderen 
funktionalen Zusammenhang zu bestimmen.

Der Speicher für Stützstellen ist begrenzt. Es gibt eine maximale Anzahl 
N an Stützstellen (ki), deren Lage auf x aber frei innerhalb von [a, z] 
verteilt werden kann. Das Ziel wäre natürlich die Stützstellen so zu 
legen, dass insgesamt der Fehler minimiert wird (also die Abweichung der 
ursprünglichen Funktion f und der interpolierten Funktion f'). Gesucht 
ist also ein (möglichst effizienter) Algorithmus, der die N Stützstellen 
innerhalb [a, z] so verteilt, dass der (integrale) Fehler zwischen f und 
f' minimal ist.


Ein erster Gedanke
==================

Man könnte zunächst an a und z eine Stützstelle (k0, k1) legen. Die 
nächste Stützstelle k2 könnte zwischen k0 und k1 eingebracht werden, 
sodass der Fehler minimal ist. Mit k2 kann der Fehler für den linken und 
rechten Bereich bestimmt werden. Im Bereich mit dem größten Fehler wird 
die nächste Stützstelle eingebracht. Ab hier wiederholt sich der 
Vorgang, indem jeweils in die verbleibende Bereiche mit dem größten 
Fehler Stützstellen eingebracht werden, bis alle N Stützstellen 
festgelegt sind.

Es scheint mir, dass ein solcher Ansatz aber nicht garantiert die beste 
Lösung finden wird. Gibt es überhaupt ein Verfahren, dass effizienter 
als NP ist und garantiert die beste Lösung findet?

von Jemand (Gast)


Lesenswert?

Das Problem kann man als Pathfinding-Problem sehen. Du suchst praktisch 
den nächsten optimalen Schritt mit den enstehenden Fehler, die 
Überschreitung der maximale Stützstellenanzahl und Schrittrichtung 
(Schritte z. B. nur nach rechts zulässig) als Kostenfunktion. Der 
A*-Algorithmus garantiert die optimale Lösung wenn die Heuristik die 
nötigen Kosten nicht Überschätzt, wird aber ineffizient wenn sie sie 
stark unterschätzt. (Eine gute Heuristikfunktion zu finden ist der 
schwierige Teil)

von Egon D. (Gast)


Lesenswert?

Polynom schrieb:

> Man kann davon ausgehen, dass die Funktion hinreichend
> "wild" ist, sodass es nicht möglich ist ein passendes
> Polynom oder einen anderen funktionalen Zusammenhang
> zu bestimmen.

Deine Fragestellung ist in sich widersprüchlich.

Einerseits setzt Du eine Funktion y = f(x) als gegeben
voraus; andererseits forderst Du, es solle unmöglich sein,
einen funktionalen Zusammenhang zu bestimmen.

Das geht so nicht.

von Theor (Gast)


Lesenswert?

Wie ist denn die Funktion f konkret definiert? Poste die Definition, wie 
immer sie aussehen mag, bitte.

von Polynom (Gast)


Lesenswert?

Egon D. schrieb:
> Deine Fragestellung ist in sich widersprüchlich.
>
> Einerseits setzt Du eine Funktion y = f(x) als gegeben
> voraus; andererseits forderst Du, es solle unmöglich sein,
> einen funktionalen Zusammenhang zu bestimmen.
>
> Das geht so nicht.

Im konkreten Fall ist f diskret und besteht also aus (sehr sehr vielen) 
Sampling Punkten. Ein funktionaler Zusammenhang zwischen diesen Punkten 
(z.B. Polynom n-ten Grades) besteht aber nicht.

Ich hätte es besser und einfacher so ausdrücken können: "für eine 
beliebige Funktion f"

von Polynom (Gast)


Lesenswert?

Jemand schrieb:
> Das Problem kann man als Pathfinding-Problem sehen. Du suchst
> praktisch
> den nächsten optimalen Schritt mit den enstehenden Fehler, die
> Überschreitung der maximale Stützstellenanzahl und Schrittrichtung
> (Schritte z. B. nur nach rechts zulässig) als Kostenfunktion. Der
> A*-Algorithmus garantiert die optimale Lösung wenn die Heuristik die
> nötigen Kosten nicht Überschätzt, wird aber ineffizient wenn sie sie
> stark unterschätzt. (Eine gute Heuristikfunktion zu finden ist der
> schwierige Teil)

Wenn ich es richtig verstehe, wäre aber das Problem, dass der 
Algorithmus keine Limitierung auf N Kanten hat. Er würde mir 
Kanten/Segmente quasi von a nach z ziehen und dabei "nur" den Fehler 
minimieren.

von Jemand (Gast)


Lesenswert?

Polynom schrieb:
> Jemand schrieb:
>> Das Problem kann man als Pathfinding-Problem sehen. Du suchst
>> praktisch
>> den nächsten optimalen Schritt mit den enstehenden Fehler, die
>> Überschreitung der maximale Stützstellenanzahl und Schrittrichtung
>> (Schritte z. B. nur nach rechts zulässig) als Kostenfunktion. Der
>> A*-Algorithmus garantiert die optimale Lösung wenn die Heuristik die
>> nötigen Kosten nicht Überschätzt, wird aber ineffizient wenn sie sie
>> stark unterschätzt. (Eine gute Heuristikfunktion zu finden ist der
>> schwierige Teil)
>
> Wenn ich es richtig verstehe, wäre aber das Problem, dass der
> Algorithmus keine Limitierung auf N Kanten hat. Er würde mir
> Kanten/Segmente quasi von a nach z ziehen und dabei "nur" den Fehler
> minimieren.

Deswegen muss das Teil der Kostenfunktion sein. Wenn das Einfügen einer 
>n-ten Stützstelle unbegrenzt hohe Kosten hat (und sonst null), wird 
eine andere Lösung gesucht. Wenn man das Einfügen zu weniger 
Stützstellen sanktioniert, könnte man sogar eine Mindestanzahl 
erzwingen.

von Polynom (Gast)


Lesenswert?

Die Problemstellung erscheint mir verwandt zum Rucksackproblem:

https://de.wikipedia.org/wiki/Rucksackproblem

von Theor (Gast)


Lesenswert?

Warum sollte es Deiner Meinung nach kein Polynom geben? Hat der 
funktionale Zusammenhang aus physikalischer Sicht Unstetigkeitsstellen?
Schau mal den Satz von Weyerstrass nach. Was ist das Modell von dem 
Sensor?

von A. S. (Gast)


Lesenswert?

Es ist beliebig sinnfrei, eine Abweichung von einer unterpolierten 
Funktion zu bewerten.

Perfekt ist, soviel Stützstellen wie Werte.

Je nachdem, wie viel du reduzieren musst, kannst du schauen, welche n 
Stellen sich fehlerarm zusammenfassen lassen.

Ein anderer Weg ist von unten, einen Maxi-Fehler festlegen und schauen, 
wie weit du kommst.

Für beliebige Funktionen ist das aber beliebig schlecht.

von Martin (Gast)


Lesenswert?

Wenn man die Anzahl N der Stützstellen als fix vorgibt, hat man ein 
N-dimensionales Optimierungsproblem. Zu jedem Stützstellen-Vektor (ki) 
gibt es eine Fehlersumme, die man minimieren will.

Eine mögliche Heuristik, die ich in der Vergangenheit für 
mehrdimensionale Optimierungen gebraucht habe, ist die particle swarm 
optimization.
https://en.wikipedia.org/wiki/Particle_swarm_optimization
Ob das hierfür funktioniert, sehe ich grade nicht. Ein Versuch wäre es 
wert. Im Netz finden sich diverse Implementierungen in Matlab oder 
Python, ich hatte vor längerer Zeit eine Matlab-Version aus dem file 
exchange verwendet.

von Polynom (Gast)


Lesenswert?

Theor schrieb:
> Warum sollte es Deiner Meinung nach kein Polynom geben? Hat der
> funktionale Zusammenhang aus physikalischer Sicht Unstetigkeitsstellen?
> Schau mal den Satz von Weyerstrass nach. Was ist das Modell von dem
> Sensor?

Weil mich das Problem aus rein algorithmischer Sicht für beliebige 
Funktionen interessiert.


A. S. schrieb:
> Es ist beliebig sinnfrei, eine Abweichung von einer unterpolierten
> Funktion zu bewerten.
>

(Meinst du interpoliert?) Wieso sollte das sinnfrei sein?

von Theor (Gast)


Lesenswert?

Polynom schrieb:
> Theor schrieb:
>> Warum sollte es Deiner Meinung nach kein Polynom geben? Hat der
>> funktionale Zusammenhang aus physikalischer Sicht Unstetigkeitsstellen?
>> Schau mal den Satz von Weyerstrass nach. Was ist das Modell von dem
>> Sensor?
>
> Weil mich das Problem aus rein algorithmischer Sicht für beliebige
> Funktionen interessiert.

Ah. Dann ist die Antwort auf Deine Frage: Nein. Es gibt kein Verfahren, 
dass effizienter als NP ist und garantiert die beste Lösung findet.

von Egon D. (Gast)


Lesenswert?

Polynom schrieb:

> Im konkreten Fall ist f diskret und besteht also aus
> (sehr sehr vielen) Sampling Punkten. Ein funktionaler
> Zusammenhang zwischen diesen Punkten (z.B. Polynom
> n-ten Grades) besteht aber nicht.
>
> Ich hätte es besser und einfacher so ausdrücken können:
> "für eine beliebige Funktion f"

Einfacher -- ja.
Besser -- nein.

Du siehst nämlich meinen Kritikpunkt immer noch nicht:
Du sprichst von einer Funktion, die keinen funktionalen
Zusammenhang beschreibt.
Das GEHT aber nicht -- von einem funktionalen Zusammenhang
spricht man nämlich genau dann, wenn eine Funktion die
Abhängigkeit der einen von der anderen Größe beschreibt.

Ein funktionaler Zusammenhang ist beispielsweise: "Y sei
0, wenn X rational ist, und 1, wenn X irrational ist."

von Alex G. (dragongamer)


Lesenswert?

Egon D. schrieb:
> Du siehst nämlich meinen Kritikpunkt immer noch nicht:
> Du sprichst von einer Funktion, die keinen funktionalen
> Zusammenhang beschreibt.
> Das GEHT aber nicht -- von einem funktionalen Zusammenhang
> spricht man nämlich genau dann, wenn eine Funktion die
> Abhängigkeit der einen von der anderen Größe beschreibt.
>
> Ein funktionaler Zusammenhang ist beispielsweise: "Y sei
> 0, wenn X rational ist, und 1, wenn X irrational ist."

Stell dir das praxisnah vor. Hinter der f(x) steht sowas wie:
return(data[x]);
Und der TE will nicht das ganze Array in sein Programm übernehmen.

Ist es mathematisch wirklich verboten eine Funktion auf Basis von 
diskreten Werten aufzubauen?


Zum Algorithmus:
Graphentheorie klingt mir auch nach der vielversprechendsten Methode.
Dass das auf das oben verlinkte Knappsack Problem hinausläuft ist nicht 
unwahrscheinlich, aber solche Probleme löst man gerne mit Pfadfindung.
Diese Algorithmen geben nicht die perfekte Lösung, aber meist eine 
ziemlich gute.

von Egon D. (Gast)


Lesenswert?

Alex G. schrieb:

> Ist es mathematisch wirklich verboten eine Funktion
> auf Basis von diskreten Werten aufzubauen?

Nein, überhaupt nicht.

Es ist aber mathematisch verboten, oben von der
Funktion y=f(x) zu sprechen und drei Zeilen weiter
anzumerken, dass es keinen funktionalen Zusammenhang
zwischen x und y geben soll -- denn die definierte
FUNKTION y = f(x) IST der funktionale Zusammenhang.

Das sind in sich widersprüchliche Aussagen, und die
sind lt. h. M. kein legitimer Bestandteil mathematischer
Theorien.

von Jemand (Gast)


Lesenswert?

Egon D. schrieb:
> Es ist aber mathematisch verboten, oben von der
> Funktion y=f(x) zu sprechen und drei Zeilen weiter
> anzumerken, dass es keinen funktionalen Zusammenhang
> zwischen x und y geben soll -- denn die definierte
> FUNKTION y = f(x) IST der funktionale Zusammenhang.

Polynom schrieb:
> oder einen *anderen*
> funktionalen Zusammenhang

von Polynom (Gast)


Lesenswert?

Egon D. schrieb:
> Alex G. schrieb:
>
>> Ist es mathematisch wirklich verboten eine Funktion
>> auf Basis von diskreten Werten aufzubauen?
>
> Nein, überhaupt nicht.
>
> Es ist aber mathematisch verboten, oben von der
> Funktion y=f(x) zu sprechen und drei Zeilen weiter
> anzumerken, dass es keinen funktionalen Zusammenhang
> zwischen x und y geben soll -- denn die definierte
> FUNKTION y = f(x) IST der funktionale Zusammenhang.
>
> Das sind in sich widersprüchliche Aussagen, und die
> sind lt. h. M. kein legitimer Bestandteil mathematischer
> Theorien.

Egon, bitte verstehe mich nicht falsch, aber von dir ist hier noch kein 
einziger weiterführender Gedanke im Sinne der eigentlichen Frage 
gekommen. Trotzdem hast du schon 3 Beiträge verfasst. Also, wenn es dir 
hilft, räume ich alles ein was du sagst, wenn wir es dann damit jetzt 
bitte abschließen können.

Viele andere konnten gute Gedanken beisteuern und die Problemstellung 
trotz der von mir induzierten Widrigkeiten ganz offenbar verstehen.

von Rainer V. (a_zip)


Lesenswert?

Also für mich ist es nicht möglich, die "wilde" Funktion in eine 
"bekannte" zu überführen! Neuronale Netzwerke (vielleicht) mal aussen 
vor, mit einer großen Menge an Randbedinungen kann es natürlich trotzdem 
gehen. Mehr Infos ??
Gruß Rainer

von Walter T. (nicolas)


Lesenswert?

Hast Du mal Beispieldaten? Eventuell könnte ein Variationsansatz 
funktionieren, bei dem das Integral minimiert wird. Nachteil: Es muß ein 
Gleichungssystem mit N+1 Unbekannten gelöst werden, und das eventuell in 
doppelter Genauigkeit, weil es nicht unbedingt gut konditioniert ist.

von Egon D. (Gast)


Lesenswert?

Polynom schrieb:
> Egon D. schrieb:
>> Alex G. schrieb:
>>
>>> Ist es mathematisch wirklich verboten eine Funktion
>>> auf Basis von diskreten Werten aufzubauen?
>>
>> Nein, überhaupt nicht.
>>
>> Es ist aber mathematisch verboten, oben von der
>> Funktion y=f(x) zu sprechen und drei Zeilen weiter
>> anzumerken, dass es keinen funktionalen Zusammenhang
>> zwischen x und y geben soll -- denn die definierte
>> FUNKTION y = f(x) IST der funktionale Zusammenhang.
>>
>> Das sind in sich widersprüchliche Aussagen, und die
>> sind lt. h. M. kein legitimer Bestandteil mathematischer
>> Theorien.
>
> Egon, bitte verstehe mich nicht falsch, aber von dir
> ist hier noch kein einziger weiterführender Gedanke
> im Sinne der eigentlichen Frage gekommen.

Nun ja, ich hatte gehofft, dass Du den Hinweis, dass Deine
Fragestellung in der vorliegenden Form nicht sinnvoll ist,
als weiterführend ansehen würdest.


> Trotzdem hast du schon 3 Beiträge verfasst. Also, wenn
> es dir hilft, räume ich alles ein was du sagst, wenn
> wir es dann damit jetzt bitte abschließen können.

Nein, ist nicht notwendig. Ich habe dich schon verstanden :)


> Viele andere konnten gute Gedanken beisteuern und die
> Problemstellung trotz der von mir induzierten Widrigkeiten
> ganz offenbar verstehen.

Ich zitiere Altmeister Goethe: "... denn ein vollkommner
Widerspruch / bleibt gleich geheimnisvoll für Kluge wie
für Toren."

Eine in sich widersprüchliche Fragestellung hat den großen
Vorteil, dass jeder das darunter verstehen kann, was er
darunter verstehen will.

In diesem Sinne: Viel Spaß und einen angenehmen Abend.

von Eric B. (beric)


Lesenswert?

Polynom schrieb:
> Egon, bitte verstehe mich nicht falsch, aber von dir ist hier noch kein
> einziger weiterführender Gedanke im Sinne der eigentlichen Frage
> gekommen.

Das siehst du falsch. Von Egon sind genau die Beiträge gekommen die man 
von jemanden mit mathematischen Wissen erwarten würde: nämlich die 
kritische Hinterfragung der eigentlichen Frage und Offenlegung der 
Widersprüchen.

von Axel S. (a-za-z0-9)


Lesenswert?

Polynom schrieb:
> Man könnte zunächst an a und z eine Stützstelle (k0, k1) legen.

Das ist schon das erste Problem:

Welche Stützstellen y0 = f(k0) und y1 = f(k1) soll man wählen? Selbst 
wenn man Meßpunkte an (k0, k1) hätte - wäre es sinnvoll, diese Punkte zu 
nehmen? IMHO nein. Denn wie jede Messung sind auch diese Punkte 
fehlerbehaftet. Der aus meiner Sicht logische Weg wäre, eine lineare 
Regression über alle Meßpunkte zu machen. Die Stützstellen sind dann die 
y-Werte der Regressionsgeraden an x = (k0, k1)

> nächste Stützstelle k2 könnte zwischen k0 und k1 eingebracht werden,
> sodass der Fehler minimal ist.

Und schon die nächste Frage: welcher Fehler? Die Regressionsgerade aus 
dem ersten Schritt minimiert die Summe der quadratischen Abweichungen. 
Das wäre ein Fehlermaß. Man könnte aber auch den maximalen Abstand 
zwischen Meßwerten und der Geraden nehmen. Das wäre ein weiteres 
Fehlermaß. Je nach Anwendung könnte eines geeigneter sein als das 
andere.

Aber egal erstmal. Wie geht es weiter?

Vorschlag: wir nehmen den Median der Meßwerte (den mittelsten Punkt) und 
betrachen einmal alle Punkte von links bis zum Median. Und einmal alle 
Punkte vom Median aus nach rechts (der Medianpunkt ist also in beiden 
Mengen).

Für beide Mengen können wir jeweils wieder eine lineare Regression 
durchführen. Wir erhalten zwei Geraden, die sich sehr wahrscheinlich [1] 
schneiden. Und zwar in der Nähe des Medianpunktes. Das ist unsere dritte 
Stützstelle. Die beiden Stützstellen bei (y0, y1) dürften sich übrigens 
auch gerade geändert haben.

Auf diese Weise kann man sukzessive neue Stützstellen einfügen. Wenn man 
2^N+1 Meßwerte hat, kann man N-mal die Intervalle halbieren. Vermutlich 
würde man eine Fehlergrenze festlegen wollen und sobald der Fehler der 
linearen Regression für ein Intervall unter diese Grenze fällt, würde 
man das Intervall nicht weiter halbieren.


[1] wenn die Regression für beide Halbintervalle Parallelen ausspucken 
sollte, dann nicht. Für praktische Fälle dürfte das irrelevant sein.

von Theor (Gast)


Lesenswert?

Ich denke, es ist notwendig die Klasse der Funktionen erst einmal 
einzugrenzen. Schon in dieser Hinsicht treten Widersprüche auf. Erst 
handelt es sich um Sensordaten, dann um "ALLE" denkbaren Funktionen. Was 
denn nun? Das Problem wird komplizierter und nicht einfacher wenn es 
generalisiert wird!

Dann wird nach einer "Linearisierung" gefragt obwohl der Kontext der 
Frage  "Approximation" nahelegt. Dazu fehlt aber das Systemmodell.

Polynome gehen angeblich nicht, obwohl das jeder Theorie widerspricht. 
(Jeder der schon mal in einem Test zu einer Zahlenfolge eine Gleichung 
finden sollte, könnte das wissen: Es gibt immer mindestens eine und 
[fast] immer mehrere Lösungen). Ungeklärt.
Wobei die Herkunft von Sensoren das (die Ablehnung eines Polynoms) in 
dem konkreten Fall (falls man sich nun darauf einigen kann) durchaus 
begründet erscheinen lässt (ein Polynom mag ja zwischen den Stützstellen 
extrem vom Modell abweichende Werte ergeben), anderseits aber für "ALLE" 
Funktionen (aus R resp. N oder auch C) durchaus möglich ist - nur halt 
keinen praktischen Zweck erfüllt.

Das alles (das allgemeine, nicht NP-schwere Verfahren für alle 
existierende Funktionen) ist der feuchte Traum eines mathematisch 
Halbgebildeten. Nichts weiter. Entsprechend grenzenlos und sinnlos ist 
die Diskussion.
(Man vergebe mir bitte die flapsige Ausdrucksweise. Ein persönlicher 
Angriff ist damit nicht beabsichtigt. Ich selbst wei0 zufällig halt 
etwas mehr genau auf diesen Punkt bezogen; bin auch kein Überflieger).

von Theor (Gast)


Lesenswert?

So. Und damit ich den TO nun nicht einfach mit leeren Händen dastehen 
lasse, meine Leseempfehlung für die Betrachtung des Problems als 
Linearisierung (was ich, wie gesagt, für eine sekundäre Option halte):

https://de.wikipedia.org/wiki/Linearisierung
und der entsprechende englische Artikel (den ich persönlich besser 
finde)
https://en.wikipedia.org/wiki/Linearization

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Polynom schrieb:
> Viele andere konnten gute Gedanken beisteuern und die Problemstellung
> trotz der von mir induzierten Widrigkeiten ganz offenbar verstehen.

das nenne ich sinnfreie behauptung oder totschlägerargument im sinne von 
bitte nur "lösungen und keine probleme" benennen.

es ist eben nicht jedem gegönnt eine sinnlose frage als solche zu 
erkennen und dann wird halt "ausgespeichert" sprich einfach 
rumgeplappert in der hoffnung irgendwas wird schon passen und wenn nicht 
merkt es ja vielleicht keiner, aber dafür waren wir wieder richtig 
produktiv/aktiv auch wenns nur blinder aktionismus war.


mt

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.