WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Parameteroptimierung einer DGL anhand Messwerten

 

yamakasi
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2017, 10:34     Titel: Parameteroptimierung einer DGL anhand Messwerten
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein Modell mit der folgende DGL:

q3 * y''' + q2 * y'' + q1 * y' + q0 * y = p2 * u'' + p1 * u' + p0 * u

und Messwerte des realen Systems für den Eingang u(t) und dem dazugehörigen Ausgang y(t). Die Koeffizienten q3, q2, q1, q0, p2, p1 und p0 bilden das folgende nichtlineare Gleichungssystem:

p0 = c*f

p1 = b*c+d*f

p2 = b*d

q0 = c*f/k+c*e*k

q1 = k*e*f+c*b/k+a*c*k+d*f/k+d*e*k

q2 = a*f*k+b*e*k+a*d*k+b*d/k

q3 = b*a*k

Mein Ziel ist es für die Parameter a bis f (jeweils innerhalb einer oberen und unteren Grenze) die Werte zu finden wofür das Ergebniss der DGL mit dem gemessenen Eingang u(t) so nah wie möglich an den gemessen Ausgang y(t) kommt.

Weiß jemand wie ich dieses Problem lösen kann?

Gibt es eine Toolbox dafür?

Kann ich es sogar mit lsqcurvefit lösen?

Vielen Dank im Voraus!!!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.04.2017, 10:42     Titel:
  Antworten mit Zitat      
Hallo,

ja, du kannst lsqcurvefit verwenden, um q0 bis q3 und p0 bis p2 zu finden. Dazu muss die Funktion unter Verwendung von u die Lösung des Systems zu den Zeitschritten für y, z.B. über ode45, berechnen.
Anschließend kannst du für diese Parameter das Gleichungssystem nach a-f (und k??) auflösen, z.B. mit fsolve.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
yamakasi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2017, 21:41     Titel:
  Antworten mit Zitat      
Vielen Dank für die schnelle Antwort Harald!

Das Problem ist jedoch, dass die Koeffizienten q3 bis p0 der gefitteten Kurve keine Lösung des Gleichungssystems ist (habe es im Bildbereich versucht). Ich möchte daher irgendwie versuchen die Parameter a bis f (k kann ich als konstant annehmen) in einem gewissen Bereich so zu variieren, dass der bestmögliche (und nicht der beste) Fit gefunden wird und nicht andersherum. Hoffe ich habe es verständlich ausgedrückt Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.04.2017, 22:01     Titel:
  Antworten mit Zitat      
Hallo,

auch das sollte mit lsqcurvefit gehen: als Parametereingang ein Vektor mit a-f und k, daraus werden dann q0 bis q3 und p0 bis p2 errechnet. Mit diesen wird dann die DGL gelöst, was die errechneten y-Werte liefert. Diese gleicht lsqcurvefit dann mit den Daten ab.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
yamakasi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.04.2017, 10:19     Titel:
  Antworten mit Zitat      
Zitat:
Mit diesen wird dann die DGL gelöst, was die errechneten y-Werte liefert.

Wie kann ich das mit ode45 umsetzen? Ich weiß, dass ich erst die Ordnung der DGL reduzieren muss, weiß aber leider nicht was ich mit der Störfunktion machen soll. Ich finde dazu auch nur Beispiele wo es keine Störfunktion gibt oder zumindest nicht in dieser Form.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.04.2017, 21:23     Titel:
  Antworten mit Zitat      
Hallo,

was meinst du mit Störfunktion? u?
Das einzige Problem sehe ich darin, dass du auch die Ableitungen brauchst. Diese müssen z.B. über gradient angenähert werden. Ansonsten landet das eben in der DGL für y'''.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
yamakasi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.05.2017, 17:18     Titel:
  Antworten mit Zitat      
Da auf diesem Weg einfach nicht weiter komme würde ich es noch im Bildbereich versuchen. Da würde ich ja das Problem mit der DGL nicht mehr haben. Dafür würde ich mit den Koeffizienten die Übertragungsfunktion bilden und in einem Simulink Modell mit dem gemessenen Eingang u(t) den Ausgang y(t) simulieren. Würde ich hier auch mit lsqcurvefit arbeiten können?
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.05.2017, 19:31     Titel:
  Antworten mit Zitat      
Hallo,

evtl. hätte ich noch eine Idee für dich. Wenn ich dich richtig verstehe, hast du Probleme mit dem Handling der Ableitungen der Eingangsgröße u(t)?!?
Zitat:
Ich weiß, dass ich erst die Ordnung der DGL reduzieren muss, weiß aber leider nicht was ich mit der Störfunktion machen soll. Ich finde dazu auch nur Beispiele wo es keine Störfunktion gibt oder zumindest nicht in dieser Form.

