Kunliga Tekniska Högskola Informationteknik, HT07 LINJÄR ALGEBRA Problemlösningar med hjälp av Matlab Handledare: Karim Daho Gjort av: Lyudmila Gerlakh (851119-4428) Hajer Mohsen Ali (860915-0746) Stockholm 2007-11-28 Inledning Matlab är ett dataprogram som kan utföra avancerade och komplicerade matematiska problem. Matlab kan vissa 2D och 3D grafik som underlätter förståelsen för problemen. Vi använder Matlab i denna laboration för att uttföra beräkningar som innehåller matrser. Innehåll: Uppgift.1 (3.1)……………………………………………………………….2 Lösningen…………………………………………………………....2 Uppgift.2 (3.51)……………………………………………………………...4 Lösningen……………………………………………………………4 Uppgift.3 (3.53)……………………………………………………………...5 Lösningen……………………………………………………………5 Uppgift.4 (3.84)……………………………………………………………...8 Lösningen…………………………………………………………….8 1 Uppgift 3.1. Ställ upp det linjära ekvationssystem som bestämmer koefficienterna I det andragradspolynom, som har samma funktionsvärde och samma derivatan som (sin x) för x och x 2 Lösningen: Vi vet att andragradspolynom anges med formeln: y ax 2 bx c Vi har en till funktion som är: y = sin x I uppgiften säges att : ax 2 bx c sin x , (1) 2ax b cos x där 2ax b är derivatan av andragradspolynomen och cos x är derivatan av sin x. Eftersom vi har två värdena på x för vilka ekvationssystem (1) är stämmer då får vi ett sådant ekvationssystem: a 2 b c sin 2a b cos , 2 a(2 ) b(2 ) c sin(2 ) 2a(2 ) b cos(2 ) 2 a b c 0 2 a b 1 2 4 a 2 b c 0 4 a b 1 (2) Systemet (2) är det systemet som efterfrågas i uppgiften. Nu ska vi lösa ut koefficoenterna ur ekvationssystemet (2). Det ekvationssystemet kan vi skriva som produkten av två matriser: 2 2 4 2 4 1 2 1 1 0 1 0 0 a b = 1 0 c 1 För att räkna ut a, b och c kan man använda sig av MatLab. I Matlab genererar vi matriser A = [ Ή2 Ή1; 2Ή1 0; 4Ή2 2Ή1; 4 1 0 ] och B = [0; -1; 0; 1]. Efter det kan vi direkt räkna ut a, b och c genom att skriva x= A\B, där x= [a; b; c]. Matlab skriver ut: x= 0.0257 - 0.472 1.083 Det betyder att andragradspolynom ser ut så här: y 0.0257x 2 0.472x 1.083 2 Grafen till anpassade funktionen 1 0.8 0.6 0.4 y 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 2 3 4 5 x 6 7 8 Koden för Matlab clc % Anger värdena på variablar x1 och x2 x1 = pi; x2 = 2*pi; % Genererar matriser A och B A = [(x1)^2 x1 1; 2*pi 1 0; (x2)^2 x2 1; 2*(x2) 1 0] B = [0 -1 0 1]' % Beräknar nu koefficienter a, b och c c = A\B % eller c = A’*A\A’*B % Där c = [a; b; c] % Anger värdena på x för att kunna rita grafen x = [pi/8:pi/20:2*pi]; y = (c(1))*x.^2 + (c(2))*x + (c(3)); f=sin(x); plot(x,y,x,f) title('Grafen till anpassade funktionen'); xlabel('x'); ylabel('y'); grid on 3 Uppgift 3.51. Ingenjör S Karlsson avläste under några dagar vattenmätaren i sin nya villa och erhöll där vidföljande värden. Den 1 mars kl 18.00: Den 3 mars kl 12.00: Den 7 mars kl 22.00: Den 10 mars kl 10.00: 5100 liter 5600 liter 7800 liter 8500 liter Familjen Karlssons vattenförbrukning per dygn kan antas vara approximativ konstant. Bestäm med minstakvadratanpassning familjen Karlssons vattenförbrukning per dygn samt när de flyttade in i sin villa (vattenmätaren antas då ha visat 0 liter). Lösningen: Vi tar den 1 mars mätning som nollställe för beräkningar. Vi räknade ut antalet timmar genom att ta skilnaden mellan första mars och den trjede, första mars med den sjunde och första mars med den tionde. Då får vi: 0 timmar 5100 liter 42 timmar 5600 liter 128 timmar 7800 liter 208 timmar 8500 liter För att kunna anpassa en funktion måste vi ha ursprunliga funktionen. I det fallet antar vi att funktionen är linjär. Antar att y är antal liter, x är antal timmar och a är antal liter per timme. y ax b Nu när vi har funktionen och mätdatan kan vi skriva ekvationssystem: b 5100 42a b 5600 148a b 7800 208a b 8500 Från ekvationssystemet till matris: 0 42 148 206 5100 1 a 5600 1 * 1 b 7800 8500 1 4 0 42 Vi kan skriva om produkten som Ax=B, där A = 148 206 1 1 , B= 1 1 5100 5600 a och x = b 7800 8500 Då kan vi generera matriserna A och B i MatLab och fråga den att räkna ut vektor x. Vi kan beräkna x på formeln: x = A\B Dåsriver Matlab ut: x= 17.2 5034.9 Nu vet vi att funktionen ser ut: y 17.2x 5034.9 , där 17,2 är a. Det betyder att vi vet antal liter per timme. Nu kan vi räkna ut antal timmar per dygn. 17.2*24 ≈ 413 liter/dygn Om vi delar den första mätningsvärde som vi har (5100) med 413 liter/dygn får vi antal dagar mellan inflyttningsdatum och första mätningstillfället. Då kan vi säga att de flyttade in den 18 februari. Uppgift 3.53. Vid ett fysikaliskt experiment som liknar ”fritt fall” är avståndet y och tiden t sammankopplad med ett samband av typen y a bt 2 . Bestäm det samband avdenna typ som i minstakvadratmerodens mening bäst ansluter sig till följande mätdata t: 0 0.2 0.4 0.6 0.8 1.0 y : 2.1 2.5 3.5 5.5 8.5 12.2 . Lösningen: Eftersom vi ska anpassa funktionen av typen y a bt 2 så kan vi skriva systemekvationen för denna mätdata: 5 a 0b 2.1 a 0.04b 2.5 a 0.16b 3.5 a 0.36b 5.5 a 0.46b 8.5 a b 12.2 Vi övergår till matris för att kunna använda minstakvadratmetoden för uträkningen av a och b. 1 1 1 1 1 1 2.1 2.5 0.04 0.16 a 3.5 * 0.36 b 5.5 8.5 0.64 12.2 1 0 Enligt minstakvadratmetoden 1 1 1 1 1 1 1 1 1 0 0.04 0.16 0.36 0.64 1 * 1 1 1 2.1 2.5 0.04 0.16 a 1 1 1 1 1 1 3.5 * * 0.36 b 0 0.04 0.16 0.36 0.64 1 5.5 8.5 0.64 12.2 1 0 6 2.4 a 34.3 2.4 1.8624 * b 21.98 Med matlab så kan vi lösa ut a och b x=A\B där x=[a;b] Matlab skrivet ut x= 1.9988 10.1395 Då betyder att sambandet mellan tiden och avståndet ser ut: y=2 + 10.1t2 6 Sambandet mellan avståndet och tiden 14 mätdatan anpassade funktion 12 avståndet (y) 10 8 6 4 2 0 0 0.1 0.2 0.3 0.4 0.5 0.6 tiden (t) 0.7 0.8 0.9 1 Koden för MatLab clc % Genererar mätdata tiden = [0:0.2:1]; avstond = [2.1 2.5 3.5 5.5 8.5 12.2]' % Ritar grafen med mätdatan. plot(tiden,avstond,'o') hold on % Genererar matrisen matris = [(ones(1,6))',(tiden.^2)' ] % Finner vektor x, där x = [b0 b1] x = (matris'*matris)\(matris'*avstond) % t = [1 tiden.^2] y = x(1)+ x(2)*tiden.^2; % Ritar grafen för anpassade funktion plot(tiden,y) title ('Samband mellan avståndet och tiden'); xlabel ('tiden (t)'); ylabel ('avståndet (y)'); legend('mätdatan','anpassade funktion') grid on 7 Uppgift 3.84 Man har gjort experimentella mätningar för att försöka finna en matematisk modell av formen y(t) a1 a2t a3 sin t Mätningarna resulterade i förljande värden: t: y: 1 6 2 6 3 4 4 1 5 0 6 3 7 10 8 21 9 7 10 4 a) Använd dessa mätvärden till att anpassa en modell i minstakvadratmening. Plotta mätdata tillsammans med en graf av anpassade funktionen y(t). b) Av resultaten från uppgift a) kan man misstänka att mätdata innehåller en uteliggare, dvs. ett mätdata som uppenbarligen är helt felaktigt. Ta bort den mätdatapunkten och gör om anpassningen och plottningen. Lösningen: a) Här satte vi ut funktionen för y där y(t) a1 a2t a3 sin t och vi satte mätdata värderna i funktionen, då fick vi detta ekvationsystem: a1 a2 0.0175a3 6 a1 2a2 0.0349a3 6 a 3a 0.0524a 4 2 3 1 a1 4a2 0.0698a3 1 a1 5a2 0.0873a3 0 a1 6a2 0.1047a3 3 a 7a 0.1222a 10 2 3 1 a1 8a2 0.1396a3 21 a1 9a2 0.1571a3 7 a 10a 0.1745a 4 2 3 1 8 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 6 0.0175 6 0.0349 4 0.0524 0.0698 1 a1 0.0873 0 * a 0.1047 2 3 0.1222 a3 10 0.1396 21 7 0.1571 4 0.1745 För att räkna ut a1 , a2 och a3 använder vi Matlab. Vi kan skriva om produkten ovan: Ax=B, där A = 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 0.0175 0.0349 0.0524 0.0698 0.0873 ,x= 0.1047 0.1222 0.1396 0.1571 0.1745 a1 a2 a 3 6 6 4 1 0 och B = 3 10 21 7 4 Vigenererar matriser A och B i Matlab. Efter det kan vi räkna ut x: x = A\B 9 Matlab skriver ut: x = 0.2972 0.9031 6.6312 Graf för funktionen y(t) 25 Funktion y(t) a1 a2t a3 sin t efter anpasningen: funktionsvardena y(t) 0.2972 0.9031t 6.6312sint 20 15 10 5 Koden för Matlab clc % y(t) = a1 + a2*t + a3*sin(t) tid = 1:1:10; funktionsvardena = [6 6 4 1 0 3 10 21 7 4]; 0 -5 1 2 3 4 5 6 7 8 tid plot(tid, funktionsvardena, 'o') title ('Graf för funktionen y(t)') xlabel ('tid') ylabel ('funktionsvardena') grid on hold on % Genererar matriser a och b a = [(ones(1,10))', tid', (sin(tid))'] b = [6 6 4 1 0 3 10 21 7 4]' % x % y ax = b -- x = b\a = a\b där x = [a1; a2; a3] = (x(1)) + (x(2))*tid + (x(3))*(sin(tid)); plot(tid, y, '-') legend('mätdatan','anpassade funktionen') b) Från grafen kan man se att en punkt är felaktig. Det är t = 8 och y = 21. Om vi tar den punkten bort och gör beräkningar en gång till (på nytt), får vi: x= 1.8514 0.4784 4.3923 10 9 10 Det betyder att polynomen ser ut: y(t) 1.8514 0.4784t 4.3923sin t Graf för funktionen y(t) 12 10 funktionsvardena 8 6 4 2 0 -2 1 2 3 4 5 6 7 8 9 10 tid Koden för Matlab clc % y(t) = a1 + a2*t + a3*sin(t) tid = [1 2 3 4 5 6 7 9 10]; funktionsvardena = [6 6 4 1 0 3 10 7 4]; plot(tid, funktionsvardena, 'o') title ('Graf för funktionen y(t)') xlabel ('tid') ylabel ('funktionsvardena') grid on hold on a = [(ones(1,9))', tid', (sin(tid))'] b = [6 6 4 1 0 3 10 7 4]' % x % y ax = b -- x = b\a = a\b där x = [a1; a2; a3] = (x(1)) + (x(2))*tid + (x(3))*(sin(tid)); plot(tid, y, '-') legend('mätdatan','anpassade funktionen') 11 12