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)



zu 2.: Laplacetransformation


zu 3.: Auslegungsmethoden nach Ziegler und Nichols



zu 4. Eigenwertberechnung
s. Tafel im Unterricht
zu 5. Polvorgabe

zu 6. Zustandsregler

Ü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




Statische Optimierung, Motivation, Anwendungsfälle

Einführung in die statische Optimierung
|
zu 1.: Lineare Regression

zu 2.: Kleinste Quadrate Methode

Erstes 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

2. Statische und dynamische Optimierung mit dem Gradientenverfahren

3. 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




Entwicklung eines evolutionären Algorithmus' um ein Rorschachbild zu erzeugen:




Bild 0-6: Beispielergebnis mit Rorschach003.


#5 Mi 07.12.2022
Einführung in Fuzzy-Logik und Fuzzy-Regelung






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

Nehmen 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
|











--- Schließung THB ---
#7 Mi 14.12.2022 ONLINE






#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:

Teil 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:

#11 Mi 11.01.2023 ONLINE
Lösungen zu Übung 2
Lösung zu Übung 2, Aufgabe 1a)


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(..):

Vollständige Lösung mit Evoopt


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

Demonstration: Registrierung von Objekten in anderen Objekten

