3 Scilab |
Mit
[Lösung, Abweichung, info] = fsolve(Startpunkt, Funktion [, JMF]);
wird nach Nullstellen der angegebenen Funktion gesucht. Diese Funktion verarbeitet einen Vektor mit n Elementen als Eingabe und gibt als Ergebnis einen Vektor mit m Elementen zurück.
Die optionale Funktion JMF berechnet die Jacobi-Matrix der Funktion, d.h. die Ableitung aller Ergebniskomponenten nach allen Argumentkomponenten.
Im Beispiel soll der Schnittpunkt der drei Flächen
bestimmt werden, siehe Abb. ganz oben.
Aus
ergibt sich das Gleichungssystem:
Mit
ergibt sich:
Für die numerische Lösung mit Scilab müssen wir unser Gleichungssystem in Scilab-Notation bringen:
Mit der Datei
// Nichlineares Gleichungssystem
function [y] = f(x)
y = zeros(2,1);
y(1) = 10 / (x(1)+x(2)) -1 - sqrt(10 - x(1) - x(2));
y(2) = 10 / (x(1) + x(2)) - 10 / (5 + x(1) - x(2));
endfunction
function [y] = jmf(x)
y = zeros(2, 2);
y(1,1) = 1/(2*sqrt(10-x(1)-x(2))) - 10/((x(1)+x(2))^2);;
y(1,2) = 1/(2*sqrt(10-x(1)-x(2))) - 10/((x(1)+x(2))^2);
y(2,1) = 10/((5+x(1)-x(2))^2) - 10/((x(1)+x(2))^2);
y(2,2) = -10/((x(1)+x(2))^2) - 10/((5+x(1)-x(2))^2);
endfunction
[x, v, info] = fsolve([0.5; 2.0], f, jmf);
if (1 == info) then
mprintf("x = %g\ny = %g\nz = %g\n", x(1), x(2), (10/(x(1)+x(2))));
else
mprintf("Leider keine Loesung gefunden!\n")
end
wird die Lösung
x = 0.201562 y = 2.5 z = 3.70156
gefunden.
Die Scilab-Funktion f(x) berechnet die
Funktionswerte, die Funktion jmf(x) die
Jacobi-Matrix.
In beiden Funktionen wird zunächst mit zeros() ein mit
Nullen gefüllter Vektor bzw. eine mit Nullen gefüllte Matrix mit
den erforderlichen Abmessungen angelegt. Anschließend werden die
berechneten Werte in den Ergebnisvektor bzw. die Ergebnismatrix
eingetragen.
Siehe auch Beispiel Berechnungen am Trigger.