In dem Zusammenhang kannst du dir (falls noch nicht geschehen) die Zustandsraumdarstellung oder speziell die Normalformen ansehen, z.B. https://de.wikipedia.org/wiki/Zusta.....ung#Regelungsnormalform_2
Hier siehst du, dass du das Zustandsraummodell direkt anhand deiner Koeffizienten aus der Übertragungsfunktion aufstellen kannst. Somit wäre die Ableitung der Eingangsgröße kein Problem mehr.

Muss das System evtl. noch diskretisiert werden?

Gruß
vega
Private Nachricht senden Benutzer-Profile anzeigen
 
yamakasi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.05.2017, 21:51     Titel:
  Antworten mit Zitat      
Vielen dank für deine Antwort Vega! Diese Umformung war mir nicht bekannt!
Leider weiß ich auch hier nicht wie ich es in Matlab umsetzen kann um an die optimalen Parameter zu kommen.
Was meinst du genau mit diskretisieren? Also es geht nur darum die Parameter anzupassen , implamtieren muss ich das Modell nicht...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.05.2017, 07:54     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Da auf diesem Weg einfach nicht weiter komme

In dem Fall wäre es hilfreich, wenn du auf Fragen eingehst ("was meinst du mit Störfunktion?") und konkretisierst, wo die Probleme liegen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
yamakasi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2017, 17:13     Titel:
  Antworten mit Zitat      
Harald ich habe vergessen auf deine Frage einzugehen, weil du sie ja selbst beantwortet hast Smile Ja mit der Störfunktion meine ich den Eingang des Systems u(t).

Mein Prolem ist, dass ich nicht genau weiß wie ich mein Problem in Matlab umsetzen kann (von der Programmierung her). Dabei ist es vollkommen egal wie ich das Problem angehe, ich will nur die optimalen Parameter finden. Ich wollte es erst über die DGL lösen weil ich da eine grobe Vorstellung hatte wie der Code aussehen müsste. Da ich gesehen habe, dass man lsqcurvefit auch für Simulink Modelle verwenden kann dachte ich macht es die Sache einfacher mit der Übertragungsfunkftion zu arbeiten. Leider weiß ich auch hier nicht wie der Code genau aussehen müsste.
Private Nachricht senden Benutzer-Profile anzeigen
 
yamakasi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 26.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2017, 19:09     Titel:
  Antworten mit Zitat      
Ich hab jetzt einfach mal einen Code geschrieben, der natürlich noch verbessert werden muss. Vielleicht erkennt man hier etwas besser was ich vorhabe:


Die Funktion TF bestimmt anhand der Parameter P die Übertragungsfunktion für das Modell simTF und startet eine Simulation mit dieser Übertragungsfunktion. Der Eingang der Übertragungsfunktion ist u(t) (also u_data und x_data)

Code:

function [y, numTF, denTF] = TF(P)

id=3.15;
i2=3.0562;
iges = i2*id;

K = [0 0 0 0 0 0 0];

K(1) = (P(3)*P(6));
K(2) = (P(2)*P(3)+P(4)*P(6));
K(3) = (P(2)*P(4));
K(4) = (P(3)*P(6)/iges+P(3)*P(5)*iges);
K(5) = (iges*P(5)*P(6)+P(3)*P(2)/iges+P(1)*P(3)*iges+P(4)*P(6)/iges+P(4)*P(5)*iges);
K(6) = (P(1)*P(6)*iges+P(2)*P(5)*iges+P(1)*P(4)*iges+P(2)*P(4)/iges);
K(7) = (P(2)*P(1)*iges);

numTF = [K(3) K(2) K(1)];
denTF = [K(7) K(6) K(5) K(4)];

sim('simTF','SrcWorkspace','Current');

y = y_sim;
end
 


Mit Hilfe von lsqcurvefit sollen die Parameter P so variiert werden, dass der Ausgang des Modells y(t) (y bzw. y_sim) so gut wie möglich an den gemessenen Verlauf (y_data) angepasst wird

Code:

P = [0,0,0,0,0,0];

P_0 = [0.2,130,1000,250,0.5,7];   % Startwerte der gesuchten Parameter
P_lb = [0.4,130,20000,50,0.7,4];   % untere Grenzen der gesuchten Parameter
P_ub = [0.5,150,25000,250,0.9,7];   % obere Grenzen der gesuchten Parameter

u_data = [...];   % Eingang des Modells (Messwerte)
x_data = [...];   % Zeitvektor
y_data = [...];   % Ausgang des Modells (Messwerte)
 
P_opt = lsqcurvefit(@TF,P_0,x_data,y_data,P_lb,P_ub);
 



Stimmt hier grundsätzlich meine herangehensweis?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.05.2017, 19:15     Titel:
  Antworten mit Zitat      
Hallo,

spricht auf den ersten Blick nichts dagegen. Bekommst du denn sinnvolle Ergebnisse?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.