LabVIEWForum.de - Downhill Simplex.vi

LabVIEWForum.de

Normale Version: Downhill Simplex.vi
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich versuche ein vi zum multipeak fitting in labview zu programmieren. Mein Ziel ist es derzeit dies über die Standardmethode der Minimierung der Abweichungsquadrate mit Hilfe des Simplex-Algorithmus zu erreichen. Für den Simplex-Algorithmus gibt es auch das "Downhill Simplex nD.vi". Leider gibt es nicht viele Beispiele im Netz zu diesem vi und ich bekomme derzeit die Fehlernachricht "-23001". Bei der Suche nach diesem Fehler bin ich vor allem auf Formatierungsprobleme in dem Formelstring gestoßen. Ich halte mich aber derzeit an alle wichtigen Konventionen, die ich gefunden habe und erhalte dennoch den Fehler. Kennt jemand die Ursache? Mein vi hängt an.

Danke für die Hilfe

Lv09_img2
Ich habe ein bischen damit herumgespielt:

a) ersetzte Dein 200(!) Funktionen erstmal durch eine.
b) pi scheint nicht verarbeitet zu werden. Versuch erstmal 3.,14
c) Du schreibst 0.5; %f ergibt aber das lokale Zeichen, also möglicherweise ",". %,; benutzen.
d) Zähl Deine Klammern
Wenn die Syntaxproblematik erledigt ist kommt das hier:
e) Du erzeugst 200 Messpunkte die einen Peak ergeben. Dann erzeugst Du eine Funkktion mit 200 Termen abhängig von 2 Variablen,
die du dann minimieren willst. (Vom Draufschauen denke ich die Lösung ist: a=0, b egal)
Willst Du nicht eigentlich einen Gauss auf Deine simulierten Messwerte fitten? (Versuch mal Levenberg Marquardt)
Viel Erfolg, Jopi
Hi,

ich sehe nicht genau welche 200 Funktionen du unter a) meinst. In der ersten for-Schleife berechne ich halt 200 simulierte Messdaten, in der zweiten Schleife konstruiere ich die Summe der Abweichungsquadrate, die auch 200 Terme haben muss.

Woran hast du denn erkannt, dass "pi" nicht verarbeitet wird? Dass im String noch "pi" steht, is ja klar, da es eben noch der nicht weiterverarbeitete String ist.

Der Hinweis mit dem Komma statt dem Punkt ist gut. Darauf hatte ich nciht geachtet. Hilft aber auch noch nichts.

Die Klammern habe ich diverse male gezählt und keine Fehler gefunden ^_^

a=0, b egal stimmt so nicht. Allein, weil a=0 ein singulärer Punkt ist. Es ist halt doch keine so triviale Aufgabe.

In diesem Beispiel will ich natürlich einen Gauß fitten. Letztlich wollte ich aber nur den das Simplex-Algorithmus vi testen. Ich habe vor auf Messdaten je nach Auswahl bis zu ca. 5 Gauß- oder Lorentz- oder Voigt-Profile über ca. 100 Daten-Puntke zu legen.

Ich habe inzwischen das vi einfach noch mal ganz neu geschrieben und aus mir zunächst einmal unverständlichen gründen funktioniert es jetzt. Es funktioniert auch mit 2 Gaußkurven (siehe Anhang). Leider dauert das ganze sehr, sehr lange. Von der Effektivität der Algorithmen habe ich leider nicht viel Ahnung. Ich habe nur mal irgendwo aufgeschnappt, dass der Simpelx-Algorithmus schon zu den schnellsten gehört. Ist denn Levenberg Marquardt für meine Zwecke besser?

Gruß

Lv09_img2
Hallo,

das Nichtlineare Kurvenanpassung VI, das den Levenberg-Marquardt-Algorithmus verwendet ist genau das, was ich gesucht habe. Danke für den Tip.

Gruß
Referenz-URLs