Exempel 10 Gram Schmidts ortogonalisering

Har man två vektorer som är linjärt oberoende av varandra, kan man enkelt skapa ett ny par där vektorerna är dessutom ortogonala. Vi tar vektorn nummer två och substraherar därifrån 2:ans projektion på ettan:

> vec1:=vector(3,[1,2,3]);
vec2:=vector(3,[0,1,2]);
dotprod:=evalm(transpose(vec1) &* vec2);
aux:=evalm(transpose(vec1) &* vec1);

[Maple Math]

[Maple Math]

[Maple Math]

[Maple Math]

För att göra projektionen måste man multiplicera vec1 med inreprodukten mellan 1:an och 2:an och dela med 1:ans belopp:

> nyvec2:=evalm(vec2-(dotprod/aux) * vec1);
dotprod:=evalm(transpose(vec1) &* nyvec2);

[Maple Math]

[Maple Math]

Som sagt. Kommandot GramSchmidt gör detta på en gång:

> nypar:=GramSchmidt({vec1,vec2});

[Maple Math]

Första elementet är förstås vec1 . Vill man ta ut det andra elementet som en vektor, gör man:

> elem2:=convert(nypar[2],vector);

[Maple Math]

Det fina med GramSchmidt är att den ortogonaliserar också en bunt linjärt oberoende vektorer på en gång. Gör man det själv "för hand", måste man arbeta med en vektor i taget och hela tiden substrahera projektionen på alla tidigare vektorer. Läs dock i "help": Kommandot svarar även om vektorer inte var linjärt oberoende från början, som i följande exempel:

> vec3:=evalm(vec1+elem2);
GramSchmidt({vec1,vec2,vec3});

[Maple Math]

[Maple Math]