Harj. 6 AV

22.10.02

Alustukset

>    restart:

Warning, the name changecoords has been redefined

>    with(LinearAlgebra):

>    alias(ref=GaussianElimination):

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

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 := proc (u, v) options operator, arrow; add(u[i_]*conjugate(v[i_]),i_ = 1 .. LinearAlgebra[LinearAlgebra:-Dimension](u)) end proc

1.

>    with(LinearAlgebra):alias(Id=IdentityMatrix):

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

Sis := proc (u, v) options operator, arrow; add(u[i_]*conjugate(v[i_]),i_ = 1 .. LinearAlgebra[LinearAlgebra:-Dimension](u)) end proc

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

A := Matrix(%id = 138638316)

>    p:=Determinant(A-lambda*Id(2));

p := 5-4*lambda+lambda^2

>    solve(p=0,lambda);

2+I, 2-I

Käsinlasku:

>    lambda:=2+I: w:=<-2,1+I>;

w := Vector(%id = 139995524)

>    u:=map(Re,w); v:=map(Im,w);

u := Vector(%id = 140045768)

v := Vector(%id = 140052524)

>    uv:=<u|v>;

uv := Matrix(%id = 138833060)

>    uvI:=uv^(-1);

uvI := Matrix(%id = 140160752)

>    alpha:=Re(lambda): beta:=Im(lambda):

>    C:=<<alpha,-beta>|<beta,alpha>>;

C := Matrix(%id = 140190916)

>    A=uv.C.uvI;

Matrix(%id = 138638316) = Matrix(%id = 140265960)

Siinäpä se taas kerran!

Annetaan mennä vielä Maplella kokonaan:

>    (oa,ov):=Eigenvectors(A);

oa, ov := Vector(%id = 140488736), Matrix(%id = 138701088)

>    lambda:=oa[1]: w:=ov[1..-1,1];

w := Vector(%id = 140708444)

>    u:=map(Re,w): v:=map(Im,w);

v := Vector(%id = 140717912)

>    P:=<u|v>;

P := Matrix(%id = 138784608)

>    PI:=P^(-1);

PI := Matrix(%id = 139118816)

Jos ollaan laiskoja, niin C voidaan ratkaista näin halpahintaisesti:

>    C:=PI.A.P;

C := Matrix(%id = 140843092)

Huom 1:  C-matriisi on yksikäsitteinen (järjestystä vaille). P:n sarakkeet ovat ominaisvektoreita. Ne voidaan normeerata miten hyvänsä.

Normeeraus vaikuttaa kääneismatriisiin ("kompenspoivalla normaarauksella").

Huom 2 : Jos P:n sarakkeet otetaan järjestyksessä <v | u >  , niin C:n sivulävistäjän merkit vaihtavat paikkaa. Tämä on se toinen muoto, joka edllisessä harjoituksessa

aiheutti kiusaa. Kokeile harjoituksen vuoksi johtaa kaavaa niinpän, niin näet.

>   

Warning, premature end of input

2.

>    with(plots):

>    v1:=<1,1>; v2:=<1,-1>;

v1 := Vector(%id = 140812236)

v2 := Vector(%id = 138553320)

>    lambda[1]:=3: lambda[2]:=1/3:

>    x[k]=c[1]*3^k*v1+c[2]*(1/3)^k*v2;

x[k] = c[1]*3^k*Vector(%id = 140812236)+c[2]*(1/3)^k*Vector(%id = 138553320)

Trajektorit {v1,v2}-koordinaatistossa toteuttavat  siten  ehdon

>    x*y = vakio;

x*y = vakio

Jos siis merkitään koordinaatteja tättä ov-koordinaatistossa (x,y).  Saadaan siis ihan tavallinen hyperbeliparvi.

Esitetään ominaisvektorikoordinaatistossa, joka kierretään oikeaan asentoon käyttämällä 3d-piirtoa. (2d-plotilla ei onnistu näin, silloin pitäisi kierto kohdistaa dataan,

mikä on hiukan vaivalloisempaa). Kannattaa toki  huomata, että tämä mentelmä soveltuu vain silloin, kun kysessä on koordinaatiston kierto. Jos akselien kulma ja/tai skaalat muuttuvat,

