DAY BY DAY zu SRT 5MT -- Simulations- u. Regelungstechnik 2 für 5-MT
(EN google-translate)
(PL google-translate)
Online-Unterricht ab 14.12.:
Die Online-Zeiten werden kurz gehalten und dort vorwiegend Aufgaben, bzw. Projektthemen ausgegeben und besprochen, die selbsttätig bearbeitet werden sollen. Der hierzu verwendete BBB-Link und ein Reservelink wurden Ihnen als E-Mail über Moodle zugesendet.
|
Mittwoch, 18.01.23 und Freitag 20.01.23 finden in Präsenz statt und dienen als E-Test-Prüfung, bzw. der Projektpräsentation.
Übersicht
|
Beim Kurs Regelungstechnik 2 kommen zu den im ersten Kurs behandelten klassinschen Verfahren der Regelungstechnik Optimierungsverfahren (statisch / kleinste Quadrate Methode, dynamisch / modifiziertes Gradientenverfahren) hinzu, sowie Beispiele aus dem Bereich Softcomputing (Evolutionäre Algorithmen, Fuzzy-Regelung, mit Einschränkungen Neuronale Netze). Die im ersten Kurs behandelten Verfahren bilden eine Art Referenz im Hintergrund, gegen die die neuen Verfahren getestet und diskutiert werden. Deshalb sollen die alten Inhalte in den ersten Stunden auch erst einmal wieder wach gerufen werden.
Die Inhalte der vorangehenden Vorlesung können hier nachgeschlagen werden:
Chronologisches Verzeichnis der im Verlauf des Semesters behandelten Themen
--- 2. Semesterhälfte ---
#1 Mi 23.11.2022
Rückmeldung zu den Praktika -- Wie hat sich die Sicht auf Beruf und Studium verändert
Wiederholung der Inhalte aus Regelungstechnik 1
|
zu 1.: Scilab (ode, csim)
allgemein: 37_Scilabode (Beispiel): 54_Kinetik/01_Newton/04_ODE
csim (Beispiel): 62_Regelungssysteme/01_day_by_day
zu 2.: Laplacetransformation
Theorie: 62_Regelungssysteme/04_LaplaceRegeln: 62_Regelungssysteme/04_Laplace/03_PRegler
zu 3.: Auslegungsmethoden nach Ziegler und Nichols
62_Regelungssysteme/07_EinstellregelnMethode 1: 62_Regelungssysteme/07_Einstellregeln/02_Methode1
Methode 2: 62_Regelungssysteme/07_Einstellregeln/03_Methode2
zu 4. Eigenwertberechnung
s. Tafel im Unterricht
zu 5. Polvorgabe
62_Regelungssysteme/08_Polvorgabezu 6. Zustandsregler
Theorie Zustandsregler mit Beobachter und Blockbezeichnungen A,B,C,D: 62_Regelungssysteme/09_BeobachterÜbungen zu Laplace als Wiederholung
Übung 1 -- Wandeln Sie jeweils um in den Zeit- bzw. Laplacebereich
1a)
$ \ddot x + 3 \dot x + x = 4 u $
Formel 0-1: Transformieren Sie die lineare Differentialgleichung in den Laplacebereich.
1b)
$ X s^3 + X s - 4 U s^2 = U $
Formel 0-2: Transformieren Sie in den Zeitbereich.
1c)
$ G\left(s\right) = \frac {s^2+1}{s^3+s} $
Formel 0-3: Transformieren Sie in den Zeitbereich. Eingang sei U & Ausgang sei X.
1d)
$ G\left(s\right) = \frac {s^2+1}{s^3+s} $
Formel 0-4: Transformieren Sie in den Zeitbereich. Eingang sei U & Ausgang sei X.
1e) Nachfolgend sind die Laplace-Transformierten einer Regelstrecke G(s) und eines Reglers R(s) dargestellt.
|
$ G\left(s\right) = \frac {1}{s^2+5s} $
Formel 0-5: Regelstrecke
$ R\left(s\right) = \frac {1}{s} + 5 + s $
Formel 0-6: Regler
Übung 2 -- Umsetzung regelungstechnischer Systeme mit Scilab
Nehmen Sie sich erneut das System von 1e) vor.
2a)
|
2b)
|
2c)
Verdeutlichen Sie sich durch Zeichnen eines Blockschaltbildes:
|
#2 Do 24.11.2022
Überblick zu Optimierung
62_Regelungssysteme/05_Regleroptimierung62_Regelungssysteme/05_Regleroptimierung/01_Guetefunktion
62_Regelungssysteme/05_Regleroptimierung/02_Heuristiken
62_Regelungssysteme/05_Regleroptimierung/04_Gradientenverfahren
Statische Optimierung, Motivation, Anwendungsfälle
50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrateEinführung in die statische Optimierung
|
zu 1.: Lineare Regression
50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate/01_Linearregressionzu 2.: Kleinste Quadrate Methode
50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate/02_BeispielErstes Beispiel von Hand gerechnet
Bild 0-1: Erstes Beispiel von Hand gerechnet.
// y = c0 + c1*x^2 //Messungen: // x | y // 1 | 3 // 2 | 6 // 3 | 10 B = [1,1;4,1;9,1]; d = [-3;-6;-10]; A = B'*B b = B'*d // A*c + b = 0 // c = inverse(A)(-b) c = inv(A)*(-b) cc = lsq(B,-d)
Code 0-1: Auswertung mit Scilab
Übung zu LSQ
|
Bild 0-2: Originalkurve
u = [0.5,0.75,0.9,1.3,2.3]; d = [0.6,0.4,0.3,0.2,0.1]; B = [ones(5,1),u',(u.*u)'] c=lsq(B,d') uu = 0.3:0.01:2.5; dd = c(1) + c(2)*uu + c(3)*(uu.*uu); plot(u,d,'gre*',uu,dd,'blk') a = gca(); a.x_label.text = 'u/Volt'; a.y_label.text = 'd/Meter'; a.title.text = 'Entfernungssensor Sharp'; hl=legend(['Messung';'lsq-Kurve'],a=1);
Code 0-2: Scilab-Sript zur Parameterbestimmung mittels der Methode der kleinsten Quadrate
Bild 0-3: Plot zu obigem Skript
Versuch das Problem durch Hinzufügen eines Messpunktes zu beheben
u = [0.5,0.75,0.9,1.3,1.5,2.0,2.3]; d = [0.6,0.4,0.3,0.2,0.17,0.12,0.1]; zs = size(u); B = [ones(zs(2),1),u',(u.*u)'] c=lsq(B,d') uu = 0.3:0.01:2.5; dd = c(1) + c(2)*uu + c(3)*(uu.*uu); plot(u,d,'gre*',uu,dd,'blk') a = gca(); a.x_label.text = 'u/Volt'; a.y_label.text = 'd/Meter'; a.title.text = 'Entfernungssensor Sharp'; hl=legend(['Messung';'lsq-Kurve'],a=1);
Code 0-3: Zwei Messpunkte mehr
Bild 0-4: Ergebnis mit zwei zusätzlichen Messpunkten
Auch dieses Ergebnis ist unbefriedigend! -- Abhilfe: Ansatz mit d = c0 + c1*u + c2/u:
u = [0.5,0.75,0.9,1.3,1.5,2.0,2.3]; d = [0.6,0.4,0.3,0.2,0.17,0.12,0.1]; zs = size(u); // d = c0 + c1*x + c2/x B = [ones(zs(2),1),u',(1./u)'] c=lsq(B,d') uu = 0.3:0.01:2.5; dd = c(1) + c(2)*uu + c(3)./uu; plot(u,d,'gre*',uu,dd,'blk') a = gca(); a.x_label.text = 'u/Volt'; a.y_label.text = 'd/Meter'; a.title.text = 'Entfernungssensor Sharp'; hl=legend(['Messung';'lsq-Kurve'],a=1);
Code 0-4: Ansatz mit d = c0 + c1*u + c2/u
Bild 0-5: Plot zu obigem Skript
Dieses Ergebnis ist überzeugender.
#3 Mi 30.11.2022
BBB testen, wegen anstehender Schließung der Hochschule
Thema: Optimierung mittles Gradientenverfahren
|
1. Heuristiken
50_Simulationstechnik/06_Optimierung/02_Heuristiken2. Statische und dynamische Optimierung mit dem Gradientenverfahren
50_Simulationstechnik/06_Optimierung/01_Gradientenverfahren3. Modifiziertes Gradientenverfahren
function r = bestimmeR(xy) x = xy(1); y = xy(2); rr = [ 3*x*x-4, 3*y*y-16 ]; r = -rr/sqrt(rr*rr'); endfunction x=0; y=0; xy=[x,y]; alfa=0.01; for i=1:1000 xy = xy + alfa*bestimmeR(xy); end disp(xy); disp('soll x:'); xsoll = 2/sqrt(3) disp('soll y:'); ysoll = 4/sqrt(3)
Code 0-5: Anwendung des modifizierten Gradientenverfahrens auf z = x^3-4x+y^3-16y.
zufallszahl = 1+ floor(grand(1, 1, "unf", 0, 1.999999999));
Code 0-6: Hilfsmittel: Erzeugen einer gleichverteilten diskreten Zufallszahl mit grand, die entweder 1 oder 2 liefert.
clear; //Zustandsregler ergänzt // max(|FA|) = 1N => Das wird die Begrenzung beim zu optimierenden Regler // Implementierung eines modifizierten Gradientenverfahrens R = [1,2]; FAmax = 1.0; function f = rechteSeite(t,y) x=y(1); v=y(2); FA=-R(1)*x-R(2)*v; if FA>FAmax then FA=FAmax; end if FA<-FAmax then FA=-FAmax; end A = [0,1;-1,0]; B = [0;1]; f = A*y + B*FA; endfunction t = 0:0.01:30; y0 = [1,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); FAverlauf = -R(1)*y(1,:)-R(2)*y(2,:); plot(t,y(1,:)',t,y(2,:)',t,FAverlauf); //Liefert gleichverteilt Integer mit den Werten 0,1,2,3,...,xmax-1 function zufall = nextInt(xmax) zufall = floor(grand(1, 1, "unf", 0, xmax-0.0000000001)); endfunction function fehler = fehlerfunktion(RR) R=RR; yy = ode(y0,t0,t,rechteSeite); fehler = sqrt(yy(1,:)*yy(1,:)'); endfunction fehler = fehlerfunktion([1,2]) fehler = fehlerfunktion([0.5,1]) fehler = fehlerfunktion([2,4]) RRR = [0.2,0.2]; //Startwert für die Optimierung der Regelparameter r1 und r2 fehler_alt = fehlerfunktion(RRR) //Fehler für aktuellen Parametersatz der Regelparmeter //(Fehler am Beginn der OIptimierung) alfa=0.1; for i=0:1000 //1. Wähle zufällig einen Parameter, der verändert werden soll. zs = size(RRR); maxindex = zs(2); index = 1+nextInt(maxindex); //ist hier entweder 1 oder 2 //2. Wähle zufällig, ob dieser Parameter verkleinert oder vergrößert werden soll faktor = -1+2*nextInt(2); //ist hier entwededer -1 oder +1 //3. Bestimme den Fehler für den so veränderten Parametersatz RRRneu = RRR; RRRneu(index) = RRRneu(index) + alfa*faktor; fehler_neu = fehlerfunktion(RRRneu); //4. Ist der neue Fehler kleiner oder gleich, als der alte, so behalte die Veränderung bei und merke den neuen Fehler "als alten". //alternativ: Ist der neue Fehler GRÖSSER als der alte, verwerfe die Veränderung und bleibe am alten Punkt im Parameterraum. //if fehler_neu<fehler_alt then // disp(fehler_neu); //end if fehler_neu<=fehler_alt then RRR=RRRneu; fehler_alt = fehler_neu; end end R=RRR t = 0:0.01:30; y0 = [1,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); plot(t,y(1,:)','gre',t,y(2,:)','gre',t,FAverlauf,'gre'); disp('Fehler bei Polvorgabe:'); fehlerfunktion([1,2]) disp('Fehler nach Optimierung:'); fehlerfunktion(RRR)
Code 0-7: Implementierung eines modifizierten Gradientenverfahrens
Alfa steuern:
Im nachfolgenden Skript wird bei jeder erfolgreichen Veränderung in eine Parameterrichtung ein zugeordnetes Alfa vergrößert und im gegenteiligen Fall verkleinert:
clear; //Zustandsregler ergänzt // max(|FA|) = 1N => Das wird die Begrenzung beim zu optimierenden Regler // Implementierung eines modifizierten Gradientenverfahrens R = [1,2]; FAmax = 1.0; function f = rechteSeite(t,y) x=y(1); v=y(2); FA=-R(1)*x-R(2)*v; if FA>FAmax then FA=FAmax; end if FA<-FAmax then FA=-FAmax; end A = [0,1;-1,0]; B = [0;1]; f = A*y + B*FA; endfunction t = 0:0.01:30; y0 = [1,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); FAverlauf = -R(1)*y(1,:)-R(2)*y(2,:); plot(t,y(1,:)',t,y(2,:)',t,FAverlauf); //Liefert gleichverteilt Integer mit den Werten 0,1,2,3,...,xmax-1 function zufall = nextInt(xmax) zufall = floor(grand(1, 1, "unf", 0, xmax-0.0000000001)); endfunction function fehler = fehlerfunktion(RR) R=RR; yy = ode(y0,t0,t,rechteSeite); fehler = sqrt(yy(1,:)*yy(1,:)'); endfunction fehler = fehlerfunktion([1,2]) fehler = fehlerfunktion([0.5,1]) fehler = fehlerfunktion([2,4]) RRR = [0.2,0.2]; //Startwert für die Optimierung der Regelparameter r1 und r2 fehler_alt = fehlerfunktion(RRR) //Fehler für aktuellen Parametersatz der Regelparmeter //(Fehler am Beginn der OIptimierung) //Für jeden Parameter und für jede Änderungsrichtung gibt es ein eigenes ALFA: zs = size(R); alfa=0.1*ones(2,zs(2)); for i=0:100 //1. Wähle zufällig einen Parameter, der verändert werden soll. zs = size(RRR); maxindex = zs(2); index = 1+nextInt(maxindex); //ist hier entweder 1 oder 2 //2. Wähle zufällig, ob dieser Parameter verkleinert oder vergrößert werden soll faktor = -1+2*nextInt(2); //ist hier entwededer -1 oder +1 //3. Bestimme den Fehler für den so veränderten Parametersatz RRRneu = RRR; alfaakt = alfa(1,index); if faktor<0 then alfaakt = alfa(2,index); end RRRneu(index) = RRRneu(index) + alfaakt*faktor; fehler_neu = fehlerfunktion(RRRneu); //4. Ist der neue Fehler kleiner oder gleich, als der alte, so behalte die Veränderung bei und merke den neuen Fehler "als alten". //alternativ: Ist der neue Fehler GRÖSSER als der alte, verwerfe die Veränderung und bleibe am alten Punkt im Parameterraum. //if fehler_neu<fehler_alt then // disp(fehler_neu); //end if fehler_neu<=fehler_alt then RRR=RRRneu; fehler_alt = fehler_neu; if faktor>0 then alfa(1,index)=alfa(1,index)*1.1; else alfa(2,index)=alfa(2,index)*1.1; end else if faktor>0 then alfa(1,index)=alfa(1,index)*0.9; else alfa(2,index)=alfa(2,index)*0.9; end end end R=RRR t = 0:0.01:30; y0 = [1,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); plot(t,y(1,:)','gre',t,y(2,:)','gre',t,FAverlauf,'gre'); disp('Fehler bei Polvorgabe:'); fehlerfunktion([1,2]) disp('Fehler nach Optimierung:'); fehlerfunktion(RRR) disp(alfa);
Code 0-8: Steuerung von alfa.
#4 Do 01.12.2022
Thema: Evolutionäre Optimierungsalgorithmen
73_COACH3/09_Algorithmen/03_Evoopt50_Simulationstechnik/07_Genalgorithmus
30_Informatik3/16_Nuetzliches/03_RungeKutta
78_Processing/06_Snippets/15_Simulation
Entwicklung eines evolutionären Algorithmus' um ein Rorschachbild zu erzeugen:
Rorschach002.zip -- Fehlerfunktion implementieren
Rorschach003.zip -- Fehlerfunktion erweitern und benutzen
Bild 0-6: Beispielergebnis mit Rorschach003.
Rorschach006_Evoopt.zip -- Fertige Implementierung des genetischen Algorithmus.
#5 Mi 07.12.2022
Einführung in Fuzzy-Logik und Fuzzy-Regelung
62_Regelungssysteme/18_Fuzzy -- Theorie62_Regelungssysteme/18_Fuzzy/03_Uebung9 -- Beispiel 1
02_WS2021_22/05_REGmecha5/01_day_by_day -- Beispiel 2
72_COACH2/12_Fuzzy/01_Uebungsaufgabe -- Übung
80_Robuste_Systemintegration/10_EvoFuzzy -- Preview: Aufbau von Fuzzy-Reglern und deren Optimierung über Evolutionäre Algorithmen
Bild 0-7: Beispiel für einem Fuzzy-Regler.
Übung: Ersetze den Zustandsregler unten durch einen Fuzzy-Regler
Bild 0-8: Umzusetzender Fuzzy-Regler (gleiche Geometrie wie oben, aber andere Regeln und erweitertes Ausgangsfuzzyset)
clear; function F = fregler(x,v) F = -x-v; endfunction function f = rechteSeite(t,y) x = y(1,1); v = y(2,1); F = fregler(x,v); f(1,1) = v; f(2,1) = -x + F; endfunction t = 0:0.01:10; y0 = [2,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); plot(t,y(1,:)',t,y(2,:)');
Code 0-9: Rahmensystem, in dem der Zustandsregler durch die Implementierung eines Fuzzy-Reglers ersetzt werden soll.
Rahmenprogramm:
clear; function nzp = fuzzysetX(x) endfunction function nzp = fuzzysetV(v) endfunction function F = fregler(x,v) // 1. Fuzzifizieren der Eingangsgrößen x und v, heißt: zu jeder Fuzzygröße // jedes der beiden Eingangsfuzzysets wird der Erfülltheitsgrad berechnet. nzp_x = fuzzysetX(x); nzp_v = fuzzysetX(v); // 2. Erfülltheitsgrade jeder Regel berechnen erfuelltheit = zeros(9); erfuelltheit(1) = min(nzp_x(1),nzp_v(1)); //... // 3. Defuzzifizierung der Ausgangsgröße (Kraft F), heißt Schwerpunktberechnung. endfunction function f = rechteSeite(t,y) x = y(1,1); v = y(2,1); F = fregler(x,v); f(1,1) = v; f(2,1) = -x + F; endfunction t = 0:0.01:10; y0 = [2,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); plot(t,y(1,:)',t,y(2,:)');
Code 0-10: Noch unfertige Umsetzung, jedoch mit kompletter Programmstruktur.
clear; function A=flaecheTrapez(h) q = 2.0; p = 2.0*(1.0-h); A = h*(p+q)/2.0; end function nzp = fuzzysetX(x) nzp = zeros(3); if x<-1 then nzp(1)=1.0; nzp(2)=0.0; nzp(3)=0.0; elseif x<0 then nzp(1)=-x; nzp(2)=1-nzp(1); nzp(3)=0.0; elseif x<1 then nzp(3)=x; nzp(2)=1-nzp(3); nzp(1)=0; else nzp(1)=0.0; nzp(2)=0.0; nzp(3)=1.0; end endfunction function nzp = fuzzysetV(v) nzp = zeros(3); if v<-1 then nzp(1)=1.0; nzp(2)=0.0; nzp(3)=0.0; elseif v<0 then nzp(1)=-v; nzp(2)=1-nzp(1); nzp(3)=0.0; elseif v<1 then nzp(1)=0.0; nzp(3)=v; nzp(2)=1-nzp(3); else nzp(1)=0.0; nzp(2)=0.0; nzp(3)=1.0; end endfunction function erg=mini(x,y) if x<y then erg=x; else erg=y; end end function F = fregler(x,v) // 1. Fuzzifizieren der Eingangsgrößen x und v, heißt: zu jeder Fuzzygröße // jedes der beiden Eingangsfuzzysets wird der Erfülltheitsgrad berechnet. nzp_x = fuzzysetX(x); nzp_v = fuzzysetV(v); // 2. Erfülltheitsgrade jeder Regel berechnen ef = zeros(9); //erfuelltheit ef(1) = mini(nzp_x(1),nzp_v(1)); //Regel 1 ef(2) = mini(nzp_x(2),nzp_v(1)); //Regel 2 ef(3) = mini(nzp_x(3),nzp_v(1)); //... ef(4) = mini(nzp_x(1),nzp_v(2)); ef(5) = mini(nzp_x(2),nzp_v(2)); ef(6) = mini(nzp_x(3),nzp_v(2)); ef(7) = mini(nzp_x(1),nzp_v(3)); ef(8) = mini(nzp_x(2),nzp_v(3)); ef(9) = mini(nzp_x(3),nzp_v(3)); //... //F = F/Ages; // 3. Defuzzifizierung der Ausgangsgröße (Kraft F), heißt Schwerpunktberechnung. F=0.0; Ages=0.0; sp=[2,1,0,1,0,-1,0,-1,-2]; //Regel 1..9: for i=1:9 A=flaecheTrapez(ef(i)); s=sp(i); Ages=Ages+A; F=F+s*A; end F=F/Ages; endfunction function f = rechteSeite(t,y) x = y(1,1); v = y(2,1); F = fregler(x,v); f(1,1) = v; f(2,1) = -x + F; endfunction t = 0:0.01:10; y0 = [2,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); plot(t,y(1,:)',t,y(2,:)');
Code 0-11: Komplettes System.
Übung zu evolutionären Algorithmen
EvooptNeu.zip -- Sketch, der nur eine verbesserte Version der Evoopt-Klasse enthältNehmen Sie obigen Sketch zur Grundlage, um das Minimum der Fehlerfunktion F(x,y)=x3-4x+y3-16y aproximativ mit Hilfe eines evolutionären Algorithmus' zu bestimmen.
Hinweise:
|
#6 Do 08.12.2022
|
30_Informatik3/01_Vom_struct_zur_Klasse/06_Objektabstraktion
30_Informatik3/02_UML/02_UML_Klassendiagramm
36_Java
78_Processing
92_Soundinstallation/03_material/11_Snippets
30_Informatik3/15_Rasterlayout/02_interfaces
74_EmbSyst/02_Eingebettete_Systeme/03_Android/04_Interfacedesign
30_Informatik3/16_Nuetzliches/01_Threads
OOP0001.zip -- Im Unterricht entstandene Beispiele zu OOP.
OOP0002_Kapselung.zip -- Im Unterricht entstandene Beispiele zu OOP.
--- Schließung THB ---
#7 Mi 14.12.2022 ONLINE
EvooptNeu_Musterloesung.zipEvolution_ergebnix.zip -- studentische Lösung
rt2_mt5_uebung1.pdf -- Übung 1, zu lösen bis 21.12.
Schnittstelle007.zip -- Beispiele zur Verwendung von Schnittstellen.
Schnittstelle007b.zip -- Beispiele zur Verwendung von Schnittstellen.
Schnittstelle007c.zip -- Beispiele zur Verwendung von Schnittstellen.
#9 Mi 21.12.2022 ONLINE
Lösungen zur ersten Übung rt2_mt5_uebung1.pdf:
Lösung zu Übung 1, Aufgabe 1:
clear; dd=[4,11,24]; UU=[0,1,2]; //Bc+d=r B = [UU',(2^UU)'] d = -dd' //Ac+b=0 A=B'*B //A: // 5. 10. // 10. 21. b=B'*d //b: //-59. //-122. c=inv(A)*(-b) aa=c(1) bb=c(2) //a=3.8, b=4.0 //Test: r = aa*UU+bb*2^UU - dd //...mit Scilab direkt: lsq(B,-d)
Code 0-12: Lösung zu Aufgabe 1 mit Hilfe von Scilab, aber nach dem Schema von Hand.
Lösung zu Übung 1, Aufgabe 1:
Siehe: 62_Regelungssysteme/01_day_by_day, Code 0-5: inverspendel.sceTeil 2 der Lösung: "Wie ändert sich Ihr Regler, wenn phi_soll statt Null PI/8 sein soll?"
$ \left[\begin{array}{cc}\dot \phi ^# \\ \dot \omega ^#\end{array}\right]=\left[\begin{array}{cc}0 & 1 \\ \frac {m \cdot g \cdot h}{J} & 0\end{array}\right] \cdot \left[\begin{array}{cc} \phi ^# \\ \omega ^#\end{array}\right]-\left[\begin{array}{cc}0 \\ \frac {h}{J}\end{array}\right] \cdot \left[\begin{array}{cc}r1 & r2\end{array}\right] \cdot \left[\begin{array}{cc} \phi ^# \\ \omega ^#\end{array}\right] $
Formel 0-7: Linearisierte DGLs des geregelten transformierten Systems.
Es gilt:
$ \phi ^#= \phi -pi/8 $
Formel 0-8: Zusammenhang 1
$ \dot \phi ^#=\dot \phi $
Formel 0-9: Zusammenhang 2
$ \omega ^#= \omega $
Formel 0-10: Zusammenhang 3
$ \dot \omega ^#=\dot \omega $
Formel 0-11: Zusammenhang 4
|
$ \ddot \phi = \frac {m \cdot g \cdot h}{J} \cdot \phi - \frac {m \cdot g \cdot h}{J} \cdot \frac {pi}{8} - \frac {h}{J} \cdot r_1 \cdot \phi + \frac {h}{J} \cdot r_1 \cdot \frac {pi}{8} - \frac {h}{J} \cdot r_2 \cdot \omega $
Formel 0-12: Untere Systemgleichung nach Rücksubstitution.
...somit:
$ \ddot \phi = \frac {m \cdot g \cdot h}{J} \cdot \phi + \frac {h}{J} \cdot \left(-r_1 \cdot \phi +r_1 \cdot \frac {pi}{8} -r_2 \cdot \omega -m \cdot g \cdot \frac {pi}{8}\right) $
Formel 0-13: Passende Zusammenfassung.
Die runde Klammer ist das Antriebskraft:
$ \ddot \phi = \frac {m \cdot g \cdot h}{J} \cdot \phi + \frac {h}{J} \cdot F_A $
Formel 0-14: Antriebskraft zusammengefasst.
Aufgabe 3 und 4 werden online "life gecodet"
clear; clc; function nkp = fuzzysetX(x) nkp = zeros(3,1); if x<-2 then nkp(1,1)=1.0; nkp(2,1)=0.0; nkp(3,1)=0.0; elseif x<0 then nkp(1,1)=-0.5*x; nkp(2,1)=1-nkp(1); nkp(3,1)=0.0; elseif x<2 then nkp(3,1)=0.5*x; nkp(2,1)=1-nkp(3); nkp(1,1)=0; else nkp(1,1)=0.0; nkp(2,1)=0.0; nkp(3,1)=1.0; end endfunction k = 1; a = zeros(3,601); for x = -3:0.01:3 b = fuzzysetX(x); a(1,k) = b(1); a(2,k) = b(2); a(3,k) = b(3); k=k+1; end x = -3:0.01:3; plot(x,a(1,:),x,a(2,:),x,a(3,:));
Code 0-13: Studentische Lösung Aufgabe 3.
Fuzzy fuzzy; float x = 1.5; public void setup() { fuzzy = new Fuzzy(); float y[] = fuzzy.fuzzysetX(x); println("fuzzyset= negativ: "+y[1]); //+" klein: "+y[2]+" positiv: "+y[3]); } public void draw() { } //-------------------------------------------- public class Fuzzy { float[] nkp; public Fuzzy() { nkp = new float[3]; } public float[] fuzzysetX(float x) { if (x<-2) { nkp[0]=1.0; nkp[1]=0.0; nkp[2]=0.0; } else if (x<0) { nkp[0]=-0.5*x; nkp[1]=1-nkp[0]; nkp[2]=0.0; } else if (x<2) { nkp[2]=0.5*x; nkp[1]=1-nkp[2]; nkp[0]=0.0; } else { nkp[0]=0.0; nkp[1]=0.0; nkp[2]=1.0; } return nkp; } }
Code 0-14: Studentische Lösung Aufgabe 3b -- mit Processing.
Neues Übungsblatt, bitte bis 11.01.2023 bearbeiten:
rt2_mt5_uebung2.pdf -- Übung 2, zu lösen bis 11.01.2023
#11 Mi 11.01.2023 ONLINE
Lösungen zu Übung 2
Lösung zu Übung 2, Aufgabe 1a)
Lösung zu Übung 2, Aufgabe 1a) (Processing-Sketch)Bild 0-9: Plots aus Uebung2_A1_001 und dem Scilab-Skript übereinander gelegt.
Lösung zu Übung 2, Aufgabe 1b)
Um die maximale Kraft zu finden, muss sie rekonstruiert werden:
clear; function F = fregler(x,v) F = -x-v; endfunction function f = rechteSeite(t,y) x = y(1,1); v = y(2,1); F = fregler(x,v); f(1,1) = v; f(2,1) = -x + F; endfunction t = 0:0.01:10; y0 = [2,0]'; t0 = 0; y = ode(y0,t0,t,rechteSeite); //plot(t,y(1,:)',t,y(2,:)'); FF = fregler(y(1,:),y(2,:)); plot(t,FF); disp(max(FF))
Code 0-15: Zustandsregler mit rekonstruierter Stellkraft Kraft F.
Die maximal auftretende Stellkraft ist Fmax=1.3626500.
Lösungsidee:
|
Teillösung: Stützstellen lassen sich setzen mit setStuetz(..):
Uebung2_A1b_001.zip -- Teillösung: Stützstellen lassen sich setzen mit setStuetz(..)Vollständige Lösung mit Evoopt
Uebung2_A1b_002.zip -- Musterlösung zu Übung 2, 1b), vollständig.Bild 0-10: Vor (durchgezogen) und nach (gestrichelt) der Optimierung.
Generation Nr. 4300 xs_best=1.6968399982406481 vs_best=1.6394199983856197 fs_best=10.999949974752553 g0=0.06968399982406481 g1=0.06394199983856197 g2=0.9999949974752553 Fehler: 16.408488135878798
Code 0-16: Beispiel-Fehlerausgabe nach vielen Generqationen.
Übung 2, Aufgabe 2, Musterlösung
Uebung2_A2_002.zip -- Übung 2, Aufgabe 2, Musterlösung
Demonstration: Registrierung von Objekten in anderen Objekten
Vektor003.zip -- zub wird in u und v registriert.Vektor004.zip -- u und v erzeugen sich jeweils ihr eigenes zub-Objekt.