Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
Praktikant Toolentwicklung Matlab (m/w)
Branche: Beratung, Expertise, Fahrzeugtechnik, Fahrzeugteile, Technische Dienstleistungen
MBtech Group GmbH & Co. KGaA - Fellbach

Abschlussarbeit / Praktikum: Entwicklung Matlab (m/w)
Branche: Informationstechnologie, Elektrotechnik, Elektronik
GIGATRONIK Technologies GmbH - Ulm

Studentischer Mitarbeiter (m/w) - DevOps / Toolentwicklung
Branche: mehrere
IAV GmbH - Ingenieurgesellschaft Auto und Verkehr - Berlin

Praktikant (m/w) Bereich Konzernvorausentwicklung - Aktoren sicherheitsrelevanter Anwendungen
Branche: Fahrzeugtechnik, Fahrzeugteile, Maschinentechnik, Industrietechnik
MAHLE International GmbH - Stuttgart

Praktikum - Softwareentwicklung Java
Branche: mehrere
IAV GmbH - Ingenieurgesellschaft Auto und Verkehr - Dresden, Gifhorn

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Angenäherte Funktion mit Methode kleinster Quadrate

 

tkrzyzan
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2017, 12:46     Titel: Angenäherte Funktion mit Methode kleinster Quadrate
  Antworten mit Zitat      
Moin zusammen,
Ich hoffe zu aller erst das meine Frage hier im richtigen Forum ist ansonsten weißt mich bitte darauf hin =). Und zwar zu meinem eigentlichen Problem ich habe ein Modell in Simulink beidem ich den Drehzahlanstieg eines Verbrennungsmotors einpflegen wollte. Dabei bin ich wie folgt vorgegangen
1. Ich habe eine Lookup-Table bei der ich meine Gaspedalstellung zu der Solldrehzahl habe.
2. Dahinter habe ich 2 PT1-Glieder geschaltet und die Parameter so abgeschätzt bis diese sehr gut mit den Messwerten vom Motor übereingestimmt haben.
Jetzt kam aber mein Professor und meinte ich soll dies lieber mit der Methode der kleinsten Quadrate machen. Deshalb meine Frage:
1. Kann ich die Methode kleinster Quadrate überhaupt verwenden um die Parameter eines PT2-Gliedes zu bestimmen und wenn ja hat mir jemand vielleicht einen Link zu passender Literatur oder einem Code?
Vielen Dank euch schon mal im Voraus
tkrzyzan

Zu den Anhängen:
Der Drehzahlanstieg ist die Messkurve des Motors und das Modell ist die nachbildung für den Anstieg

Drehzahlanstieg.jpg
 Beschreibung:
Der Drehzahlanstieg

Download
 Dateiname:  Drehzahlanstieg.jpg
 Dateigröße:  13.95 KB
 Heruntergeladen:  51 mal
Modell.png
 Beschreibung:
Das von mir erstellte Modell

Download
 Dateiname:  Modell.png
 Dateigröße:  65.8 KB
 Heruntergeladen:  34 mal
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2017, 15:54     Titel:
  Antworten mit Zitat      
Zwei PT1-Glieder in Reihe sind zwar ein PT2-Glied, aber nicht jedes PT2-Glied lässt sich durch zwei PT1-Glieder in Reihe darstellen :-)

Wenn Du die System Identification Toolbox hast, dann kann die das für Dich übernehmen. Die macht dann auch Methode der kleinsten Quadrate. Da gibst Du Eingangssignal, Messignal und allgemeines Streckenverhalten rein und er rechnet Dir die Streckenparameter aus.

Wenn das nicht geht, dann kannst Du zum Beispiel fminsearch verwenden, um das Minimum Deiner Abweichung zwischen gemessenem und simuliertem Verhalten zu bestimmen.
Private Nachricht senden Benutzer-Profile anzeigen
 
tkrzyzan
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2017, 13:33     Titel:
  Antworten mit Zitat      
Epfi hat Folgendes geschrieben:
Zwei PT1-Glieder in Reihe sind zwar ein PT2-Glied, aber nicht jedes PT2-Glied lässt sich durch zwei PT1-Glieder in Reihe darstellen Smile

Wenn Du die System Identification Toolbox hast, dann kann die das für Dich übernehmen. Die macht dann auch Methode der kleinsten Quadrate. Da gibst Du Eingangssignal, Messignal und allgemeines Streckenverhalten rein und er rechnet Dir die Streckenparameter aus.


