MATLABs kommandon för matriser Det finns en mängd kommandon för att hantera vektorer, matriser och linjära ekvationssystem Vi ger här en kort sammanfattning av dessa kommandon För en mera detaljerad diskussion se Eva Pärt-Enander kapitel och 4 Generation av en radvektor x = (,, ) x=[ ] Generation av en radvektor x = (,,,,) med n element x=zeros(,n) Generation av en radvektor x = (,,,,) med n element x=ones(,n) 4 Generation av en kolonnvektor x = x=[; ; ] 5 Generation av en kolonnvektor x = x=zeros(,) 6 Generation av en kolonnvektor x = x=ones(,) 7 Generation av en matris A = A=[ ; 4 5; 6 ] 4 5 6 med n element med n element 8 Generation av en m n matris A med bara nollor A=zeros(m,n); 9 Generation av en m n matris A med bara ettor A=ones(m,n); Transponat A T (rader och kolonner byter plats) A
Matrisinvers A inv(a) Lösning till Ax = b med hjälp av Gauss-elimination x=a\b Observera att snedsträcket lutar åt vänster! Vi illustrerar användandet av dessa kommandon med två exempel Exempel Bestäm transponatet till ( ) 5 A = 4 5 Vi börjar med att definiera matrisen A = [ 5; 4 5]; Då vi skriver A svarar MATLAB med ans = 4 5 5 Exempel För att lösa ekvationssystemet x + x x = x + x + x = x x + 4x = börjar vi med att definiera koefficientmatrisen och högerledet A = [ -; ; - 4]; b = [; ; ]; Vi skriver sedan x=a\b varvid MATLAB svarar x = 5 5 Om man använder snedsträck åt höger och skriver x=a/b får man felmeddelandet??? Error using ==> / Matrix dimensions must agree
8 y 6 4 (x i,y i ) 4 5 6 7 8 9 x Figur : Mätvärde till vilka en funktion skall anpassas Funktionsanpassningar I tillämpningar inom naturvetenskap och teknik behöver man ofta anpassa en funktion f(x) till ett antal mätvärden (x,y ), (x,y ),, (x m,y m ) Allmänt kan vi låta anpassningsfunktionen ha formen f(x) = c ϕ (x) + c ϕ (x) + + c n ϕ n (x) där ϕ (x),ϕ (x),,ϕ n (x) är givna så kallade basfunktioner Problemet blir då att bestämma koefficienterna c,c,,c n så att anpassningen i någon mening blir så bra som möjligt Kravet att anpassningsfunktionen f(x) skall gå genom alla mätvärdena leder till ett ekvationssystem av formen ϕ (x )c + ϕ (x )c + + ϕ n (x )c n = y ϕ (x )c + ϕ (x )c + + ϕ n (x )c n = y ϕ (x m )c + ϕ (x m )c + + ϕ n (x m )c n = y m () Systemet ovan skrivs ofta på matrisform och vi har Ac = y, där A är en m n koefficientmatris med element a ij = ϕ j (x i ), c en n kolonnvektor och y en m kolonnvektor y ϕ (x ) ϕ (x ) ϕ n (x ) c ϕ (x ) ϕ (x ) ϕ n (x ) c y A = c = y = ϕ (x m ) ϕ (x m ) ϕ n (x m ) c n y m Normalt gäller att m > n, det vill säga fler ekvationer än obekanta, och vi har ett överbestämt system som oftast saknar lösning 4
Minsta-kvadratanpassningar Vid minsta-kvadratanpassningar frångår man kravet att anpassningsfunktionen skall gå genom alla datapunkterna Istället bestämmer man koefficienterna för basfunktionerna genom att minimera det kvadratiska avståndet mellan datapunkterna och anpassningsfunktionen f(x), dvs vi ska bestämma c, c,,c n så att den kvadratiska summan D = m (f(x i ) y i ) i= blir så liten som möjligt Minsta kvadrat-anpassning av en rät linje till mätdata är illustreras i figur 9 8 y 7 6 5 4 f * (x i ) y i 4 5 6 7 8 9 x Figur : Minsta-kvadratanpassning till en rät linje Man kan visa (se Gunnar Sparr Linjär algebra sidan 56) att de koefficienter c,c,,c n som minimerar den kvadratiska summan ovan fås som lösning till den så kallade normalekvationen A T Ac = A T y Normalekvationen har alltid en entydig lösning MATLABs kommando för minsta-kvadratanpassningar Vid minsta-kvadratanpassningar med MATLAB startar man med att mata in koefficientmatrisen A och kolonnvektorn y som hör till det överbestämda ekvationssystemet () Då man ger kommandot c = A\y känner MATLAB själv av att systemet är överbestämt och löser automatiskt normalekvationen A T Ac = A T y Syntaxen för att lösa ett ekvationssystem i vanlig mening och i minsta-kvadratmening är alltså densamma Det som styr är dimensionen på matrisen A Om matrisen är kvadratisk så löses ekvationsystemet med Gausselimination om matrisen har fler rader än kolonner konstrueras och löses normalekvationen 5
Polynomanpassningar Utifrån problemets natur och den bakomliggande teorin vet man ofta vilka basfunktioner man skall anpassa till mätdata Vid polynomanpassningar sätter man ϕ (x) =, ϕ (x) = x, ϕ (x) = x,,ϕ n (x) = x n, varvid anpassningsfunktionen får formen f(x) = c + c x + c x + + c n x n Motsvarande koefficientmatris blir då (jämför ekvation () på sidan 4) x x x n A = x x x n x m x m x n m Vi illustrerar polynomanpassningar med ett exempel Exempel Vi ska anpassa ett andragradspolynom f(x) = c + c x + c x till mätvärdena x k y k 9 4 8 Det överbestämda ekvationssystemet har formen Ac = y där koefficientmatrisen A och högerledet y ges av x x y A = x x x x y = y y x 4 x 4 y 4 Vi börjar med definiera x k och y k som kolonnvektorer x = [; ; ; ]; y = [; 9; 4; 8]; Koefficientmatrisen A genereras sedan bekvämt med kommandot A = [x^ x^ x^]; Då vi ger kommandot c = A\y svarar MATLAB med c = -48 7 85 Anpassningsfunktionen har alltså formen f(x) = 48 + 7x + 85x 6
6 Anpassning av andragradspolynom 4 8 y 6 4 5 5 5 5 5 4 x Figur : Anpassning av ett andragradspolynom För att plotta mätvärdena och den anpassade funktionen skriver vi plot(x,y, o ) % Plottar de mätvärdena med cirklar hold on % Lås grafikfönstret x=::; % Generera en vektor x med element från till y=c()+c()*x+c()*x^; % Beräkna funktionsvärdena för anpassningsfunktionen plot(x,y) % Plotta anpassningsfunktionen title( Anpassning av andragradspolynom ) % Skriv rubrik xlabel( x ) % Skriv text på x-axeln ylabel( y ) % Skriv text på y-axeln varvid vi får figur 4 Allmänna funktionsanpassningar För att få ökad insikt om minsta-kvadratanpassningar och deras möjligheter så tar vi nu ett exempel på en anpassning där basfunktionerna ϕ (x), ϕ (x),,ϕ n (x) inte är polynom Exempel Vi ska anpassa en kombination (superposition) av sinus och cosinus funktioner u(t) = c sint + c cos t till de mätpunkterna t k 89 79 69 59 448 58 68 78 87 897 987 77 u k 79 7 5 5 84 4 69 76 6 78 Det överbestämda ekvationssystemet har formen Ac = u där koefficientmatrisen A och högerledet u ges av sin(t ) cos(t ) A = sin(t ) cos(t ) u = sin(t ) cos(t ) u u u 7
Anpassning till funktionen f(t) = c sin(t)+c cos(t) 8 6 4 u 4 6 8 4 6 8 t Figur 4: Anpassning till funktionen u(t) = c sin(t) + c cos(t) Vi börjar med definiera t k och u k som kolonnvektorer t=[; 89; 79; 69; 59; 448; 58; 68; 78; 87; 897; 987; 77]; u=[; 79; 7; 5; -5; -84; -4; ; 69; 76; ; -6; -78]; Koefficientmatrisen A genereras sedan med kommandot A = [sin(t) cos(t)]; Då vi ger kommandot c = A\u svarar MATLAB med c = 8 88 Anpassningsfunktionen har alltså formen u(t) = 8 sin(t) + 88 cos(t) För att plotta mätvärdena och den anpassade funktionen skriver vi plot(t,u, o ) % Plotta mätvärdena med cirklar hold on % Lås grafikfönstret t=::; % Generera en vektor med element från till u=c()*sin(t)+c()*cos(t); % Beräkna funktionsvärdena för anpassningsfunktionen plot(t,u) % Plotta anpassningsfunktionen title( Anpassning till funktionen f(t) = c_sin(t)+c_cos(t) ) % Skriv rubrik xlabel( t ) % Skriv text på x-axeln ylabel( u ) % Skriv text på y-axeln varvid vi får figur 4 8
5 Anpassningar till exponentialuttryck I naturen träffar man ofta på kvantiteter som är exponentiellt avtagande (eller växande) Ett exempel är strålningsintensiteten hos ett radioaktivt preparat, vilken avtar med tiden enligt formeln I(t) = I()e λt, där λ är sönderfallskonstanten och I() den ursprungliga intensiteten För att kunna anpassa exponentialfunktionen till de experimentella data, dvs bestämma I() och λ, måste man logaritmera exponentialuttrycket lni(t) = lni()e λt = lni() + lne λt = lni() λt = c + c t Koefficienterna c = lni() och c = λ bestämmes genom att minsta-kvadratanpassa lni(t) = c + c t till de logaritmerade datapunkterna lni k Exempel Anpassa en exponentialfunktion I(t) = I()e λt till följande sju datapunkter t k 4 5 6 7 8 I k 6 8 75 4 74 56 Vi omformulerar problemet och anpassar lni(t) = lni() λt = c + c t till de logaritmerade datapunkterna b k = lni k Motsvarande överbestämda ekvationssystem har formen Ac = b där koefficientmatrisen A och högerledet b ges av t lni A = t b = lni t 7 lni 7 Vi börjar med att mata in kolonnvektorerna t och I och definiera b t = [; ; 4; 5; 6; 7; 8]; I = [6; 8; 75; 4; ; 74; 56]; b = log(i); Koefficientmatrisen A genereras sedan med kommandot A = [t^ t]; Då vi ger kommandot c = A\b svarar MATLAB med c = 78-888 9
I 45 Anpassning av exponentialfunktion 4 5 5 5 5 4 5 6 7 8 9 t Figur 5: Anpassning av exponentialfunktion Vi har alltså lni(t) = 78 888t och de ursprungliga data kommer alltså att beskrivas av funktionen I(t) = e 78 888t = e 78 e 888t = 56e 888t För att plotta de ursprungliga datapunkterna och den anpassade exponentialfunktionen skriver vi plot(t,i, o ) % Plotta mätvärdena med cirklar hold on % Lås grafikfönstret t = ::9; % Generera en vektor med element från till 9 I = exp(c()+c()*t); % Beräkna funktionsvärdena för anpassningsfunktionen plot(t,i) % Plotta anpassningsfunktionen title( Anpassning av exponentialfunktion ) % Skriv rubrik xlabel( t ) % Skriv text på x-axeln ylabel( I ) % Skriv text på y-axeln varvid vi får figur 5