LabVIEWForum.de - Levenberg-Marquardt-Algorithmus: Parameter >0-Bedingung

LabVIEWForum.de

Normale Version: Levenberg-Marquardt-Algorithmus: Parameter >0-Bedingung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.

Lea

Hallo Leutz,
mal wieder ein Problem, mit dem ich mich rumschlag: In den Levenberg-Marquardt-Algorithmus gibt man (x,y)-Werte ein, und Parameter mit einem ungefähren Anfangswert, die er anpassen soll. Bei mir ist das eine Diodenkennlinie mit y= ln(abs(t*exp(x) + s*exp(x/2) + x/r).
t,s und r sind Parameter, die er so wählen soll, daß die (x,y)Paare beschrieben werden. t,s und r sollen aber auf alle Fälle immer positiv sein.
Wo kann ich das festlegen?
Vielen lieben Dank im Voraus,
Lea.
Hi Lea!

Gibst du die Parameter über Numeric-control-Felder an? Dann ist das ganz einfach: Wenn 0 auch erlaubt ist, dann änder das Format doch einfach von signed (z.B. I32) auf unsigned (U32).
Wenn 0 auch nicht sein soll, kannst du linke Maustaste auf das Feld, dann "Data-Range" und dort den minmal zulässigen Wert wählen.
Dann sind nur noch Werte > 0 erlaubt.

Geklappt?

Björn

Lea

Das Problem ist, daß die Parameter in ein Array eingegeben werden. Kann da dann jedes Element eines Arrays unterschiedliche Einschränkungen (zB 1. Element < 0 und das zweite Element > 0) haben?
Wie definiere ich diese Einschränkungen in einem Array?
Viele Grüße, Lea.
Spezifikationen für einzelne Felder/Spalten/Zeilen eines Arrays gehen glaube ich nicht. Aber nehm doch für jeden Parameter ein 1D-Array (da kannst du dann ja alle Elemente gleich spezifizieren) und führe die 1D-Arrays zu einem 2D zusammen.
Hallo Lea!

In deiner Gleichung ist übrigens ein Fehler, irgendwo fehlt eine Klammer.
Magst du mal konkrete Wert geben?
denk beim eintippen vergssenSmile

y= ln(abs(t*exp(x)) + s*exp(x/2) + x/r).


und wech...

:derdemo:
Hat das mal einer versucht?
Ich bekomme da immer nur komisch aussende Diagramm bei raus.

Lea

upsala, nochmals:
y= ln(abs(t*exp(x) + s*exp(x/2) + x/r))
Die Formel beschreibt eine Diode mit Parallelwiderstand (Bild kann ich leider nicht hochladen, funktioniert irgendwie nicht, jedenfalls eigentlich eine ganz normale Dunkelkennlinie: kommt bei -0.7V und -40 mA senkrecht hoch, biegt vor der x-Achse ab und nähert sich dieser asymtotisch). Die Funktionswerte, die ich in den Algorithmus steck, sind ln(Strom)-Werte, x sind Spannungswerte. Ln deshalb, damit das besonders gut im Exponentialteil angefittet wird. Das Parameterarray wird dem SubVi übergeben, dh. ich müßt auch dort ein Array aus Einzelarrays erstellen?
Viele Grüße, Lea.
Ja. Bzw. je nachdem... poste doch einfach mal das VI, dann wirds vielleicht klarer!
Referenz-URLs