Ich glaube für mein Problem ist diese Toolbox nicht geeignet weil:
1. Ich habe Messwerte von einem Motorprüfstand bei welchen ich nur Rpm und Zeit habe. Und diese Messwerte versuche ich nachzubilden, mit einem Sprung (der aus der Lookuptable kommt) und einem Pt2-Glied. Somit habe ich ja eigentlich keine wirkliche Strecke um die Toolbox zu verwenden oder?


Epfi hat Folgendes geschrieben:
Wenn das nicht geht, dann kannst Du zum Beispiel fminsearch verwenden, um das Minimum Deiner Abweichung zwischen gemessenem und simuliertem Verhalten zu bestimmen.


Werde es jetzt mal mit dieser Funktion probieren. Jedoch muss ich dann eben immer die Parameter per Hand anpassen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2017, 17:59     Titel:
  Antworten mit Zitat      
Klar hast Du ne Strecke. Am Prüfstand hast Du die Kette so: Drehzahlsollwertsprung -> Prüfstand -> Drehzahl. In der Systemidentifikation machst Du Drehzahlsollwertsprung -> PT2-Glied -> Drehzahl. Das PT2-Glied ist dann Deine Strecke, deren Parameter Du suchst.

Nein, fminsearch passt die Parameter einer von Dir definierten Funktion für Dich so lange an, bis der Ausgangswert der Funktion (=Summe der Quadrate der Abweichung) minimal ist. Deine Funktion wird dann mit so vielen Paramtern aufgerufen, wie Dein PT-Glied hat (wahrscheinlich 3), simuliert das Verhalten und berechnet als Ausgangswert die Güte der Simulation. Als Gütemaß sollst Du die Summe der quadratischen Abweichung benutzen, im Prinzip kannst Du Dir aber auch ein anderes ausdenken.
Private Nachricht senden Benutzer-Profile anzeigen
 
tkrzyzan
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2017, 11:59     Titel:
  Antworten mit Zitat      
Epfi hat Folgendes geschrieben:
Klar hast Du ne Strecke. Am Prüfstand hast Du die Kette so: Drehzahlsollwertsprung -> Prüfstand -> Drehzahl. In der Systemidentifikation machst Du Drehzahlsollwertsprung -> PT2-Glied -> Drehzahl. Das PT2-Glied ist dann Deine Strecke, deren Parameter Du suchst.


Könnte ich auch nochmal probieren jedoch habe ich dann noch das Problem, dass ich am Prüfstand nur mein Output gemessen wurde und ich somit ein Inputsignal "Faken" müsste oder?

Epfi hat Folgendes geschrieben:
Nein, fminsearch passt die Parameter einer von Dir definierten Funktion für Dich so lange an, bis der Ausgangswert der Funktion (=Summe der Quadrate der Abweichung) minimal ist. Deine Funktion wird dann mit so vielen Paramtern aufgerufen, wie Dein PT-Glied hat (wahrscheinlich 3), simuliert das Verhalten und berechnet als Ausgangswert die Güte der Simulation. Als Gütemaß sollst Du die Summe der quadratischen Abweichung benutzen, im Prinzip kannst Du Dir aber auch ein anderes ausdenken.


Hier muss ich jedoch erstmal rausfinden wie ich als fun in der fminsearch ein PT2-Glied nehmen kann da ich hier ja meine DGL 2 Ordnung im Zeitbereich eintragen muss oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
tkrzyzan
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.06.2017, 15:32     Titel:
  Antworten mit Zitat      
tkrzyzan hat Folgendes geschrieben:

Könnte ich auch nochmal probieren jedoch habe ich dann noch das Problem, dass ich am Prüfstand nur mein Output gemessen wurde und ich somit ein Inputsignal "Faken" müsste oder?


So habe jetzt mal ein Eingangssignal "gefaked", da ich ja weiß welche Drehzahl ich als Sollwert haben wollte habe jetzt folgende Parameter:
Code:

clc
clear all
in=[0;0;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;2300;
2300;2300;2300;2300]


