Tillämpning 3: Mathematica och vektorer 1. Problemet 2. Repetition

Tillämpning 3: Mathematica och vektorer
Vi ska nu använda Mathematica för att lösa problem med vektorer.
Läs, som de andra noteböckerna, först igenom denna text, medan du löpande evaluerar de celler som innehåller kod, så att
du ser vad Mathematica ger för uträkningar. Det finns också på kurshemsidan en pdf fil som innehåller resultaten av Mathematicas arbete.
När du gjort detta kan du öppna motsvarande övning i WebWork: Självstudie 3(algebra), och lösa problemen där med
samma metoder.
1. Problemet
Vi har tre slumpvisa vektorer u_1=(1/3,1/171,1/43)
u_2=(1,53,3/44)
u_3=(10/31,7/17,21/4)
och vill göra ALLT som det går att göra med dem, vilket kanske inte är så mycket, tyvärr. Men vi vill till exempel beräkna
volymen och arean av den parallelepiped de spänner upp, avgöra om de är en bas, bestämma deras längder och vinklarna
mellan dem, samt slutligen vilka koordinater en vektor
v=(x,y,z) har om den går att uttrycka som en lineärkombination av u_1,u_2,u_3.
Lite kryss- och skalärprodukter skulle också vara kul att se, och de dyker i vilket fall som helst upp på vägen.
Inget av detta är förstås svårt att genomföra med metoder från algebrakursen, om det inte vore för att vektorernas utseende
och all bråkräkning man ser framför sig avskräcker. För överskådlighetens skull kommer räkningarna mest att ske numeriskt
med ett begränsat antal decimaler, men de skulle förstås också kunna göras exakt.
2. Repetition: Hur hittar man de kommandon man behöver?
Det är som med all kunskap, numera. Man söker på nätet. Men i en liten del av den: internt i Mathematicas hjälpfunktion
"documentation center".
Vektor heter "vector" på engelska(om du inte visste det, kan du ju söka på det stora nätet...) , och alltså söker vi på vector i
Mathematicas documentation center. I listan på de dokument som innehåller detta ord finns en tutorial(introduktion) om
"Vector operations". Den innehåller det mesta av det vi behöver. Vid en snabb genomläsning ser man att den omfattar "dot
product", "orthogonal projection", "norm", och "orthogonalization".
Man kanske vet att "dot product" är skalärprodukt och gissar att norm är längden, i annat fall kan man söka på t ex "Norm"
och se att begreppets definition, som står där bekräftar detta. Söker man i de andra dokumenten som dyker upp när man
söker på "vector," t ex "Operations on vectors" ser man också en lista som innehåller
"Cross (ä ) ~ vector cross product (entered as Esc cross Esc)",
vilket väl bör vara vektorprodukten. Letar man sedan på Cross ser man att det faktiskt är så, och att kryssprodukten av två
vektorer u och v ska matas in till Mathematica som
Cross[u,v].
2. Vektorer
Vi börjar med att ge vektorerna namn. En vektor i Mathematica är en lista av koordinaterna, och måsvingar används som
parenteser för avgränsa listor. Det står i exemplen i "Vector operations". Alltså, slipper vi fortsättningsvis alla jobbiga bråk
med följande kommandon:
2
Excercise3.2010snb.nb
u1 = 81, 2, 3 ê 44<
u2 = 81 ê 3, 1 ê 17 101, 1 ê 43<
u3 = 810 ê 31, 7 ê 17, 21 ê 4<
:1, 2,
3
44
>
1
1
1
: ,
,
>
3 17 101 43
:
10
31
,
7
17
,
21
4
>
Nu kan vi t ex beräkna vektorn
10.1(u1)+63.4(u2)+75.7(u3),
utan mer möda än det tar att skriva ner uttrycket, och göra två tangentryckningar. Vi väljer här
att få ut resulatet med standardnoggrannheten med 4 decimaler genom att skriva //N.
10.1 u1 + 63.4 u2 + 75.7 u3 êê N
855.6527, 51.3743, 399.588<
3. Volymen och arean av parallellepipeden som vektorerna spänner upp
Nu ska vi räkna ut volymen.
Vi vet att volymen ges av absolutbeloppet av determinanten av matrisen som har de tre vektorerna som kolonnvektorer eller
av dess transponat som har de tre vektorerna som radvektorer. Denna matris kan vi skriva som {u1, u2, u3}.
Alltså:
Det@8u1, u2, u3<D
-
29 710 817 195
8 525 566 742
Alltså är de tre vektorerna lineärt oberoende, så de utgör en bas i R^3(för övrigt negativt orienterad...eftersom determinanten
är negativ), och volymen av parallelepipeden är
Abs@Det@8u1, u2, u3<DD êê N
3.48491
För att få parallellepipedens area utnyttjar vi att
längden av kryssprodukten av två vektorer är arean av den parallellogram som de två vektorerna spänner upp.
Parallellepipeden begränsas, precis som en tändsticksask, av sex parallellogram. Bottenplattan och toppplattan har samma
area, o s v , så vi behöver bara räkna ut arean av tre parallellogram. Dessa spänns upp av två vektorer från de tre vektorena
u1, u2, u3. Kryssprodukten av vektorerna u1 och u2 är
Cross@u1, u2D
:
1 504 759
32 355 092
,-
1
1892
,-
34 199
51 303
>
Arean av den parallellogram som spänns upp av u1 och u2 är alltså längden av denna vektor. Exakt angivet har den följande
värde:
Excercise3.2010snb.nb
Norm@Cross@u1, u2DD
2 103 527 342 176 301
2
48 532 638
Och hela arean av parallelepipeden blir då
2 HNorm@Cross@u1, u2DD + Norm@Cross@u1, u3DD + Norm@Cross@u2, u3DDL êê N
28.2458
4. Vektorernas längder
Enligt introduktionen vi få fram längderna av vektorerna som
Norm@u1D êê N
Norm@u2D êê N
Norm@u3D êê N
2.23711
0.334144
5.27599
Vi ser alltså att den längsta av vektorena u3 är ungefär 15 gånger längre än den minsta u2. Det är i alla fall minst lika
spännande som friidrott.
5. Vektorernas vinklar mot varandra
Vi vet från teorin att vi kan få vinkeln q mellan två vektorer u och v med skalärprodukten, genom formeln
CosHqL=
u.v
u»»v
Vi såg under det preliminära letandet efter operationer att skalärprodukten var Dot[u,v] för Mathematica. Vi ger skalärprodukten av vektorena u1 och u2 namnet A:
A = Dot@u1, u2D
32 520 353
97 065 276
Produkten av vektorernas längder är
B = Norm@u1D * Norm@u2D
5 264 628 043 597 211
97 065 276
Alltså är Cos(q)=A/B eller q=Arccos(A/B)
3
4
Excercise3.2010snb.nb
Alltså är Cos(q)=A/B eller q=Arccos(A/B)
Theta = ArcCos@A ê BD
ArcCosB
32 520 353
F
5 264 628 043 597 211
Nu hettade det till. Problemet här, och orsaken till att Mathematica returnerar samma uttryck som vi stoppade in, är att
programmet inte kan ge ett exakt värde. Om vi istället räknar numeriskt går det bättre
CC = HA ê BL êê N
Theta = ArcCos@CCD
0.4482
1.10605
Vi ser alltså att vinkeln mellan de två vektorerna är nästan Pi/2=1.5708. Vi kan på samma sätt räkna ut alla vinklar.( I koden
nedan använder vi semikolon, ; sist på en rad betyder att vi slipper se resultatet av kommandot som står på just den raden)
CC1 = Dot@u1, u2D ê HNorm@u1D * Norm@u2DL êê N;
ArcCos@CC1D
CC2 = Dot@u1, u3D ê HNorm@u1D * Norm@u3DL êê N;
ArcCos@CC2D
CC3 = Dot@u2, u3D ê HNorm@u2D * Norm@u3DL êê N;
ArcCos@CC3D
1.10605
1.44302
1.44016
6. Slutligen...
Antag att vi har en godtycklig vektor (x,y,z) och vill veta dess koordinater i basen u1,u2,u3. Vi känner oss lite trötta, vi har i
alla fall sett bråk i miljardklassen, och sånt sliter, och försöker därför få datorn att göra allt arbetet. I princip säger vi alltså
bara rätt slött till den:lös det här problemet. Det kan vara värt en skvätt extra ström till dig på lördag. Tyvärr måste vi också
skriva ner vad vi säger, men då fungerar det faktiskt(i alla fall här)! Vi ger namnet SS till lösningen.
Clear@x, y, zD
SS = Solve@8x, y, z< == x1 * u1 + y1 * u2 + z1 * u3, 8x1, y1, z1<D
::x1 Ø
y1 Ø
11 H43 103 361 x + 8 103 154 941 y - 638 190 004 zL
178 264 903 170
2 206 029 H80 941 x - 40 409 y - 1804 zL
59 421 634 390
, z1 Ø -
,
527 H4 514 277 x - 51 303 y - 64 704 508 zL
178 264 903 170
>>
Svaret ser lite oöverskådligt ut, så vi skriver om det på decimalform.
Expand@SS êê ND
88x1 Ø 0.00265973 x + 0.500013 y - 0.0393801 z,
y1 Ø 3.00494 x - 1.50018 y - 0.0669735 z, z1 Ø - 0.0133454 x + 0.000151666 y + 0.191284 z<<
(Expand används här för att programmet ska genomföra alla multiplikationer. )
6.1 Vad betydde nu svaret? : repetition av användning av transformationsregler
Excercise3.2010snb.nb
5
6.1 Vad betydde nu svaret? : repetition av användning av transformationsregler
Observera att resultatet ges i form av transformationsregler x1->..... De är avpassade för att användas för beräkningar genom
att man substituerar med deras hjälp. Detta har vi sett tidigare, men här är en påminnelse om hur det fungerar.
Ge först ett namn, t ex DD till transformationsreglerna(Mathematicas programmerare tycker inte om att jag använder
namnet D, eftersom denna symbol redan betyder något i programmet):
DD = Expand@SS êê ND
88x1 Ø 0.00265973 x + 0.500013 y - 0.0393801 z,
y1 Ø 3.00494 x - 1.50018 y - 0.0669735 z, z1 Ø - 0.0133454 x + 0.000151666 y + 0.191284 z<<
Säg att jag var lite intresserad av ett polynom BB i x1,y1,z1. Då kan jag uttrycka vad dess värde är i x,y,z med hjälp av
transformationsreglerna.
BB = x1 ^ 2 * y1 * z1 ê. DD
9H3.00494 x - 1.50018 y - 0.0669735 zL
H0.00265973 x + 0.500013 y - 0.0393801 zL2 H- 0.0133454 x + 0.000151666 y + 0.191284 zL=
Sätter vi sedan x, y, z till bestämda värden så blir alltså också x1, y1, z1 bestämda, liksom BB.
x=1
y=2
z=3
BB
1
2
3
8- 0.0861581<