3 Scilab | |
→ | 3.16 Beispiele |
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, indem 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 Scilab-Notation übertragen:
In der Scilab-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 Scilab 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
Uamax = 14.32; // Maximale Ausgangsspannung
Uamin = -12.92; // Minimale Ausgangsspannung
R1 = 4.71e3; // R1
Ue = 13; // Eingangs-Amplitude
Ks = 0.73; // Sollwert fuer Tastverhaeltnis
phis = -172.0; // Sollwert fuer Phasenverschiebung
// Funktion, deren Nullstelle gesucht wird
function y = trigger(x)
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([9.0e3; 10], trigger);
if(1 == info) then
printf('Loesung\nR2 = %g\nUref = %g\n', x(1), x(2));
else
printf("Leider keine Loesung gefunden!\n");
end