2 Gnu Octave | ||
→ | 2.16 Beispiel-Aufgaben | |
→ | 2.16.5 Trigger |
Dieses Beispiel zeigt die Lösung eines nichtlinearen Gleichungssystems.
Für den in der Abbildung gezeigten Trigger können aus den gegebenen Größen
das Tastverhältnis und die Phasenverschiebung mit folgenden Formeln bestimmt werden:
Es sollen nun vorgegebene Werte für Tastverhältnis und Phasenverschiebung eingestellt werden.
Hierfür müssen R2 und URef passend gewählt werden.
Es muss somit ein Lösungspaar (R2, URef) für das nichtlineare Gleichungssystem
gefunden werden.
Zur Lösung wird das Gleichungssystem in Octave-Notation übertragen:
In der Octave-Datei wird die Funktion fsolve() verwendet, um eine Nullstelle der Funktion trigger zu finden. Diese Funktion erhält als Argument einen x-Vektor, der aus R2 und URef besteht. Die Schaltschwellen US,max und US,min werden berechnet und in den internen Variablen Usmax und Usmin gespeichert. Zurückgegeben wird ein Spaltenvektor y, der jeweils für Tastverhältnis und Phasenverschiebung die Differenz zwischen Ist-Wert und Soll-Wert enthält.
Wichtig ist die Wahl eines geeigneten Anfangspunktes, da Octave abbricht, wenn während der Iteration einer der Werte im Ergebnisvektor komplex ist (z.B. weil das Argument eines Arcus-Sinus größer ist als 1).
# Gegebene Werte
global Uamax;
Uamax = 14.32; # Maximale Ausgangsspannung
global Uamin;
Uamin = -12.92; # Minimale Ausgangsspannung
global R1;
R1 = 4.71e3; # R1
global Ue;
Ue = 13; # Eingangs-Amplitude
global Ks;
Ks = 0.73; # Sollwert fuer Tastverhaeltnis
global phis;
phis = -172.0; # Sollwert fuer Phasenverschiebung
# Funktion, deren Nullstelle gesucht wird
function y = trigger(x)
global Uamax;
global Uamin;
global R1;
global Ue;
global Ks;
global phis;
Usmax = (R1 * Uamax + x(1) * x(2))/(R1 + x(1));
Usmin = (R1 * Uamin + x(1) * x(2))/(R1 + x(1));
y = [ 0.5+(asin(Usmax/Ue)+asin(Usmin/Ue))/(2*pi)-Ks
-180*(1-asin(Usmin/Ue)/pi)-phis ];
endfunction
[x,v,info] = fsolve(@trigger, [9.0e3; 10]);
if (1 == info)
printf('Loesung\nR2 = %g\nUref = %g\n', x(1), x(2));
else
printf("Leider keine Loesung gefunden!\n");
endif