LinAlg Maple Manual 5 

> restart:with(LinearAlgebra):
 

Gram-Schmidt 

Der findes i pakken LinAlg en kommando GramSchmidt , som vi illustrerer brugen af. 

Betragt de tre vektorer  

> a1:=<1,2,0,-1>;a2:=<0,1/2,-1,3>; a3:=<-2,1,0,-1>;
 

>
 

 

 

Vector[column](%id = 50540852)
Vector[column](%id = 50928672)
Vector[column](%id = 50934164) (1.1)
 

Gram-Schmidt ortogonalisering på disse vektorer giver 

> GramSchmidt([a1,a2,a3]);
 

[Vector[column](%id = 50983380), Vector[column](%id = 51063492), Vector[column](%id = 51090096)] (1.2)
 

Bemærk, at første vektor er uændret. Ved Gram-Schmidt ortogonalisering afhænger resultatet af række følgen af vektorerne 

> GramSchmidt([a2,a3,a1]);
 

[Vector[column](%id = 51124740), Vector[column](%id = 51147004), Vector[column](%id = 51170384)] (1.3)
 

Hvis man ønsker at ortonormalisere skal man tilføje normalized=true: 

> GramSchmidt([a1,a2,a3], normalized=true);
 

[Vector[column](%id = 51200896), Vector[column](%id = 51225620), Vector[column](%id = 51248136)] (1.4)
 

eller  

> T:=GramSchmidt([a2,a3,a1], normalized=true);
 

[Vector[column](%id = 51362268), Vector[column](%id = 51384032), Vector[column](%id = 51408884)] (1.5)
 

Bemærk igen, at rækkefølgen er vigtig. 

Hvis man vil checke om disse vektorer virkelig er ortonormale kan vi bruge kommandoen DotProduct . Vi benytter at vektorerne kan skrives 

> [T[1],T[2],T[3]];
 

[Vector[column](%id = 51362268), Vector[column](%id = 51384032), Vector[column](%id = 51408884)] (1.6)
 

> DotProduct(T[3],T[3]),DotProduct(T[2],T[3]);
 

1, 0 (1.7)
 

Eller alle produkterne 

> seq(seq(DotProduct(T[i],T[j]), i=1..3), j=1..3);
 

1, 0, 0, 0, 1, 0, 0, 0, 1 (1.8)
 

Koordinatskift.  

Hvis vi har en gammel basis gamma[1],...,gamma[n] (gamma for gammel) og en ny basis nu[1],...,nu[n] (nu for ny) for et n-dimensionalt vektorrum, ønsker vi at finde den matrix 

S der skifter fra gamle koordinater til nye koordinater. Atlså den matrix, der opfylder at Sx=y, hvis  

Typesetting:-delayDotProduct(x[1], gamma[1], true)+...+`*`(x[n], `*`(gamma[n]))=Typesetting:-delayDotProduct(y[1], nu[1], true)+...+`*`(y[n], `*`(nu[n])). Her er et eksempel udregnet i maple:  

Eksempel: Skift af koordinater mellem to vilkårlige baser i `*`(`^`(R, 3)) 

Find den matrix der skifter mellem koordinaterne i den gamle basis: 

> unprotect(gamma):gamma[1]:=<1,0,1>;gamma[2]:=<1,2,-1>;gamma[3]:=<0,3,-1> ;
 

 

 

Vector[column](%id = 51563516)
Vector[column](%id = 51568700)
Vector[column](%id = 51576716) (2.1.1)
 

til koordinaterne i den nye basis: 

> nu[1]:=<1,1,1>; nu[2]:=<0,1,-1>; nu[3]:=<2,-4,3>;
 

 

 

Vector[column](%id = 51581940)
Vector[column](%id = 51589452)
Vector[column](%id = 51597284) (2.1.2)
 

Ligningen `+`(Typesetting:-delayDotProduct(x[1], gamma[1], true), Typesetting:-delayDotProduct(x[2], gamma[2], true), Typesetting:-delayDotProduct(x[3], gamma[3], true)) = `+`(Typesetting:-delayDotProduct(y[1],... kan skrives GAMMA x=N y, hvor  

> unprotect(Gamma):Gamma:=<<1,0,1>|<1,2,-1>|<0,3,-1>>; N:=<<1,1,1>|<0,1,-1>|<2,-4,3>>;
 

 

Matrix(%id = 51605592)
Matrix(%id = 51627796) (2.1.3)
 

Derfor bliver  

> S:=N^(-1).Gamma;
 

Matrix(%id = 52530724) (2.1.4)
 

Husk at søjlerne i S er de nye koordinater til de gamle basisvektorer. F.eks. har gamma[1] altså de nye koordinater (3/5, 1/5,1/5).  

Det betyder at følgende udtryk er nulvektoren 

> (3/5)*nu[1]+(1/5)*nu[2]+(1/5)*nu[3]-gamma[1];
 

Vector[column](%id = 52645904) (2.1.5)
 

Skift af matrixrepræsentation for endomorfi 

Hvis man har en endomorfi (en lineær afbildning fra et vektorrum ind i sig selv) vil den i en given basis være repræsenteret ved en kvadratisk matrix A. Hvis man nu skifter til en ny basis vil den nye matrix, der repræsenterer endomorfien være givet ved `/`(`*`(Typesetting:-delayDotProduct(S, A, true)), `*`(S)), hvor S er koordinattransformationsmatricen.  

 

Hvis man er givet to kvadratiske matricer, kan man spørge, om de kan repræsentere samme lineære afbildning og i givet fald, hvilken koordinattransformationsmatrix der fører den ene over i den anden. Matricer der kan repræsentere samme lineære afbildning kaldes similære og i Maple  

har man en kommando IsSimilar , (fra pakken LinearAlgebra ) til at afgøre om to matricer er det. 

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

 

 

Matrix(%id = 52654164)
Matrix(%id = 52655940)
Matrix(%id = 52661044) (2.2.1)
 

> IsSimilar(A,B);
 

false (2.2.2)
 

> IsSimilar(B,C);
 

true (2.2.3)
 

Man kan også finde koordinattransformationsmatricen 

> S0:=IsSimilar(B,C,output='C');
 

Matrix(%id = 53288528) (2.2.4)
 

Når man skriver output='C' står C for Coordinate Transformation Matrix. Vi checker at `/`(`*`(Typesetting:-delayDotProduct(S, B, true)), `*`(S)) = C 

> S0.B.S0^(-1)-C;
 

Matrix(%id = 53466652) (2.2.5)
 

>
 

>