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