Mat-1.415 V3/2002 LA.mws

HA (osittain myös HH)  11.9.02

       

Alustukset, aliakset, kirjastot

>    restart:

Warning, the name changecoords has been redefined

>    with(linalg):
with(LinearAlgebra):

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the assigned name GramSchmidt now has a global binding

Edellinen on vanhempi, versiosta 6 alkaen on uudempi. Pyrimme etupäässä käyttämään uutta, mutta joskus

on mukavaa/välttämätöntä käyttää jotain vanhan kunnon linalgin  funktiota.

Koska uudet nimet ovat tosi pitkiä, kannattaa käyttää aliaksia:

>    alias(rref=ReducedRowEchelonForm):

>    alias(ref=GaussianElimination):  # "row echelon form"

>    alias(Det=Determinant,Id=IdentityMatrix):

Matriisien rakentelu ja laskutoimitukset

Rakentelu

Kaikki matriisit kannattaa ajatella muodostetuiksi ositetuista matriiseista.
Katsotaan seuraavassa muutamia esimerkkejä:

Sarake

>    <1,2,3>;

Vector(%id = 139947132)

Rivi

>    <1 | 2 | 3>;

Vector(%id = 139947292)

2x2-matriisi koottuna sarakkeittain

>    <<1,2>|<3,4>>;

Matrix(%id = 138569416)

2x2-matriisi koottuna riveittäin.

>    <<1 | 3>,<2 | 4>>;

Matrix(%id = 138774972)

Lopuksi yleinen ositettu tapaus

>    A := <<1,2>|<3,4>>:

>    <A | <1,2>>;

Matrix(%id = 140306492)

>    <<A | <1,2>>, <a|b|c>>;

Matrix(%id = 140369876)

Matriisin osia voi muutella päivittämällä riviä, saraketta tai osamatriisia (Matlabmaisesti)

>    B:=<<A | <1,2>>, <a|b|c>>;

B := Matrix(%id = 134787048)

>    B[1,1..-1]:=<x|x|x>: B;  # Muutetaan 1. rivi.

Matrix(%id = 134787048)

>    B[1,1..-2];

Vector(%id = 134750304)

>    B[1..-1,2]:=<haa,hii,hoo>: B;

Matrix(%id = 134787048)

>    B[2..3,[1,3]];

Matrix(%id = 137678800)

>    B[2..3,[1,3]]:=<<21,31>|<23,33>>: B;

Matrix(%id = 134787048)


Tässä oletetaan, että käytössä on vähintään versio 6. (Maple 6)

Laskutoimitukset

Käydään läpi perusoperaatiot esimerkkien avulla.

>    A := <<1,2>|<3,4>>:
B := <<a,b>|<c,d>>:

Kertolasku

>    A . B;

Matrix(%id = 138896792)

Transpoosi

>    Transpose(A);

Matrix(%id = 138723068)

Gaussin eliminaatio rivioperaatioilla ("käsin)

Aloitetaan restartista.

>    restart:with(linalg):
with(LinearAlgebra):

Warning, the name changecoords has been redefined

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the assigned name GramSchmidt now has a global binding

Esim:

>    A := <<1,1,0,1>|<-1,1,2,-3>|<1,2,1,0>|<0,4,4,-4>|<0,1,3,-2>|<2,2,1,1>>;

A := Matrix(%id = 135973536)

>    b:=<0,3,2,0>:

>    Ab:=<A|b>;

Ab := Matrix(%id = 140922844)

>    Ab[2,1..-1]:=Ab[2,1..-1]-Ab[1,1..-1]: Ab;

Matrix(%id = 140922844)

>    Ab[4,1..-1]:=Ab[4,1..-1]-Ab[1,1..-1]: Ab;

Matrix(%id = 140922844)

1. sarake nollattu. Siirrytään 2. sarakkeeseen.

>    Ab[3,1..-1]:=Ab[3,1..-1]-Ab[2,1..-1]:

>    Ab[4,1..-1]:=Ab[4,1..-1]+Ab[2,1..-1]: Ab;

Matrix(%id = 140922844)

2. sarake nollattu. Seuraava pivot on sarakkeessa 5.

>    Ab[4,1..-1]:=Ab[4,1..-1]+(1/2)*Ab[3,1..-1]: Ab;

Matrix(%id = 140922844)

Ratkaise nyt "käsin"!

>    x6:=solve(-1/2*x=5/2,x);

x6 := -5

x5 ja x4 vapaita.

>    x5:=solve(2*x+x6=-1,x);

x5 := 2

Jne.   Kaikenkaikkiaan 2 vapaata parametria,x4 ja x3.  

Jos haluttaisiin sarakepermutaatioita, niin näin:

>    Ab[1..-1,[3,5]]:=Ab[1..-1,[5,3]]:Ab[1..-1,[4,6]]:=Ab[1..-1,[6,4]]: Ab;

Matrix(%id = 140922844)

>   

Gaussin eliminaatio valmiilla funktioilla,  aliakset ref ja rref

>    restart:with(linalg):
with(LinearAlgebra):

Warning, the name changecoords has been redefined

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the assigned name GramSchmidt now has a global binding

>    alias(rref=ReducedRowEchelonForm):

>    alias(ref=GaussianElimination):  # "row echelon form"

>    A := <<1,1,0,1>|<-1,1,2,-3>|<1,2,1,0>|<0,4,4,-4>|<0,1,3,-2>|<2,2,1,1>>;

A := Matrix(%id = 135185388)

>    b:=<0,3,2,0>:Ab:=<A|b>;

Ab := Matrix(%id = 137326340)

>    ref(Ab);

Matrix(%id = 137015752)

>    rref(Ab);

Matrix(%id = 135278008)

>   

>   

Takaisinsijoitus ref-muodosta sekä rref-muoto,LinearSolve

>    E:=<<1,0,0>|<-7,1,0>|<2,-3,0>|<-5,3,1>|<8,1,-1>|<10,-5,4>>;

E := Matrix(%id = 135592008)

>    LinearSolve(E[1..-1,1..-2],E[1..-1,-1]);

Vector(%id = 135179668)

Tässä laskettu "käsin":

>    x4:=x5+4;x2:=3*x3-4*x5-17;

x4 := x5+4

x2 := 3*x3-4*x5-17

>    x1:=7*x2-2*x3+5*x4-8*x5+10;

x1 := 19*x3-31*x5-89

Ratkaisu voidaan kirjoittaa muodossa lineaarikombinaatio kahdesta vektorista + vakiovektori.

(Luennolla)

Jatketaan harjoituksen vuoksi  saattamalla E rref-muotoon.

>    E;

Matrix(%id = 135592008)

>    E[2,1..-1]:=E[2,1..-1]-3*E[3,1..-1]: E;

Matrix(%id = 135592008)

>    E[1,1..-1]:=E[1,1..-1]+5*E[3,1..-1]: E;

Matrix(%id = 135592008)

>    E[1,1..-1]:=E[1,1..-1]+7*E[2,1..-1]: E;

Matrix(%id = 135592008)

>   

>   

rref-muoto on nyt valmis. Tukisarakkeet: 1,2,4, vapaat muuttujat x3 ja x5.

Ratkaisut voidaan nyt kirjoittaa suoraan ratkaisemalla jokaisesta yhtälöstä ao. kantamuuttuja vapaiden muuttujien avulla.

Erityisen mukavaa käsinlaskussa.