Stelsels lineaire vergelijkingen: Stelsels lineaire vergelijkingen oplossen in MATLAB
Stelsels oplossen via linsove en solve
MATLAB heeft voldoende ingebouwde faciliteiten om stelsels lineaire vergelijkingen numeriek op te lossen. We illustreren ze aan de hand van het stelsel met één oplossing, namelijk
We beginnen met het stelsel van vergelijkingen in te toetsen in een MATLAB sessie en dan de bijpassende matrixvorm te bepalen met het commando equationsToMatrix
.
>> syms x y z
>> sys = [x + 2*y + 3*z == 2, y + 2*z == 1, 3*x + y + z == 3];
>> [A,b] = equationsToMatrix(sys)
A =
[ 1, 2, 3]
[ 0, 1, 2]
[ 3, 1, 1]
b =
2
1
3
We kunnen nu linsolve
gebruiken om de vector te vinden zodanig dat
>> v = linsolve(A,b)
v =
1
-1
1
De oplossing van het oorspronkelijke stelsel staat hier voor en deze oplossing hadden we ook via solve
kunnen vinden zonder op de matrixvorm over te gaan.
>> opl = solve(sys, [x, y z]);
>> v = [opl.x, opl.y, opl.z]; v
v =
[ 1, -1, 1]
Voordeel van de matrixvorm is dat je de theorie voor het oplossen van vergelijkingen beter in de hand hebt. Zo kun je bijvoorbeeld Gauss-eliminatie toepassen om het stelsel op te lossen. De naam van de functie rref
is een acroniem voor reduced row echelon form, iets wat wij de (rij)gereduceerde trapvorm noemen.
>> Ab = [A,b]; Ab % de gerande matrix
Ab =
[ 1, 2, 3, 2]
[ 0, 1, 2, 1]
[ 3, 1, 1, 3]
>> rref(Ab) % berekening van de gereduceerde trapvorm
ans =
[ 1, 0, 0, 1]
[ 0, 1, 0, -1]
[ 0, 0, 1, 1]
>> ans(:,4) % selectie van de vierde kolom
ans =
1
-1
1
In MATLAB kun je dit ook uitrekenen door 'omgekeerde deling':
>> A\b
ans =
1
-1
1