Verfasst am: 27.02.2023, 14:36
Titel: Lsqcurvefit funktioniert nicht wie erhofft
Brauche eure Hilfe, Ich will aus einer elektrischen Schaltung die unbekannten Variablen berechenn anhand von Messwerten und habe dafür lsqcurvefit ausgewählt.
Folgend das Script:
clear
% Dateiname
filename = 'DI-Wasser_100mV.csv';
% Lesen Sie die Daten aus der CSV-Datei
T = readtable(filename, 'Delimiter', ',');
% Konvertieren Sie die Tabelle in ein Array
A = table2array(T);
das Hauptproblem dürften die Startwerte sein. MATLAB sucht ausgehend von den Startwerten mit einem Abstiegsverfahren nach einem Minimum. Wenn die Startwerte nicht ausreichend gut sind, kann das ein lokales Minimum sein.
Wenn du keine ausreichend guten Startwerte hast, kann Globale Optimierung eine Alternative sein, z.B. mit MultiStart um lsqcurvefit herum.
Nach Möglichkeit würde ich auch versuchen, das Modell zu vereinfachen. 13 Parameter sind ziemlich viel. Wo kommt denn a(3) vor? Sind die Terme für a(9) und a(10) nicht gleich?
Generell ist es gut, wenn du die Beispieldaten mit zur Verfügung stellst, so dass man das Problem reproduzieren kann.
Bitte auch die Code-Umgebung verwenden, damit in den Code keine Smileys gesetzt werden.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Danke für die schnelle Antwort. Das mit A3 ist ein fehler, den hab ich korregiert.
Bei der Funktion handelt sich sich um eine elektrische Schaltgruppe. mit 13 Bauteilen(Spule, Kapazität und Widerstand), mit unbekannten paramter.
Mit Mulistart hab ich noch nicht gearbeitet und die Startwerte sind einfach ins Blaue geraten.
es bleibt das Problem, dass die Terme für a(9) und a(10) gleich sind: Solange deren Summe gleich ist, kommt immer das gleiche heraus, egal was a(9) und a(10) für sich genommen sind. Das gleiche gilt nun für a(1) und a(2).
Ins Blaue geratene Startwerte sind bei lsqcurvefit meist keine gute Idee.
Schau dir MultiStart doch mal an.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hallo habe jetzt nochmal Multistart und auch mit erweiterten Einstellungen von Matlab experementiert, jedoch bekomme ich keine sonderloch gute verbesserung.
Ich habe neue startwerte ausprobieren bekommen, jedoch werden diese kaum mit den solvern geändert. Habe noch einen sehr großen Error. auch wenn der Graph schon in die richtige aussieht.
Code:
% clear % Dateiname
filename = '150mmolNaCl_100mV.csv'; % Letzte Zeile mit "END" aus Tabelle löschen
% Lesen Sie die Daten aus der CSV-Datei
T = readtable(filename, 'Delimiter', ',');
% Konvertieren Sie die Tabelle in ein Array
A = table2array(T);
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.