on ominaisvektorimatriisin antamaa kannanvaihtomuunnosta sovellettava dataan.

>    display(spacecurve([x,1/x,0,x=.1..10]),spacecurve([x,-1/x,0,x=.1..10]),spacecurve([-x,1/x,0,x=.1..10]),spacecurve([-x,-1/x,0,x=.1..10]),axes=boxed,orientation=[-135,1]);

[Maple Plot]

Kannattaa täydentää käsin. Alkupisteet kannattaa valita ensin ominaisvektoreilta ja piirtää suuntanuolet.

Sitten esim. pisteet (1,1), (-1,1) , (1,-1), (-1,-1).  Tässä tapauksessa saadaan suoraan muotoa y=C/x oleva käyräparvi ominaisvektorikoordinaatistossa.

Sitä yllä olevassa piirroksessa on käytetty.

3.

A:n diagonalisointi on annettu, siitä saadaan itse A vain kertolaskulla (ja käänteismatriisin muodostuksella).

>    restart:

Warning, the name changecoords has been redefined

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

Sis := proc (u, v) options operator, arrow; add(u[i_]*conjugate(v[i_]),i_ = 1 .. LinearAlgebra:-Dimension(u)) end proc

>    A.v[1]=lambda[1]*v[1]; A.v[2]=lambda[2]*v[2];

A.v[1] = lambda[1]*v[1]

A.v[2] = lambda[2]*v[2]

>    A.`<|>`(v[1],v[2]) = `<|>`(lambda[1]*v[1],lambda[2]*v[2])

A.Vector(%id = 135279848) = Vector(%id = 135296208)

Tästä saadaan A kertomalla oikealta `<|>`(v[1],v[2]) :n käänteismatriisilla.

>   

>   

>   

Warning, premature end of input

>    v1v2:=<<1,1>|<-1,1>>;

v1v2 := Matrix(%id = 135567536)

>    Lambda:=DiagonalMatrix([3,1/3]);

Lambda := Matrix(%id = 135611184)

>    A:=v1v2.Lambda.v1v2^(-1);

A := Matrix(%id = 135543436)

>    Eigenvectors(A); #Tarkistus

Vector(%id = 136150348), Matrix(%id = 136159368)

Luonnollinen kysmys: Jos tunnetaan matriisin ominaisarvot ja - vektorit, onko matriisi 1-käs. määrätty siinäkin tapauksessa, että se ei ole diagonalisoituva?

4.

>    v[1]:=<2,1,3>: v[2]:=<1,-2,0>; v[3]:=<6,3,-5>;

v[2] := Vector(%id = 138851036)

v[3] := Vector(%id = 135828288)

>    seq(seq(Sis(v[i],v[j]),j=1..3),i=1..3);linalg[matrix](3,3,[%]); # Tässä kohtuullisen kätevä tapa katsoa sisätulokombinaatiot.

14, 0, 0, 0, 5, 0, 0, 0, 70

matrix([[14, 0, 0], [0, 5, 0], [0, 0, 70]])

>    Matrix(3,3,(i,j)->Sis(v[i],v[j]));  # Tässä on jo eleganssia, huomaa tämä matriisin muodostustapa!

Matrix(%id = 136203940)

>    U:=<v[1]|v[2]|v[3]>;   # Tämä on omalla tavallaan elegantein, pitää vaan osata ajatella "matriisiksi".

U := Matrix(%id = 139289464)

>    Transpose(U).U;

Matrix(%id = 136408432)

Jo se on varmaakin varmempaa!

>    u:=<9,-2,4>;

u := Vector(%id = 138815924)

>    c[1]:=Sis(u,v[1])/Sis(v[1],v[1]);c[2]:=Sis(u,v[2])/Sis(v[2],v[2]);c[3]:=Sis(u,v[3])/Sis(v[3],v[3]);

