Hallo, ich bin gerade auf der Suche nach Infos zum Thema 'numische Suchverfahren'. Dazu gibt es eigentlich auch eine Menge Bücher usw.. Das ganze bezieht sich aber meistens alles nur auf die theoretischen Aspekte und nicht darauf, wie man diese Verfahren nachher auch wirklich umsetzt. Oder wenn es in die Praxis geht, dann werden diese Verfahren meistens auf PCs mit aufwendigen float-Rechnungen eingesetzt. Bei Mikrocontrollern ist man da wohl schnell am Ende der Rechenleistung. Hat vielleicht einer von euch an paar gute Links oder Buchtips, wo das ganze auch mal für den Bereich Mikrocontroller etwas näher betrachtet wird? Ich möchte z.B. das Minimum eines AD-Wandlerwertes suchen, damit ich die Stellgröße eines Reglers optimal einstellen kann. Viele Grüße, Ralf
Hallo, versuch dein glück mal hier : http://www.ma.utexas.edu/documentation/nr/bookcpdf.html Eckhard
in dem Fall brauchst du keine aufwändige Suchfunktion, einfach in der AD-Wandler-Routine direkt mit einer min/max-Variablen vergleichen, wenn kleiner/grösser die min/max-Variable nachführen. Kostet nur wenige Takte, und du hast jederzeit ein aktuelles Maximum oder Minimum zur Verfügung.
Hi, @Eckhard: Danke, die Seite werde ich mir mal ansehen. @crazy horse: Das mit der min/max-Variable wäre schon klar, das Problem ist nur, dass ich die Stellgröße meines Reglers in geeigneter Weise variieren muß, um das Minimum des AD-Wandlerwertes zu finden. Steigere ich z.B. meine Stellgröße immer weiter, so fällt zunächst der Wandlerwert zunächst und steigt weiter hinten wieder an, z.B. entspr. einer quadratischen Kennlinie. Es gibt also irgendwo im Stellgrößenbereich einen Punkt, bei dem der AD-Wert sein Optimum (Minimum) besitzt. Nun möchte ich nicht der Reihe nach alle möglichen Stellgrößen durchfahren, sondern den gesuchten Wert schon in wenigen Schritten finden. Ich weiß also zunächst nicht wo sich das Optimum befindet und in welche Richtung ich mich bewegen muß. Das ganze sollte aber möglichst schnell funktionieren und möglichst ohne aufwendige Rechnerei gehen. Viele Grüße, Ralf
einfach einen schrit in beliebige richtung machen, vergleichen ob die abweichung größer oder kleiner geworden ist und dann den nächsten schritt in die entsprechende richtung (weiter nach vorn oder umkehrern) beschreiten. wenn man am optimalen punkt ist und mehr als x mal jeweils 1 oder 2 schritte nach oben oder unten gemacht hat dort stehenbleiben... ...wenn ihr wisst was ich meine :) (hab grad ne komische wortwahl)
sind dann deine wandler werte in einer tabelle gespeichert? ich glaube dann ist das mit dem einen schritt in eine richtung und dann wieder einen nicht sehr effizient. liegen die wert in einer tabelle vor zuerst diese sortieren. da gibt es auch wieder verschieden schnelle und komplizierte algorythmen. z.b. bubble sort wäre einfach aber nicht sehr schnell. oder verstehe ich dein problem falsch? gruss tobias
Hi, meine Wandlerwerte sind nicht in einer Tabelle hinterlegt. Sie hängen im Prinzip nur davon ab, wie ich die Stellgröße meines Reglers einstelle. Den richtigen Wert der Stellgröße kenne ich nicht. Diesen muß ich aus dem AD-Wandlerwert ermitteln. Ich weiß nur, dass der AD-Wandlerwert eine 'Badewannenkurve' durchläuft und dass ich meine optimale Stellgröße dann erreicht habe, wenn ich das Minimum in der AD-Wandlerkurve gefunden habe. Ich suche nun gute Verfahren, dieses Minimum möglichst schnell und mit möglichst wenig Rechenleistung zu finden. Ich habe mir im ersten Ansatz überlegt, dass ich erst mal in groben Schritten meine Stellgröße variiere und dabei immer den Wert des AD-Wandlers überprüfe. Wenn ich dann eine Richtungsumkehr in der Steigung des Wandlerwertes erkenne, will ich dann mit der Hälfte der Schrittweite rückwärts laufen bis zur nächsten Umkehr der Steigung usw.. So hoffe ich das Minimum zu finden. Aber vielleicht gibt es ja auch bessere Verfahren? Viele Grüße, Ralf
Hallo Ralf, um Extremwerte (Minimum, Maximum) einer Kurve zu finden gibt es verschiedene Verfahren (Regula-Falsi, Newton'sche Näherungsverfahren). Diese setzen vorraus, dass die Kurve als Funktion y=f(x) beschrieben ist, was bei Dir aber wohl nicht gegeben ist. Eine Kurve 2ter-Ordnung ("Badewanne") hat nur ein Extremwert, den Du in der von Dir beschriebenen Weise finden kannst. Hat die Kurve mehrere Extremwerte, musst Du die Anfangsschritte der Stellgrößenänderung kleiner wählen, da Du sonnst ein Minimum uberspringen könntest. Du findest dann zwar ein lokales Minimum, das aber nicht das kleinste ist. Wie schnell musst Du denn das Mininmum finden? Ändert sich die Funktion der Kurve im Betrieb? MfG Andreas
Morgen, ein erster, wenn auch nocht nicht zu Ende gebrachter Gedanke ist folgender: Du fährst ein grobes Raster über das Intervall der Stellgrößen in äquidistanten Schritten. Du merkst Dir zwei Größen (min1, i1) und i2. Wobei ix die Stellgröße ist, zu dem minx gehört. Jedesmal, wenn Du ein neues Minimum (min_neu < min1) findest, schiebst Du den alten Stellwert i1 nach i2: i2 = i1. (min1, i1) wird durch das neue Minimum ersetzt. Nach dem Durchfahren kannst Du folgendes feststellen: Wenn i2 < i1 ist, mußt Du die Wanne weiter von i1 aus in Richtung der größeren Stellwerten durchsuchen (feines Sieb). Wenn i2 < i1 ist, ..., dann Richtung kleinere Stellwerte. Sag mal, ist die Folge Deiner AD-Werte streng monoton (ADWi > ADWi+1 bzw. ADWi < ADWi+1) bzw. monoton (ADWi >= ADWi+1 bzw. ADWi =< ADWi+1)? Wenn da ein Rauschen drauf sein sollte, wirds komplizierter. Grüße Oliver
Moin moin, eigentlich habe ich nicht besonders viel Zeit. Das ganze muss optimaler Weise in einer Zeit von unter einer Sekunde passieren. Da ich nebenbei noch andere Dinge berechnen (anderer Regler, sowie weitere Berechnung die in Echtzeit ablaufen müssen ohne viel Zeitverzug (<10us)) muss habe ich nicht besonders viel Zeit um diese Berechnungen auch noch durchzuführen. Das AD-Signal ist bei mir auch relativ stark verrauscht. Ich habe allerdings schon eine hardwareseitige Mittelwertbildung und auch noch eine softwareseitige Filterung eingebaut. Das Signal ist also relativ stabil. Der Werteverlauf lässt sich ungefähr durch eine quadratische Kennlinie annähern. Gruß, Ralf
wie andreas gesagt hat hat je deine kurve nur eine extremalstelle. du sagst du könntest den werteverlauf annähern. wir können also die zu erwartende kurve beschreiben in der form y = -m*x^2 + q. wenn du zwei werte ermittelt hast kann die kurve beschrieben werden. die ableitung = 0 wäre dann der zu erwartende extremwert. nun die weiteren messungen mit dem vorausgerechneten vergleichen und falls gleich hast du das minmum. wobei ich natürlich denke das das nicht allzu sehr effizient ist. tobias
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.