|
surf |
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 26.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.04.2012, 11:06
Titel: Fehler bei fminsearch
|
|
Hallo,
ich habe die Sprungantwort meiner Regelstrecke gemessen und bin mir ziemlich sicher, dass es sich um ein PT1-Glied mit Totzeit handelt. Wenn ich nun meine Parameter mittels fminsearch berechnen lasse geht das auch bis zum 40. Iterationsschritt. Dann kommt die Fehlermeldung:
??? Error using ==> tf.tf at 239
The value of the "InputDelay" property must be a vector of nonnegative numbers.
Error in ==> PTGlied at 38
sys_mod=tf(zmod, nmod, 'InputDelay', x(2));
Error in ==> fminsearch at 320
x( = xr; fxr = funfcn(x,varargin{:});
Error in ==> nelder at 10
x=fminsearch('PTGlied',x0,options);
x(2) ist mein Schätzwert für die Totzeit, die ich am Anfang übergebe. Mir scheint es so, dass fminsearch einen negativen Wert für die Totzeit berechnet und dieser beim Einsetzen in die Funktion tf einen Fehler verursacht.
Hat jemand schon Erfahrung mit diesem Fehler gemacht, oder weiß wie man ihn behenben kann? Im folgenden ist der Code.
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 27.04.2012, 11:25
Titel:
|
|
Hallo,
du könntest z.B. in deiner Zielfunktion abfragen, ob die Eingabe negativ ist, und in dem Fall einen hohen Wert zurückgeben.
Alternativ könntest du fmincon verwenden und dort die Nebenbedingung explizit angeben.
Grüße,
Harald
|
|
|
surf |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 26.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.04.2012, 19:40
Titel:
|
|
Hallo Harald,
schonmal danke für deine Tipps. Ich hab noch zwei Fragen. Wenn ich in meiner Zielfunktion den Wert abfrage und diesen ändere falls er negativ ist, verfälsche ich dann nicht das Ergebnis von fminsearch. Dessen Aufgabe ist es doch den Optimalwert entsprechend der gemessenen Sprungantwort zu finden. Wenn ich aktiv in die Suche des Optimalwertes eingreife, verhindere ich dies doch oder nicht?
Die Benutzung von fmincon verstehe ich so, dass sie parallel zu fminsearch aufgerufen werden müsste. Also immer nachdem fminsearch einen neuen Wert für die Totzeit berechnet hat, müsste ich diesen mittels fmincon überprüfen, ob er innerhalb der vorgesehenen Grenzen liegt. fmincon müsste ich dann aus dem Script von fminsearch aufrufen. Richtig?
Ich wäre sehr dankbar über weiter Hilfe.
Gruß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 28.04.2012, 21:10
Titel:
|
|
Hallo,
die Idee ist, unzulässige Parameter einfach sehr schlecht zu bewerten. Das sollte nichts verfälschen, im Gegenteil.
Das verstehst du falsch. fmincon kann statt fminsearch, nicht zusätzlich dazu, verwendet werden.
Grüße,
Harald
|
|
|
surf |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 26.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.04.2012, 19:21
Titel:
|
|
Hallo Harald,
dann versteh ich das. Vielen Dank für deine Hilfe! Ich werds morgen ausprobieren und schreiben, was dabei rausgekommen ist.
Grüße
|
|
|
surf |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 26.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.05.2012, 15:16
Titel:
|
|
Gestern hats nicht mehr geklappt aber dafür heute. Ich hab festgestellt, dass ich mit meinem Schätzwert für die Verstärkung ziemlich daneben lag. Ich denke daran hats gelegen, dass fminsearch durcheinander gekommen ist.
Das Ergebnis von fminsearch ist bisher nur mittelmäßig. Gerade bei der Totzeit liegt der berechnete Wert ziemlich daneben. Aus der Sprungantwort kann man ablesen, dass die Totzeit defintiv unter einer Sekunde liegen muss. Momentan gibt mir fminsearch Werte größer als 5 sek sind. Ich probiere weiter.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 01.05.2012, 17:20
Titel:
|
|
Hallo,
dann probiers doch mal mit entsprechendem Startwert.
Vorschlag auch, sich die vermeintliche Lösung mal plotten zu lassen. Vielleicht kannst du daraus was ablesen.
Du kannst es auch mal mit einem anderen Löser, z.B. fminunc, versuchen.
Grüße,
Harald
|
|
|
surf |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 26.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 02.05.2012, 13:44
Titel:
|
|
Hallo Harald,
Ich hab die Sprungantwort des Modells und der Messung geplottet und kann eine recht gute Übereinstimmung feststellen. Nur die Totzeit wird nach wie vor von fminsearch ignoriert. Ich kann mir vorstellen, dass es daran liegt, dass die Totzeit im Vergleich zur Zeitkonstante sehr, sehr klein ist.
Totzeit=0,7s
T1=170s
fminsearch erzielt also ein besseres Ergebnis ohne die Totzeit zu berücksichtigen, weil sie einen sehr kleinen Anteil an der Nährung des Gesamtergebnis hat. Ich werd jetzt nochmal über fmincon versuchen die Nebenbedingung für die Totzeit auf kleiner 1 einzustellen.
Ich hab nebenbei auch versucht die Strecke über zwei PT1-Glieder zu approximieren, aber das kann eigentlich auch nicht die Lösung sein, weil meine gemessene Sprungantwort keinen Wendepunkt hat.
Gruß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 02.05.2012, 15:59
Titel:
|
|
Hallo,
wenn du nicht weiterkommst, poste bitte ein Code-Beispiel, und ich schau mir das mal genauer an.
Grüße,
Harald
|
|
|
surf |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 26.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.05.2012, 10:40
Titel:
|
|
|
|
|
Hallo Harald,
ich habe die Strecke jetzt ganz gut mit fmincon angenähert. Die Totzeit habe ich über die Nebenbedingungen festgelegt. Bis dahin schonmal vielen Dank für deine Hilfe!
Jetzt habe ich aber ein anderes Problem beim Reglerentwurf. Was ich erreichen will ist eine sinusförmige Temperaturschwingung auf einer Werkstückoberfläche. Dafür habe ich eine Wärmequelle, die ich sinusförmig ansteuere. Mein Steuersignal bewegt sich zwischen 0 und 10 V. Bei 10 V ist die Wärmequelle bei maximaler Leistung.
Meine Sprungantwort habe ich bei einer Änderung der Eingangsspannung 0 auf 4 V gemessen. Dabei erreiche ich eine Temperaturänderung auf der Werkstückoberfläche von 26°C. Bei einem Sprung von 0 auf 8 V erreiche ich eine Temperaturänderung von 50°C. Wenn ich nun in Simulink einen sinusförmigen Spannungsverlauf zwischen 0 und 8V auf meine Regelstrecke gebe, passiert auch genau das was ich erwartet habe. Die Temperatur steigt an und schwingt gleichzeitig sinusförmig. Aufgrund der hohen Frequenz werden aber keine Temperaturen erreicht die sonderlich stark von 26°C abweichen.
Lange Rede kurzer Sinn. Mein Problem ist nun dass zwischen Anregung und Antwort eine Phasenverschiebung auftritt. Diese möchte ich ausregeln. Auf die absolute Temperatur kommt es mir nicht an. Bei einer Eingangsschwingung zwischen 0 und 8V möchte ich zum Beispiel nicht eine Temperaturschwingung zwischen 26 und 50°C haben. Wie soll ich dafür den Regler entwerfen?
Ich hoffe mein Problem ist halbwegs verständlich rübergekommen.
Schöne Grüße
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.05.2012, 10:51
Titel:
|
|
Hallo,
Reglerauslegung ist nicht so meine Domäne. Wenn hier keine Antwort kommt, mach vielleicht einen separaten Thread dafür auf, weil von den anderen vielleicht niemand bis hierher liest.
Grüße,
Harald
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|