L10maple

 17-22.10.02

                                                  Sisätulo, normi ja ortogonaalisuus

Alustukset

>    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

>    alias(rref=ReducedRowEchelonForm): alias(ref=GaussianElimination):  alias(Diag=DiagonalMatrix,Id=IdentityMatrix):
with(plots):

>    alias(Dot=DotProduct,Id=IdentityMatrix,T=Transpose):

Konjugointisäännöt  DotProduct: ssa ova niin mutkikkaat ja monitahoiset, että on verrattomasti helpompaa määritellä
suosiolla oma
 Sis: -funktio sisätuloksi. (Lokalisointipuutteen takia käytetään "outoja" nimiä, kuten i_ )

>    Sis:=(u,v)->add(u[i_]*conjugate(v[i_]),i_=1..LinearAlgebra[Dimension](u)):

>    Sis(<1,1,1>,<I,I,I>);

-3*I

>    randV:=n->RandomVector(n,generator=rand(-1000..1000)/1000.);

randV := proc (n) options operator, arrow; LinearAlgebra:-RandomVector(n,generator = .1000000000e-2*rand(-1000 .. 1000)) end proc

>    randM:=(m,n)->RandomMatrix(m,n,generator=rand(-1000..1000)/1000.);

randM := proc (m, n) options operator, arrow; LinearAlgebra:-RandomMatrix(m,n,generator = .1000000000e-2*rand(-1000 .. 1000)) end proc

>    randV(3);randM(3,5);

Vector(%id = 134806460)

Matrix(%id = 138322228)

Ortogonaalisuus

Ortogonaalinen kanta

Esim:   (a) Osoita, että vektorit

>    u1:=<3,1,1>; u2:=<-1,2,1>; u3:=<-1/2,-2,7/2>;

u1 := Vector(%id = 134829672)

u2 := Vector(%id = 134830216)

u3 := Vector(%id = 134835032)

muodostavat OG kannan.

>    T(u1).u2;T(u1).u3;T(u2).u3;

0

0

0

M.O.T .  Voidaan tehdä kootusti näin:

>    U:=<u1|u2|u3>;

U := Matrix(%id = 135088488)

>    T(U).U;

Matrix(%id = 138332404)

MOT (koska saimme diagonaalimatriisin).

Laske annetun vektorin v  esitys tässä OG kannassa.

>    v:=<6,1,8>;

v := Vector(%id = 134852640)

>    e1:=Normalize(u1,2):e2:=Normalize(u2,2):e3:=Normalize(u3,2):

>    vesitys:=Sis(v,e1)*'e1'+Sis(v,e2)*'e2'+Sis(v,e3)*'e3';

vesitys := 27/11*11^(1/2)*e1+2/3*6^(1/2)*e2+23/33*66^(1/2)*e3

>    v=eval(vesitys);  # Kaikkea muuta kuin vesitys!

Vector(%id = 134852640) = Vector(%id = 134854400)

>    a1:=arrow(e1,color=red):a2:=arrow(e2,color=blue):a3:=arrow(e3,color=green): a:=arrow(v,shape=arrow,color=gray):

>   

>    display(a1,a2,a3,a,scaling=constrained,axes=boxed);

[Maple Plot]

Gram-Schmidt ortogonalisointi

Annnettu LRT vektorit v[1],...,v[m] sisätuloavaruudessa V.

Voidaan konstruoida ON vektorit e[1], ..., e[m], siten, että

   sp(v[1],...,v[k]) =  sp(e[1],...,e[k]) , k = 1 .. m

Konstruktion idea:  Kts. L10.html

Maple-lasku: harj6av.mws  (kts. ip.)

Maplessa on toki valmiiksi ohjelmoituna:

>    w1 := <2,1,0,-1>:
w2 := <1,0,2,-1>:
w3 := <0,-2,1,0>:
orto := GramSchmidt([w1,w2,w3]);

orto := [Vector(%id = 134769684), Vector(%id = 134770068), Vector(%id = 134771892)]

>    Q:=Matrix(orto);

Q := Matrix(%id = 134933436)

>    Transpose(Q).Q;

Matrix(%id = 137805300)

Kätevä tapa nähdä vektorien ortogonaalisuus.

Paras approksimaatio, ortog. proj

Esim

