xxii Handleiding Maple 10 dat geval kun je van de vectorvergelijking een stelsel vergelijkingen maken in de vorm van een verzameling of een lijst naar keuze en dit stelsel te lijf gaan met solve of andere middelen, zoals eventueel met het Gröbner-pakket, zie paragraaf ??. Hier volgt een voorbeeld van een vectorvergelijking waarvan een verzameling vergelijkingen gemaakt wordt. Voorbeeld 1.19 Vectorvergelijking vergelijkingen a2 + b 2 b −c b c omzetten naar een verzameling 1 = 2 3 Deze vectorvergelijking impliceert een verzameling vergelijkingen. We willen hiervan de reële oplossing hebben. > > > restart; interface(displayprecision=3): u,v:=Vector([a^2+b,b^2-c,b/c]),Vector([1.0,2,3]); a2 + b 1.000 2 b − c , u, v := 2 b 3 c verzameling:={seq(u[i]=v[i],i=1..nops(u))}; b verzameling := {a2 + b = 1.000, b2 − c = 2, = 3} c use RealDomain in solve(verzameling,{a,b,c}) end; {b = −1.257, a = 1.502, c = −0.419}, {b = −1.257, c = −0.419, a = −1.502} Toelichting: Het activeren van het LinearAlgebra-pakket is voor dit voorbeeld niet nodig. Je ziet dat je met één handomdraai het stelsel vergelijkingen kunt maken in de vorm van een verzameling met accolades (of eventueel een lijst met vierkante haken). Zie voor het maken van een rij met seq in paragraaf ?? en nops(u) betekent het aantal operanden (kentallen) van de vector u (zie paragraaf ??). In het begin van de sessie is de displayprecision (zie blz. ??) wat lager gezet met het oog op de numerieke benadering van de oplossing en de overzichtelijkheid op het scherm. Omdat we wellicht alleen geïnteresseerd zijn in de reële oplossingen van het stelsel vergelijkingen is het hier interessant om in het Reële domein het commando solve te laten werken met RealDomain (zie ook paragraaf ??). De oplossing in R3 van deze vectorvergelijking is dus S = {(−1.502 , −1.257 , −0.419) , (1.502 , −1.257 , −0.419)}. De mogelijkheden met eventuele complexe oplossingen worden op deze manier weggelaten. 1.5.2 Lineaire vergelijkingen Als de vectorvergelijking lineair is in de onbekenden, kan er met matrixrekening gewerkt worden. De vergelijking A x = b is in feite een vectorvergelijking. Hierbij stelt A een matrix voor, x is de onbekende vector en b is de rechterlid-vector. In feite kan A als een lineaire afbeelding opgevat worden waarbij x op de vector b wordt afgebeeld. 1 · Lineaire algebra xxiii 1.5.2.1 Verschillende gedaanten van een stelsel lineaire vergelijkingen Je kunt een stelsel lineaire vergelijkingen in verschillende gedaanten invoeren en presenteren en eventueel omzetten van de ene naar de andere vorm. Voorbeeld 1.20 Van een stelsel vergelijkingen naar een matrix en omgekeerd Je kunt beginnen met het opgeven van een stelsel vergelijkingen, maar je kunt ook uitgaan van een coëfficiëntenmatrix en een rechterlid-vector. > restart; with(LinearAlgebra): A,b:=Matrix([[2,0,1],[p,1,1],[4,p,0]]),Vector([0,3,8]); 0 2 0 1 A, b := p 1 1 , 3 8 4 p 0 > VectorVerg:=A . <x1,x2,x3> =b; 2 x1 + x3 0 VectorVerg := p x1 + x2 + x3 = 3 4 x1 + p x2 8 TIP: Tik een spatie tussen > = ,anders wordt dit teken verkeerd opgevat! > StelselVerg:=GenerateEquations(A,[x1,x2,x3],b); StelselVerg := [2 x1 + x3 = 0, p x1 + x2 + x3 = 3, 4 x1 + p x2 = 8] > > A1,b1:=GenerateMatrix(StelselVerg,[x1,x2,x3]); 2 0 1 0 A1 , b1 := p 1 1 , 3 4 p 0 8 Ab:=GenerateMatrix(StelselVerg,[x1,x2,x3],augmented=true); 2 0 1 0 Ab := p 1 1 3 4 p 0 8 Toelichting: De coëfficiëntenmatrix A en de rechterlid-vector b worden door middel van een meervoudige toekenning ingevoerd waarna de vectorvergelijking gepresenteerd kan worden. Met GenerateEquations uit het LinearAlgebra-pakket kan het stelsel vergelijkingen in de vorm van een lijst verkregen worden uit A en b. Wel moet daarbij de lijst met variabelen [x1 , x2 , x3 ] opgegeven worden in de gewenste volgorde. Het werken met lijsten garandeert het handhaven van de volgorde! (Op deze lijst van vergelijkingen kan eventuleel het commando solve (dat tegenwoordig ook op lijsten werkt) worden losgelaten zodat direct het stelsel vergelijkingen opgelost kan worden.) Andersom: uitgaande van een stelsel vergelijkingen (in de vorm van een lijst of verzameling) kan in één keer de coëfficiëntenmatrix worden gegenereerd, samen met de rechterlid-vector met het commando GenerateMatrix. Dit commando is bijzonder krachtig en handig in het geval de vergelijkingen met de variabelen door elkaar ingevoerd zijn! Doe dan metéén de tweevoudige toekenning om coëfficiëntenmatrix en rechterlid-verctor te krijgen (hier A1 en B1 genoemd). Met behulp van de optie augmented=true krijg je als uitvoer de aangevulde matrix die belangrijk kan zijn xxiv Handleiding Maple 10 voor eventueel verdere bewerking. Zie paragraaf 1.5.3 met de Gauss-eliminatie en ook voor het werken met de Maplets, zie onder andere voorbeeld 1.23. Voorbeeld 1.21 Met een Maplet de aangevulde matrix maken Ten slotte kun je met de MatrixBuilder in de vorm van een Maplet de aangevulde matrix én het stelsel vergelijkingen naast elkaar zien en eventueel aanpassen. > Student:-LinearAlgebra:-MatrixBuilder(Ab); Zie Figuur 1.7 Figuur 1.7 Bij het afsluiten van dit Maplet, komt de aangevulde matrix in het worksheet te staan, klaar voor verdere berekeningen. 1.5.2.2 Oplossen met de inverse matrix-methode De vectorvergelijking in matrixvorm kan in bepaalde omstandigheden gemakkelijk opgelost worden met de inverse matrix-methode. Dat houdt het volgende in: A x = b ⇒ x = A−1 b Deze methode werkt vanzelfsprekend alleen maar als de inverse matrix bestaat. Dat wil zeggen dat A in ieder geval vierkant moet zijn en ook nog regulier (determinant 6= 0). Voorbeeld 1.22 Oplossen van een stelsel lineaire vergelijkingen (inverse matrix-methode) Neem de vectorvergelijking in matrixvorm van voorbeeld 1.20 en maak de matrix A en de rechterlid-vector b eerst actief. Met de inverse matrixmethode kan deze vergelijking vervolgens opgelost worden. > Vector([x1,x2,x3])=simplify(MatrixInverse(A).b); 3p − 8 −2 p + p2 − 4 x1 4 (−7 + 2 p) x2 = 2 −2 p + p − 4 x3 2 (3 p − 8) − −2 p + p2 − 4 1 · Lineaire algebra xxv Toelichting: Met de inverse matrix-methode kan metéén de oplossingsvector gegenereerd worden. De breuken worden herleid met simplify dat tegenwoordig ook direct op het gehele object (vector) kan worden toegepast. Als er eventueel nog andere manipulaties met de kentallen van een vector gedaan moeten worden, kun je met map proberen. Elk element van de vector x afzonderlijk, kan daarmee in één keer nog behandeld worden. Zie voor het commando map paragraaf ??. 1.5.2.3 Afhankelijke, onafhankelijke en strijdige stelsels lineaire vergelijkingen Aan de hand van enkele voorbeelden wordt een aantal mogelijkheden getoond hoe te handelen in verschillende omstandigheden. Voorbeeld 1.23 Onafhankelijk stelsel vergelijkingen Gegeven is het stelsel vergelijkingen: x1 + 3 x2 + 7 x3 = 15 x1 + 4 x2 + x3 = 20 x1 + 2 x2 + 3 x3 = 10 Voer deze vergelijkingen stuk voor stuk in en controleer ze. De vergelijkingen mogen ook in andere volgorde ingevoerd worden met de variabelen door elkaar, het matrix-systeem brengt er automatisch ordening in! > > restart: with(LinearAlgebra): verg1:=x1+3*x2+7*x3=15; verg2:=x1+4*x2+x3=20; verg3:=x1+2*x2+3*x3=10; verg1 := x1 + 3 x2 + 7 x3 = 15 verg2 := x1 + 4 x2 + x3 = 20 verg3 := x1 + 2 x2 + 3 x3 = 10 A,b:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3]); 1 3 7 15 A, b := 1 4 1 , 20 1 2 3 10 Met de coëfficiëntenmatrix is meteen de oplossing te genereren met de inverse matrix-methode: A x = b ⇒ x = A−1 b. > Vector([x1,x2,x3])=MatrixInverse(A).b; x1 0 x2 = 5 x3 0 Met de aangevulde matrix kun je op verschillende manieren op onderzoek uitgaan: > > Ab:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3],augmented=true); 1 3 7 15 Ab := 1 4 1 20 1 2 3 10 Student:-LinearAlgebra:-LinearSystemPlotTutor( Ab ); Figuur 1.8 geeft in het Maplet van de LinearSystemPlotTutor een visualisatie van het lineaire systeem: de drie lineaire vergelijkingen met drie variabelen stellen drie xxvi Handleiding Maple 10 vlakken in de ruimte voor en wellicht is te zien dat inderdaad deze vlakken door één punt gaan: het punt (0, 5, 0). Figuur 1.8 > > Determinant(A); −10 solve({verg1,verg2,verg3},{x1,x2,x3}); {x1 = 0, x3 = 0, x2 = 5} Wellicht ten overvloede is te zien dat de determinant van de coëfficiëntenmatrix ongelijk is aan 0 en dat ook direct een oplossing met solve gevonden had kunnen worden omdat we te maken hadden met een onafhankelijk stelsel vergelijkingen. De aangevulde matrix Ab geeft goede mogelijkheden om op onderzoek te gaan. In het Maplet kan verder onderzocht worden wat het effect is van het veranderen van een van de coëfficiënten van de matrix. Voorbeeld 1.24 Afhankelijk stelsel vergelijkingen Gegeven is het stelsel vergelijkingen: 2 x1 + 3 x2 + 7 x3 = 15 x1 + 4 x2 + x3 = 20 x1 + 2 x2 + 3 x3 = 10 Dit stelsel is bijna hetzelfde als van voorbeeld 1.23. Alleen in de eerste vergelijking is de coëfficiënt van x1 veranderd. In het Maplet kan het stelsel veranderd worden en het effect kan meteen zichtbaar gemaakt worden in de grafiek van de drie vlakken die nu niet meer door één punt gaan maar een snijlijn hebben. Figuur 1.9 laat zien wat het effect kan zijn van een kleine verandering aan een van de coëfficiënten. Er zijn in dit geval dus oneindig veel oplossingen die allemaal op de snijlijn liggen van de drie vlakken. > restart: with(LinearAlgebra): verg1:=2*x1+3*x2+7*x3=15: verg2:=x1+4*x2+x3=20: verg3:=x1+2*x2+3*x3=10: A,b:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3]): Determinant(A); 0 1 · Lineaire algebra xxvii Figuur 1.9 > solve({verg1,verg2,verg3},{x1,x2,x3}); {x2 = 5 + x3 , x1 = −5 x3 , x3 = x3 } Toelichting: De inverse matrixmethode werkt nu niet, want de determinant van de vierkante matrix is gelijk aan 0 (singuliere matrix ). Aan de oplossing van het stelsel (verkregen met solve), is te zien dat er geen eenduidige oplossing is. Immers x3 is vrij te kiezen en x1 en x2 zijn uitgedrukt in x3 . Dit is een voorbeeld van een afhankelijk stelsel lineaire vergelijkingen. Om dat er één variabele vrij te kiezen is, heeft dit stelsel dus één vrijheidsgraad en kun je bijvoorbeeld x3 = λ stellen. De oplossing (vergelijking van de snijlijn) kan in de vorm van een vectorvoorstelling 0 −5 geschreven worden: x= 5 + λ 1 . Zie voor meer informatie over deze 0 1 stelsels bij de Eliminatie van Gauss paragraaf 1.5.3. Voorbeeld 1.25 Strijdig stelsel vergelijkingen Het volgende stelsel vergelijkingen is een strijdig stelsel. In vergelijking met het stelsel van voorbeeld 1.24, is er in de rechterlidvector het tweede kental veranderd. Je kunt in de LinearSystemPlotTutor wijzigingen aanbrengen en meteen het effect zien in de visualisatie. Zie Figuur 1.10. > restart: with(LinearAlgebra): > verg1:=2*x1+3*x2+7*x3=15; verg2:=x1+4*x2+x3=22; verg3:=x1+2*x2+3*x3=10; > Ab:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3],augmented=true); > solve({verg1,verg2,verg3},{x1,x2,x3}); > Student:-LinearAlgebra:-LinearSystemPlotTutor( Ab ); Zie Figuur 1.10. Toelichting: Het blijkt dat als je met solve werkt, dat er dan geen enkele oplossing komt. Met de aangevulde matrix Ab kan onderzocht worden wat er aan de hand is. Het blijkt dat de vlakken elkaar twee aan twee snijden volgens lijnen die evenwijdig zijn. Er is dus geen punt aan te wijzen dat op alle drie vlakken ligt; het stelsel is dan ook een strijdig stelsel. xxviii Handleiding Maple 10 Figuur 1.10 1.5.3 Eliminatiemethode van Gauss De eliminatiemethode van Gauss is een systeem om rijen van een matrix te manipuleren (veegmethode) zodat er een nieuwe matrix ontstaat die gelijkwaardig is aan de oude matrix. Zoals in de vorige voorbeelden reeds aan de orde is gekomen, representeren de rijen van de aangevulde coëfficiëntenmatrix de vergelijkingen inclusief het rechterlid. Het vegen van een matrix met pen en papier kan getraind worden met een Maplet, LinearSolveTutor uit het sub-pakket LinearAlgebra van het Student-pakket. > Student:-LinearAlgebra:-LinearSolveTutor(); De eliminatiemethode van Gauss kan ook numeriek uitgevoerd worden. Zet in dat geval de displayprecision wat lager (zie blz. ??). Een waarschuwing is hier dan wel op zijn plaats: als de coëfficiëntenmatrix gelijk aan 0 is of bijna gelijk aan 0, dan hebben we te maken met een slecht geconditioneerd stelsel. Er hoeft dan maar een kleine numerieke afronding plaats te vinden waardoor de oplossing zeer onbetrouwbaar kan worden. Immers bij een afhankelijk stelsel zoals in voorbeeld 1.24, kan een kleine storing in de coëfficiënten van de matrix ervoor zorgen dat een van de vlakken een beetje kantelt en de vlakken elkaar wél in één punt snijden. In de volgende voorbeelden wordt getoond welke informatie je krijgt als de Eliminatiemethode van Gauss wordt toegepast. Voorbeeld 1.26 Onafhankelijk stelsel met Gauss Het stelsel vergelijkingen van voorbeeld 1.23 wordt opgelost met de Eliminatiemethode van Gauss. > restart; with(LinearAlgebra): verg1:=x1+3*x2+7*x3=15: verg2:=x1+4*x2+x3=20:verg3:=x1+2*x2+3*x3=10: Ab:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3],augmented=true); 1 3 7 15 Ab := 1 4 1 20 1 2 3 10 Op de aangevulde matrix Ab wordt nu het veegsysteem van Gauss toegepast. Het komt er eigenlijk op neer dat je met de vergelijkingen manipuleert door middel van lineaire bewerkingen. 1 · Lineaire algebra xxix > AbGauss:=GaussianElimination(Ab); 1 3 7 15 AbGauss := 0 1 −6 5 0 0 −10 0 Na het ‘vegen’ heeft de onderste rij nu de meeste nullen en het ziet er allemaal wat schoner uit. Het stelsel vergelijkingen dat hiermee overeenkomt is gelijkwaardig aan het oorspronkelijke stelsel maar nu gemakkelijker (uit het hoofd) op te lossen. Voor de duidelijkheid wordt dit geveegde stelsel op het scherm gepresenteerd met GenerateEquations. > GenerateEquations(AbGauss,[x1,x2,x3]); [x1 + 3 x2 + 7 x3 = 15, x2 − 6 x3 = 5, −10 x3 = 0] Duidelijk is te zien dat je van achter naar voor nu uit het hoofd de vergelijkingen achtereenvolgens kunt oplossen en kunt beschikken over de waarden van de onbekenden. Dit achterwaarts substitueren (terugsubstitutie), kan met BackwardSubstitute dat werkt op de aangevulde matrix, die inmiddels geveegd is met de Gaussmethode. > Vector([x1,x2,x3])=BackwardSubstitute(AbGauss); 0 x1 = x2 5 0 x3 Als je wilt kun je nog drastischer verder gaan vegen tot er allemaal nullen en enen in de aangevulde matrix staan, met het commando ReducedRowEchelonForm. Dit wordt de GaussJordan-methode genoemd. > AbGaussJordan:=ReducedRowEchelonForm(Ab); 1 0 0 0 AbGaussJordan := 0 1 0 5 0 0 1 0 Hierna is zelfs heel gemakkelijk uit het hoofd de oplossing van het stelsel vergelijkingen te maken. > GenerateEquations(AbGaussJordan,[x1,x2,x3]); [x1 = 0, x2 = 5, x3 = 0] TIP: Met de Tutor in de vorm van een Maplet is de veegmethode met pen en papier te oefenen. > Student:-LinearAlgebra:-LinearSolveTutor(); Voorbeeld 1.27 Afhankelijk en strijdig stelsel met Gauss Los het stelsel vergelijkingen van voorbeeld 1.24 (afhankelijk stelsel) en 1.25 (strijdig stelsel) op met de Gauss-eliminatiemethode. Werk níet numeriek in het geval dat de determinant van de coëfficiëntenmatrix gelijk is aan 0 want dan kan het zijn dat het selsel niet meer afhankelijk of strijdig is door numerieke afrondingen die kunnen onstaan. Na het vegen met Gauss van de aangevulde coëfficiëntenmatrix van het afhankelijke stelsel krijg je één nulrij. Je zult zien dat je nu inderdaad één variabele (x3 ) vrij kunt kiezen, (één vrijheidsgraad) net als bij de methode met solve. Maple stelt deze parameter gelijk aan _t1 . De uitvoer is hier niet afgedrukt. Bij het strijdige stelsel xxx Handleiding Maple 10 zal bij de geveegde matrix opvallen dat de onderste rij uit nullen bestaat behalve het laatse element van die rij. Dit duidt op een strijdige vergelijking waarmee het hele stelsel dus strijdig is. Het voordeel van de Gauss-eliminatie is dat er een onderzoek kan plaatsvinden over het aantal onafhankelijke vergelijkingen in een stelsel en er kan iets gezegd worden over het aantal vrijheidsgraden van de oplossing. 1.5.4 Kleinstekwadratenmethode Voorbeeld 1.28 Een overbepaald stelsel vergelijkingen Gegeven is het overbepaalde stelsel vergelijkingen. y = 2 x − x + 2y = 2 8x + y = 14 Dit stelsel vergelijkingen (drie lijnen in het platte vlak) is niet op te lossen met solve en ook niet met de Gauss-eliminatiemethode. Er zijn namelijk meer vergelijkingen dan onbekenden! De coëfficiëntenmatrix is niet vierkant en de inverse matrix-methode werkt dan ook niet. Van dit stelsel wil je met de kleinste kwadraten-methode een zo goed mogelijke oplossing hebben. Vorm daartoe de coëfficiëntenmatrix A en de rechterlid-vector b. Met het commando LeastSquares is een oplossing van het stelsel te formuleren waaraan ten grondslag ligt dat |A x − b| minimaal moet zijn. > > restart; with(LinearAlgebra):interface(displayprecision=3): verg1,verg2,verg3:=x-y=2.0,x+2*y=2,8*x+y=14; verg1 , verg2 , verg3 := x − y = 2.000, x + 2 y = 2, 8 x + y = 14 A,b:=GenerateMatrix([verg1,verg2,verg3],[x,y]); 1 −1 2.000 A, b := 1 2 , 2 8 > > LeastSquares(A,b); 1 14 " # 1.752 0.038 Ab:=GenerateMatrix([verg1,verg2,verg3],[x,y],augmented=true): Student:-LinearAlgebra:-LinearSystemPlotTutor( Ab ); Toelichting: Er is een ander commando met dezelfde naam LeastSquares in het Curve fitting-pakket. Zorg dat niet beide pakketten tegelijk geactiveerd moeten worden, anders kan het van belang zijn welk pakket het eerst geopend wordt. Zie paragraaf ??. Als het stelsel vergelijkingen is ingevoerd, kan de matrix A en de rechterlid-vector b worden gegenereerd. Met de LinearSystemPlotTutor (die werkt met de aangevulde matrix Ab) is in Figuur 1.11 te zien dat ergens in het driehoekje, gevormd door de drie lijnen, de oplossing (1.752, 0.038) ligt. 1 · Lineaire algebra Figuur 1.11 xxxi