Verfasst am: 20.05.2010, 15:04
Titel: RC Bestimmung mit LSQNONLIN?
Hallo Leute,
ich habe schon lange nichts mehr mit Matlab gemacht und ich war auch damals definitiv kein fortgeschrittener Anwender.
Jetzt habe ich mal wieder ein Problem wo ich dachte, dass Matlab mit Sicherheit helfen kann, nur ist wie immer das Problem die Umsetzung...
Es geht um folgendes:
Mit Hilfe von Impedanzspektroskopie werden Impedanzbetrag und Phase eines Systems im Frequenzbereich von 10Hz-10 MHz aufgezeichnet.
Jetzt wüde man gerne ein Ersatzschaltbild für das System finden. Dazu muss man natürlich irgendein Modell annehmen. Sagen wir im einfachsten Fall ein RC Glied...
R und C sind also die zu bestimmenden Parameter. Jetzt dachte ich, wenn ich mit LSQNONLIN an die Sache rangehe, dann müsste das theoretisch doch zielführend sein.
Ich hab es also ausprobiert:
Ich simuliere ein paar Messdaten (Impedanzbetrag und Phase) durch mathematisch exakt berechnete Daten.
Diese gebe ich zusätzlich mit der Frequenz omega an LSQNONLIN mit irgendeinem Startwert für R und C.
Nachdem die C-Werte immer recht klein ausfallen habe ich das Abbruchktriterium mal recht klein gemacht (bzw. TolX und TolFun weil ich nicht so recht verstehe, was der Unterschied ist)
LSQNONLIN liefert allerdings totalen Quatsch für mein R und mein C zurück. Ich erwarte ja, dass R und C herauskommen die ich zum simulieren der Daten verwendet habe.
Ich nehme an, ich habe es verbockt.
Könnte sich das ganze jemand mal kurz anschauen?
Die verwendete Mathematik dahinter ist primitiv:
Betrag Z= Wurzel aus R^2 + 1/ (wC)^2
phi = arcustangens von ( -1/wRC )
Das wars...
istart.m
Beschreibung:
Das ist das Haupt .m-file und ruft ifunction.m auf
Hi Thomas,
du hast Recht, das stimmt, danke an der Stelle.
Nur leider ändert das das Ergebnis letztendlich dadurch überhaupt nicht. Ob ich einen Vektor summiere und dann lsqnonlin die Summe über diesem "Skalar" bildet oder ob Matlab über den Vektor selber summiert ist in sich ja gleich.
Vom meinem Gefühl her ist die ganze Sache ein einfaches Problem. Oder ist da irgendein mathematischer Kniff dahinter, dass es dann doch schwierig für Matlab wird, die Lösung zu finden...das wäre traurig :/.
Hoffentlich ist das Probem nur meine Herangehensweise.
hast du es denn ausprobiert? lsqnonlin summiert nicht direkt sondern verwendet die Trust-region Methode (http://www.mathworks.com/access/helpdesk/help/toolbox/optim/ug/brnoybu.html#broz0i4).
Kannst auch fminunc oder fminsearch verwenden, dann musst du deine Gütekriterium nicht abändern.
Hi Thomas,
jo ich hatte es natürlich ausprobiert. Dauert ja nur 1 sek das "sum" wegzumachen.
Meine Aussage war nur ein Erklärungsversuch warum es sich nicht ändert.
Fminsearch habe ich auch mal getestet. Da kommt für R 0 raus und für C ein unrealistisch hoher Wert (e15)
Es muss doch wenigstens einen Grund haben warum es nicht geht. Was könnte der sein?
edit:
Ich habe jetzt mal probiert in meiner Funktion die an LSQNONLIN gegeben wird nicht Z und phi als Summe zu optimieren, sondern 2 Gleichungen optimieren zu lassen, weil Matlab immer sagt:
"Warning: Large-scale method requires at least as many equations as variables; using blabla instead".
Matlab bringt aber nachwievor die Warnung. Dabei habe ich doch jetzt 2 Gleichungen (Z und phi) und 2 Variablen (parameter(1) und parameter(2)). Ich versteh nicht so ganz was Matlab meint, bzw. was ich machen muss damit es passt.
Es kommt jedenfalls immer noch nichts brauchbares heraus
Der Fehler lag in der Konstruktion von A. Du hast vergessen zu transponieren. Das Fehlerkriterium musst du vielleicht noch ein wenig abändern, da -C den gleichen Fehler liefert wie +C.
Hehe cool, da hab ich echt nicht drauf geachtet. Vielen Dank Thomas!! Ich hab leider keinen Plan wie ich das Fehlerkriterium verbessern kann - das Ergebnis selbst liefert mir ja auch die negative Kapazität. Aber egal, ich kann das Vorzeichen einfach um drehen
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.