c[1] := 2

c[2] := 13/5

c[3] := 2/5

>    add(c[j]*v[j],j=1..3);

Vector(%id = 136399560)+Vector(%id = 136250260)+Vector(%id = 139775168)

>    evalm(%);

vector([9, -2, 4])

Oikein meni!

5.

0 = 0, %?

>   

>    cos(x)*cos(2*x); %=combine(%);

cos(x)*cos(2*x)

cos(x)*cos(2*x) = 1/2*cos(x)+1/2*cos(3*x)

>    sin(x)*sin(2*x); %=combine(%);

sin(x)*sin(2*x)

sin(x)*sin(2*x) = 1/2*cos(x)-1/2*cos(3*x)

Ja taas integroidaan cos- tai sin- funkitota yhden tai useamman täyden jakson yli => 0.

Yleisesti:

>    cos(alpha*x)*cos(beta*x): %=combine(%);

cos(alpha*x)*cos(beta*x) = 1/2*cos(alpha*x-beta*x)+1/2*cos(alpha*x+beta*x)

>    sin(alpha)*sin(beta): %=combine(%);

sin(alpha)*sin(beta) = 1/2*cos(alpha-beta)-1/2*cos(alpha+beta)

Emme siis tarvinneet Maplen erinomaista int-komentoa ollenkaan. No mikään ei estä:

>    F:=[1,cos(x),cos(2*x),sin(x),sin(2*x)];

F := [1, cos(x), cos(2*x), sin(x), sin(2*x)]

>    Matrix(5,5,(i,j)->int(F[i]*F[j],x=-Pi..Pi));

Matrix(%id = 135699900)

Tätä on syytä ihastella!

6.

>    with(LinearAlgebra):alias(ref=GaussianElimination):

>    A:=<<3,1,-1,3>|<-5,1,5,-7>|<1,1,-2,8>>;

A := Matrix(%id = 139293364)

>    ref(A);

Matrix(%id = 140002284)

Ovat LRT, joten GS soveltuu.  Tehdään vaiheittain "käsin laskien":

>    v:=seq(A[1..-1,j],j=1..3);

v := Vector(%id = 140487176), Vector(%id = 139124624), Vector(%id = 139116872)

>    Norm(v[1],2);

2*5^(1/2)

>    e[1]:=Normalize(v[1],2);

e[1] := Vector(%id = 135616100)

>    Sis(e[1],e[1]);

1

>    f[2]:=v[2]-Sis(v[2],e[1])*e[1];

f[2] := Vector(%id = 135997900)

>    e[2]:=Normalize(f[2],2);

e[2] := Vector(%id = 136076180)

>    f[3]:=v[3]-Sis(v[3],e[1])*e[1]-Sis(v[3],e[2])*e[2];

f[3] := Vector(%id = 136351344)

>    e[3]:=Normalize(f[3],2);

e[3] := Vector(%id = 136325956)

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

Vector(%id = 135616100), Vector(%id = 136076180), Vector(%id = 136325956)

>    map(v->v*10/sqrt(5),[%]);

[Vector(%id = 136480376), Vector(%id = 136555992), Vector(%id = 140515724)]

Tai:

>    10*<e[1]|e[2]|e[3]>/sqrt(5);

Matrix(%id = 137296284)

Valmiilla GramSchmidt:lla:

>    vvv:=seq(A[1..-1,j],j=1..3);

vvv := Vector(%id = 141062224), Vector(%id = 141039188), Vector(%id = 141039108)

>    GramSchmidt([vvv]);

[Vector(%id = 137406484), Vector(%id = 137395396), Vector(%id = 141093536)]

>    GramSchmidt([vvv],normalized);

[Vector(%id = 141092736), Vector(%id = 137497476), Vector(%id = 141153800)]

>    Q:=Matrix(%);

Q := Matrix(%id = 137608664)

>    Transpose(Q).Q;

Matrix(%id = 137781148)

>