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<