out=[0.991000000000000;0.991000000000000;589.416000000000;590.131000000000;
913.817000000000;957.408000000000;1198.48100000000;1443.07500000000;
1687.00900000000;1762.41300000000;1904.35900000000;1932.15400000000;
1964.07700000000;2046.80100000000;2003.70500000000;2076.79800000000;
2197.82900000000;2196.34300000000;2153.79800000000;2242.85100000000;
2209.33200000000;2233.38400000000;2227.27500000000;2250.44700000000;
2262.28000000000;2234.65000000000;2255.95000000000;2287.92800000000;
2294.31300000000;2302.56900000000;2310.60400000000;2308.23800000000;
2299.32100000000;2289.30400000000;2288.75400000000;2292.00100000000;
2298.44100000000;2294.75300000000;2287.92800000000;2295.74400000000;
2284.73600000000;2282.25900000000;2301.02800000000;2321.99800000000;
2330.03300000000;2301.90800000000;2290.46000000000;2299.81700000000;
2328.76700000000;2326.45600000000;2332.84000000000;2314.01700000000;
2309.66900000000;2326.12500000000;2333.00500000000;2324.36400000000;
2310.43900000000;2294.42300000000;2297.50500000000;2292.00100000000;
2284.62600000000;2280.11300000000;2298.55100000000;2292.22100000000;
2281.26900000000;2293.54200000000;2307.85300000000;2329.64800000000;
2351.05800000000;2365.47900000000;2353.92000000000;2351.71900000000;
2354.96600000000;2348.80200000000;2313.57700000000;2286.44200000000;
2322.87800000000;2366.96500000000;2366.13900000000;2373.90000000000;
2370.10200000000;2375.27600000000;2369.22100000000;2352.98500000000;
2354.74600000000;2372.79900000000;2380.55900000000;2366.19400000000;
2349.18700000000;2349.57200000000;2355.24100000000;2366.35900000000;
2379.56900000000;2375.27600000000;2360.19500000000;2360.74500000000;
2374.17500000000;2378.68800000000;2382.87100000000;2386.77900000000;
2374.89000000000;2355.79200000000;2351.55400000000;2373.56900000000;
2387.38400000000;2385.34800000000;2387.65900000000;2390.13600000000;
2375.60600000000;2353.70000000000;2346.49000000000;2350.72800000000;
2362.61600000000;2373.95500000000;2391.07200000000;2407.85900000000;
2405.43700000000;2391.18200000000;2372.85400000000;2369.66200000000;
2362.61600000000;2372.79900000000;2377.25700000000;2389.64100000000;
2388.10000000000;2376.04600000000;2380.39400000000;2386.83400000000;
2399.16300000000;2410.83100000000;2413.30800000000;2401.36400000000;
2393.21900000000;2382.59600000000;2362.01100000000;2346.65500000000;
2350.56300000000;2364.59800000000;2383.36600000000;2408.13400000000;
2423.54500000000;2421.78400000000;2409.29000000000;2391.62200000000;
2377.20200000000;2373.01900000000;2373.34900000000;2385.12800000000;
2390.79700000000;2396.85100000000;2405.43700000000;2406.53800000000;
2393.71400000000;2378.19300000000;2358.32300000000;2373.67900000000;
2375.77100000000;2381.88000000000;2378.68800000000]

stime=0.05

 

Mithilfe dieser Parameter bekomme ich dann mithilfe einer Transferfunction mit 2 Polen und 1 Nullstelle folgende Funktion: (Plot der Annäherung im Anhang)

1.426 s + 0.3209
----------------------
s^2 + 3.583 s + 0.2909

Was an sich schon sehr gut ist schonmal vielen Dank hierfür Exclamation

Jetzt habe ich noch das Problem das die Werte die ich als Input habe dauerhaft ein wenig ansteigen womit natürlich die Transferfunction nicht das richtige Maximum hat und über den Sollwert hinausläuft. (Dies habe ich auch nochmal im Anhang von meinem Scope ausgang aus dem Modell von oben)

Jetzt zu meiner nächsten Frage wie kann ich am besten dafür sorgen das die Transferfunction nicht über den SW hinausläuft?
1. Kann ich eventuell das Signal filtern oder glätten? Wenn ja wie einfach am Ende wo das Signal schwankt einen festen Wert eintragen?
2. Die Transferfunction im nachhinein ändern?

Modell.png
 Beschreibung:

Download
 Dateiname:  Modell.png
 Dateigröße:  15.25 KB
 Heruntergeladen:  22 mal
Toolbox.png
 Beschreibung:

Download
 Dateiname:  Toolbox.png
 Dateigröße:  13.46 KB
 Heruntergeladen:  21 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2017, 20:21     Titel:
  Antworten mit Zitat      