>    v:=<-1,-5,10>: u1:=<5,-2,1>: u2:=<1,2,-1>:

Määritä v:n paras approksimaatio aliavaruudessa sp{u1,u2} .

>    Sis(u1,u2);

0

>    e1:=Normalize(u1,2): e2:=Normalize(u2,2):

>    projv:=Sis(v,e1)*e1+Sis(v,e2)*e2;

projv := Vector(%id = 134585372)

>    etaisyys:=Norm(v-projv,2);

etaisyys := 3*5^(1/2)

>    with(plots):

>   

>    display(arrow(u1,color=blue,shape=arrow),arrow(u2,color=blue),arrow(v,color=red,shape=arrow),arrow(projv,color=green),arrow([[projv,v-projv]],color=gray),scaling=constrained,axes=boxed,title="Sininen aliavaruuden M kanta,punainen v, jonka vihreä projektio sinisellä aliavaruudella");

[Maple Plot]

Vihreä on siis projektio (v*) ja harmaa on v - v*, joka on kohtisuorassa sinistä M:ää vastaan. (Harmaata merkittiin z:lla lauseen todistuksessa.)

>   

QR-hajotelma

TE ss. 28 - 29
Lay ss. 405-407
Matriisihajotelma A=QR, missä Q ortog. ja R yläkolmio. (Yleensä A (m x n), m > n)
Algoritmi 1:
Oletetaan: A:n sarakkeet LRT. Ortonormeerataan GS:llä => Q. ortonormeerausprosessi tuottaa yläkölmiokertoimet, joista rakentuu R.

Algoritmi 2:
(Kts. TE) QR - hajotelma sadaan aikaan kertomalla ns. Householderin muunnoksilla vasemmalta.

Numeerisia huomioita:

Algoritmin 1 tulos kärsii peräkkäisten laskujen kuljettamista virheistä, joka aiheuttaa suurilla matriiseilla ortogonaalisuudem huononemista
helposti yli toleranssin erityisesti loppupään vektoreilla. Asiaa voidaan auttaa sopivasti järjestämällä.

Selvästi luotettavampi tulos saadaan jälkimmäisellä algoritmilla. Laskentatyön kaksinkertaistuminen on pieni haitta luotettavuuden ja tarkkuuden
liääntymisen rinnalla.

Esim:

>    A:=<<1,1,1,1>|<0,1,1,1>|<0,0,1,1>>; # VarmastiLRTsarakkeet.

A := Matrix(%id = 138358856)

>    sarakkeet:=[seq(Column(A,j),j=1..3)];

sarakkeet := [Vector(%id = 134622740), Vector(%id = 134663612), Vector(%id = 134912312)]

>    orto:=GramSchmidt(sarakkeet,normalized);

orto := [Vector(%id = 135215956), Vector(%id = 135321200), Vector(%id = 135320740)]

>    Q:=Matrix(orto);

Q := Matrix(%id = 135096592)

>    Transpose(Q).Q;  # Tarkistetaan Q:n ortogonaalisuus (eli sarakkeiden ortonormaalisuus).

Matrix(%id = 136065972)

>    R:=Transpose(Q).A;

R := Matrix(%id = 138385568)

>    A=Q.R,QjaR=[Q,R];

Matrix(%id = 138358856) = Matrix(%id = 135740952), QjaR = [Matrix(%id = 135096592), Matrix(%id = 138385568)]

Tehdään sitten "oikella", numeerisesti laadukkaalla (toivottavasti) algoritmilla:

>    QRDecomposition(A);

Matrix(%id = 138395424), Matrix(%id = 138397572)

>    QRDecomposition(convert(A,float));

Matrix(%id = 138401836), Matrix(%id = 135241076)

>   

Paitsi PNS-tehtävissä, QR-hajotelmaa käytetään mm. ominaisarvojen  ja - vektoreiden numeerisessa laskennassa.
TE: "QR on yhtä
tärkeä numeerisen matriisilaskennan työkalu kuin Gaussin eliminointi."

Pienimmän neliösumman approksimaatio, PNS eli LSQ ("least squares")

Kts. myös V2-ws:ää LSQ.mws

Kyseessä on projektio aliavaruudelle, josta parasta approksimaatiota haetaan.

Kaksi perustyyppiä olevaa tehtävää: