Harj. 6 LV

pe 8.3.02 HA

Alustukset

> restart:

Warning, the name changecoords has been redefined

> with(LinearAlgebra): with(linalg):

Warning, the previous binding of the name GramSchmidt has been removed and it now has an assigned value

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

> alias(Inv=MatrixInverse,IdM=IdentityMatrix,Diag=DiagonalMatrix,Tr=Transpose):

> with(plots): with(plottools):

Warning, the name arrow has been redefined

> V2L:=vek->convert(vek,list):
v2l:=vek->convert(vek,list):
L2V:=lis->convert(lis,Vector):
l2v:=lis->convert(lis,vector):

> jana3dpv:=(p,v)->spacecurve([p,V2L(Vector(p)+Vector(v))],thickness=2,color=blue):

1.

> f:=(x,y)->arctan(y/x);

f := proc (x, y) options operator, arrow; arctan(y/...

> x0:=2:y0:=2;

y0 := 2

> T:=f(x0,y0)+D[1](f)(x0,y0)*(x-x0)+D[2](f)(x0,y0)*(y-y0);

T := 1/4*Pi-1/4*x+1/4*y

> subs(x=x0,y=y0,T);
f(2,2);

1/4*Pi

1/4*Pi

> hpmax:=1.5:htmax:=0.8:

> pinta:=plot3d(f(x,y),x=x0-hpmax..x0+hpmax,y=y0-hpmax..y0+hpmax,style=patchcontour):

> taso:=plot3d(T,x=x0-htmax..x0+htmax,y=y0-htmax..y0+htmax,style=PATCH,color=red,grid=[7,7]):

> display(pinta,taso);

[Maple Plot]

> N:=[D[1](f)(x0,y0),D[2](f)(x0,y0),-1];

N := [-1/4, 1/4, -1]

> display(pinta,taso,jana3dpv([x0,y0,f(x0,y0)],N),jana3dpv([x0,y0,f(x0,y0)],-N));

[Maple Plot]

Pinta, tangenttitaso ja normaali (pyörittele vähän, niin näkyy paremmin).

2 ja 3.

> A:=<<1/2,1/4,1/4>|<1/4,1/2,1/4>|<1/4,1/4,1/2>>;

A := _rtable[134830436]

> A-Tr(A);

_rtable[135849844]

Olishan tuon nähnyt päältäpäinkin.

Koska matriisi on symmetrinen , niin peruslause => ominaisvekroreista voidaan muodostaa ortonormaali kanta.

> p:=det(A-lambda*IdM(3));factor(p);# Karakteristinen polynomi

p := -lambda^3+3/2*lambda^2-9/16*lambda+1/16

-1/16*(lambda-1)*(-1+4*lambda)^2

> lam:=solve(%=0,lambda);

lam := 1, 1/4, 1/4

> M1:=A-lam[1]*IdM(3);
M2:=A-lam[2]*IdM(3);

M1 := _rtable[136345908]

M2 := _rtable[135330384]

> gaussjord(M1),gaussjord(M2);

matrix([[1, 0, -1], [0, 1, -1], [0, 0, 0]]), matrix...

lambda[1] = 1

x3 voidaan valita vapaasti, esim. x3=1. x2=x1 (=1), x3=x1 (=1). Siis ominaisvektori [1,1,1] ja normeerattuna:

> X1:=1/sqrt(3)*<1,1,1>;

X1 := _rtable[136338576]

lambda[2] = 1/4 . x3 ja x2 voidaan valita vapaasti: x1 = -x2 - x3.

Saadaan 2 LRV ominaisvektoria valitsemalla a) x2=1, x3 =0 => x1=-1 ja b) x2=0, x3=1 => x1=-1, eli:

> X2:=1/sqrt(2)*<-1,1,0>;X3:=1/sqrt(2)*<-1,0,1>;

X2 := _rtable[136338696]

X3 := _rtable[136338816]

Tehtävä 2 on valmis (ja vähän ylikin, ei siinä pyydetty edes normeerausta).

> Tr(X1).X2;Tr(X1).X3;

0

0

Teorian mukaan eri ominaisarvoihin liittyvät ominaisvektorit ovat ortogonaaliset, joten näin käy aina (jos oikein laskettu).