Das ist aber kein PT2-Glied, was Du da hast... Ein PT2 hat keine Nullstellen, Deine Übertragungsfunktion hat eine.

Die SysId-Toolbox findet ein System, was sich so verhält, wie Deine Messdaten. Siehst Du ja auch... Und die Übertragungsfunktion hat auch einen stationären Endwert - den kannst Du berechnen, indem Du den lim(s->0) von der Übertragungsfunktion ausrechnest. Bei Dir ist das so ungefähr 1,1031.

Wenn Du Dir die Eigenwerte ausrechnest, kannst Du ungefähr abschätzen, nach welcher Zeit Du sehr nah am stationären Endwert liegen wirst. Bei Dir sind die Eigenwerte -3.5rad/s und -0.0831rad/s. Den stationären Endwert erreichst Du dann so ungefähr bei fünf mal dem Kehrwert des kleinsten Eigenwertes, hier also bei etwa 60 Sekunden (so einfach klappt das aber nur bei nicht schwingfähigen Systemen). Deine Simulation geht nur bis 10 Sekunden - Du musst also nur etwas mehr Geduld haben...

Ansonsten noch etwas fachliches Blabla: mit dem Gaspedal gibt man eigentlich eher sowas wie das Drehmoment vor und keine Drehzahl...
Private Nachricht senden Benutzer-Profile anzeigen
 
tkrzyzan
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2017, 15:16     Titel:
  Antworten mit Zitat      
Epfi hat Folgendes geschrieben:
Das ist aber kein PT2-Glied, was Du da hast... Ein PT2 hat keine Nullstellen, Deine Übertragungsfunktion hat eine.


Hatte mehrere ausprobiert jedoch kam das oben erwähnte Glied laut Matlab besser an die Ergebnisse ran. Jedoch habe ich jetzt doch ein PT2-Glied genommen da ich dieses auch relativ einfach anpassen kann sodass alles stimmt Smile
Habe somit jetzt folgendes:

38.5
---------------------------
s^2 + 13.6 s + 37.68

Epfi hat Folgendes geschrieben:

Die SysId-Toolbox findet ein System, was sich so verhält, wie Deine Messdaten. Siehst Du ja auch... Und die Übertragungsfunktion hat auch einen stationären Endwert - den kannst Du berechnen, indem Du den lim(s->0) von der Übertragungsfunktion ausrechnest. Bei Dir ist das so ungefähr 1,1031.

Wenn Du Dir die Eigenwerte ausrechnest, kannst Du ungefähr abschätzen, nach welcher Zeit Du sehr nah am stationären Endwert liegen wirst. Bei Dir sind die Eigenwerte -3.5rad/s und -0.0831rad/s. Den stationären Endwert erreichst Du dann so ungefähr bei fünf mal dem Kehrwert des kleinsten Eigenwertes, hier also bei etwa 60 Sekunden (so einfach klappt das aber nur bei nicht schwingfähigen Systemen). Deine Simulation geht nur bis 10 Sekunden - Du musst also nur etwas mehr Geduld haben...


Da hast du natürlich überall recht. Ich habe jetzt die neue Übertragungsfunktion angepasst sodass ich dann einen stationären Endwert von 1 habe. Womit ich dann folgende Funktion bekomme.

38.5
---------------------------
s^2 + 13.6 s + 38.5

Und diese minimale Anpassung ist für mich völlig legitim da mir das erreichen des genauen Sollwerts wichtiger ist als eine Zeitverschiebung von 0.05s auf den Endwert.

Epfi hat Folgendes geschrieben:
Ansonsten noch etwas fachliches Blabla: mit dem Gaspedal gibt man eigentlich eher sowas wie das Drehmoment vor und keine Drehzahl...


Das ist natürlich richtig. Jedoch benutze ich dieses Modell um das Verhalten eines Verbrennungsmotors nachzubilden. Der Motor ist ein Kartmotor und hat eine Fliehkraftkupplung welche nochmal an eine Lamellenkupplung gekoppelt ist. Dadurch habe ich am Ende des Powertrains ein fast konstantes Moment (durch das Durchrutschen der Lamellenkupplung) aber ein schwankende Drehzahl. Aufgrund dessen brauche ich einen Drehzahlanstieg des Motors vor der Kupplung als Eingangsgröße für mein Modell der Kupplung.
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.