Sensijaan kaksinkertaiseen ominaisarvoon liittyvät ominaisvektorit eivät ole automaattisesti ortogonaaliset.

Ortogonaalinen kanta saadaan ajattelemalla geometrisen havainnollisesti: Projisioidaan toinen vektori toiselle ja vähennetää tämä projektiovektori. Normeerataan ensin (sehän jo tehtiin), jolloin kaava tulee yksinkertaiseen muotoon:

X2 - (X2,X3)X3

> V2:=X2-(Tr(X2).X3).X3;

V2 := _rtable[135983900]

> Tr(V2).X3;

0

> X2:=V2/Norm(V2,2);

X2 := _rtable[136317212]

> X:=<X1|X2|X3>;

X := _rtable[135299860]

> Tr(X).X;

_rtable[136334904]

Käsin laskettuna saattoi olla hieman vaikea, kun ortogonalsiointitekniikkaa ei ole kunnolla esitelty. Sinänsä, kun tämän on ajatellut havainnollisesti, asia on hyvin luonteva.

Sovitaanpa, että j os tällainen tehtävä tulee kokeeseen, niin tuo projektiokaava ohjeineen annetaan.

Maplella automaattisemmin

> omsys:=Eigenvectors(A);

omsys := _rtable[136536220], _rtable[136675720]

> V:=omsys[2];

V := _rtable[136675720]

Kaksi ensimmäistä vektoria eivät taaskaan ole ortogonaalisia. Help:stä löytyy GramScmidt (edellyttää tämän yhdistelmän assosiontia ortogonalisointiin).

Kaiken lisäksi GramScmidt näkyy toimivan versiossa 7, mutta ei 6:ssa. (Helppiesimerkki (cut/paste) menee virheseen.)

Antaapa sen nyt siis olla ja todetaan, että loppu tehdään, kuten yllä.

> #?LinearAlgebra

>

> GramSchmidt([<-1,1,0>,<-1,0,1>]); # Eipä toimi, linalg:n vastaava varmasti toimii, mutta olkoonpa nyt.

Error, (in GramSchmidt) 1st argument must be a non-empty list or set of vectors

Error, (in GramSchmidt) 1st argument must be a non-empty list or set of vectors

4.

a)

> q:=2*x1^2+4*x2^2+x1*x2;

q := 2*x1^2+4*x2^2+x1*x2

> A:=<<2,1/2>|<1/2,4>>;

A := _rtable[138567972]

> x:=<x1,x2>;

x := _rtable[136867524]

> Tr(x).A.x;expand(%);

x1*(2*x1+1/2*x2)+x2*(1/2*x1+4*x2)

2*x1^2+4*x2^2+x1*x2

Oikein on. Katsotaan vielä Hessian ja pannaan vierelle 2*A

> hessian(q,[x1,x2]),2*A; # hessian asustaa vanhassa linalg:ssa

matrix([[4, 1], [1, 8]]), _rtable[136862868]

> Eigenvalues(A);

_rtable[136092820]

> omsys:=Eigenvectors(A);

omsys := _rtable[135840360], _rtable[135494232]

> eigenvectors(A);

[3+1/2*sqrt(5), 1, {vector([1, 2+sqrt(5)])}], [3-1/...

> DD:=Diag(omsys[1]);

DD := _rtable[135401676]

> X1:=omsys[2][1..2,1]: X1:=X1/Norm(X1,2):X1:=map(simplify,%);

X1 := _rtable[136846332]

> Norm(X1,2);simplify(%);

sqrt(1/(10-4*sqrt(5))*(-2+sqrt(5))^2+1/(10-4*sqrt(5...

1

> X2:=omsys[2][1..2,2]: X2:=X2/Norm(X2,2):X2:=map(simplify,%);

X2 := _rtable[138283164]

> X:=<X1|X2>;

X := _rtable[137239548]

> XT:=Tr(X);

XT := _rtable[134901924]

> A-map(simplify,X.DD.XT);map(simplify,%);

_rtable[136747032]

_rtable[136739496]

> Q:=<y1|y2>.DD.<y1,y2>;

Q := y1^2*(3+1/2*sqrt(5))+y2^2*(3-1/2*sqrt(5))

> implicitplot(q=1,x1=-2..2,x2=-2..2,grid=[50,50]);

[Maple Plot]

> implicitplot(Q=1,y1=-2..2,y2=-2..2,grid=[50,50]);

[Maple Plot]

>

>

b)

> A:=<<0,1,0>|<1,0,1>|<0,1,1>>;

A := _rtable[135574432]

> <x1|x2|x3>.A.<x1,x2,x3>;q:=expand(%);

x1*x2+x2*(x1+x3)+x3*(x2+x3)

q := 2*x1*x2+2*x2*x3+x3^2

> p:=det(A-lambda*IdM(3));

p := -lambda^3+lambda^2+2*lambda-1

> lam:=fsolve(p=0,lambda);

lam := -1.246979604, .4450418679, 1.801937736

> Q:=lam[1]*y1^2+lam[2]*y2^2+lam[3]*y3^2;

Q := -1.246979604*y1^2+.4450418679*y2^2+1.801937736...

> implicitplot3d(Q=1,y1=-2..2,y2=.2..2,y3=-2..2);

[Maple Plot]

>

>

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

A := _rtable[134956492]

> lam:=Eigenvalues(A);

lam := _rtable[136768548]

> map(Im,lam);lam:=map(Re,lam);

_rtable[138648628]

lam := _rtable[138653188]

> Q:=<y1|y2|y3>.Diag(lam).<y1,y2,y3>;

Q := .445041867912629008*y1^2-1.24697960371746697*y...

c)

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

A := _rtable[137212984]

> <x1|x2|x3|x4>.A.<x1,x2,x3,x4>;

x1^2-4*x2*x3+2*x4^2

> lam:=Eigenvalues(A);

lam := _rtable[136756996]

> Q:=add(lam[k]*y[k]^2,k=1..4);

Q := y[1]^2-2*y[2]^2+2*y[3]^2+2*y[4]^2

> sum(lam[k]*y[k]^2,k=1..4); # mystistä!

Error, bad index into Vector

> lam[4]; # Vektorin indekseissä ei ole oikeasti vikaa, toimiihan myös add.

2

> ll:=convert(lam,list);

ll := [1, -2, 2, 2]

> sum(ll[i]*y[i]^2,i=1..4);

y[1]^2-2*y[2]^2+2*y[3]^2+2*y[4]^2

Listaksi konversion jälkeen toimii. "Bad index into vector" on tosi outo juttu, mutta olkoonpa nyt.

5.

> A:=<<1,12>|<12,-6>>;

A := _rtable[137822748]

> q:=expand(<x1|x2>.A.<x1,x2>);

q := x1^2+24*x1*x2-6*x2^2

> (lam,X):=Eigenvectors(A);

lam, X := _rtable[138590416], _rtable[137225664]

> normit:=Norm(X[1..2,1],2),Norm(X[1..2,2],2);

normit := 5/3, 5/3

> X:=X/normit[1]; # koska kerran samoja

X := _rtable[137424076]

> Inv(X), Tr(X); # Ovat samoja (hyvä aina tarkistaa).

_rtable[137567964], _rtable[137545280]

> y1:=(1/sqrt(3))*sinh(t);y2p:=(1/sqrt(2))*cosh(t);y2m:=-y2p;

y1 := 1/3*sqrt(3)*sinh(t)

y2p := 1/2*sqrt(2)*cosh(t)

y2m := -1/2*sqrt(2)*cosh(t)

> pos:=plot([y1,y2p,t=-2..2],view=[-4..4,-4..4],scaling=constrained):

> neg:=plot([y1,y2m,t=-2..2],view=[-4..4,-4..4],scaling=constrained):

> display(pos,neg);

[Maple Plot]

> x1x2p:=X.<y1,y2p>;

x1x2p := _rtable[135578928]

> x1x2m:=X.<y1,y2m>;

x1x2m := _rtable[136299760]

> phaara:=plot([op(V2L(x1x2p)),t=-3..3],x1=-8..8,x2=-8..8):

> nhaara:=plot([op(V2L(x1x2m)),t=-3..3]):

> display(phaara,nhaara);

[Maple Plot]

> implicitplot(q=5,x1=-8..8,x2=-8..8,grid=[50,50]);

[Maple Plot]

>

>

> V2L(x1x2p);

[1/5*sqrt(3)*sinh(t)+2/5*sqrt(2)*cosh(t), -4/15*sqr...

>

>