TAIU07 Föreläsning 5 • Linjära ekvationssystem. • Minsta kvadrat problem. Tillämpning: Cirkelpassning. • Geometriska objekt. Translationer. Rotationer. • Funktioner som inargument. Tillämpning: Derivata. 15 februari 2016 Sida 1 / 32 Linjära Ekvationssystem Division mellan matriser skall tolkas som att A/B betyder AB−1 och A\B betyder A−1B. Exempel Lös ekvationssystemet 1 2 1 3 4 −2 5 x = −2 . 3 −2 2 −3 med hjälp av MATLAB. 15 februari 2016 Sida 2 / 32 I Matlab skapar vi först matrisen och högerledet med >> A = [ 2 1 3 ; 4 -2 5 ; -2 2 -3 ]; >> b = [ 1 -2 3]’; % OBS kolumnvektor! Vi löser sedan ekvationssystemet med x = A−1b som beräknas med \-operatorn. Alltså >> x = A\b; ans = 1.8333 x’ 1.3333 -1.3333 Kontrollera genom att beräkna residualen >> r = b - A*x; ans = 1.0e-15 * 0.8882 r’ 0 -0.4441 15 februari 2016 Sida 3 / 32 Funktionen inv beräknar inversen till en kvadratisk matris. Exempel Beräkna lösningen till Ax = b med hjälp av inversen >> A >> b >> x ans = [ 2 1 3 ; 4 -2 5 ; -2 2 -3 ]; = [ 1 -2 3]’; = inv(A)*b; x ’ = 1.8333 1.3333 -1.3333 Ger samma lösning som tidigare. Beräkna nu A−1A med >> C = inv(A)*A C = 1.0000 0 0 1.0000 -0.0000 0 0 -0.0000 1.0000 15 februari 2016 Sida 4 / 32 Exempel En linje i R3 kan skrivas på formen 1 2 P(t) = ~p1 + ~p2t = −1 + 2 t. 3 2 Ett plan i R3 spänns upp av de två vektorerna 1 0 ~v1 = −1 och ~v2 = 1 . 0 −2 Var skär linjen planet? Formulera problemet som ett linjärt ekvationssystem. 15 februari 2016 Sida 5 / 32 Lösning Alla punkter i planet kan skrivas som en linjär kombination av ~v1 och ~v2. Vi söker alltså α1, α2 och t sådana att 1 2 0 1 −1 α1 + 1 α2 = −1 + 2 t. 2 3 −2 0 I Matlab: >> v1=[1 -1 0]’;v2=[0 1 -2]’;p1=[2 -1 3]’;p2=[1 2 2]’ >> x=[ v1 v2 -p2]\p1; x’ ans = 1.3750 -0.8750 -0.6250 Skärningspunkten ges av >> P = v1*x(1)+v2*x(2); P’ ans = 1.3750 -2.2500 1.7500 15 februari 2016 Sida 6 / 32 Minsta Kvadratproblemet Exempel Vi vet att en fysikalisk storhet ges av y = c1 x1 + c2 x2 , där c1 och c2 är konstanter vi vill bestämma och x1 och x2 är parametrar vi enkelt kan variera. Hur skall vi bestämma c1 och c2? Lösning Genomför experiment och mät y för olika värden på (x1, x2). x1 3.0 2.7 1.8 4.2 x2 1.60 1.35 0.70 1.20 y 12.6 11.2 6.3 13.2 =⇒ 3.0 2.7 1.8 4.2 1.60 12.6 11.2 1.35 c 1 = 6.3 0.70 c2 1.20 13.2 Nöjer vi oss med två mätningar får vi ett linjärt ekvationssystem. Fler mätningar bör gå att utnyttja för att få ett bättre resultat. 15 februari 2016 Sida 7 / 32 Euklidisk Längd Den Euklidiska normen av en vektor x är 1/2 n X xi2 . kxk2 = i=1 I Matlab finns funktionen norm som beräknar normen kxk2. I Matlab >> x = [ 1 3 -2 ] >> E = norm( x ) E = 3.7417 15 februari 2016 Sida 8 / 32 Definition Låt A ∈ Rm×n m > n. Ekvationssystemet Ax = b är då överbestämt. Fler ekvationer än obekanta gör att det oftast inte finns en lösning. Istället minimerar vi residualen och löser minn kAx − bk. x∈R Detta kallas Minsta kvadratproblemet. I statistiken kallas det Linjär Regression. Sats Minsta kvadrat lösningen x satisfierar normalekvationerna AT Ax = AT b. Om kolumnerna i A är linjärt oberoende så är AT A icke-singulär. 15 februari 2016 Sida 9 / 32 I MATLAB tolkas x=A\b som ett minsta kvadrat problem om A är rektangulär. Det x som minimerar kAx − bk2 beräknas. Exempel Lös Minsta kvadratproblemet med A och b som tidigare >> A = [3.0 1.60 ; 2.7 1.35 ; 1.8 0.70 ; 4.2 1.20]; >> b = [12.6 11.2 6.3 13.2]’; >> x_MK = A\b % Eller (A’*A)\( A’*b ) x_MK = 1.8734 4.4208 Vi får minsta kvadrat lösningen x = ( 1.873 , 4.420 )T . Hade valt x = ( 2 , 4 )T och b med ett slumpmässigt fel. 15 februari 2016 Sida 10 / 32 Modell Passning Exempel Vi will anpassa ett polynom p(t) = c0 + c1t + c2t2 till en uppsättning mätningar (ti, yi), 1 ≤ i ≤ m. 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 −0.2 0 0.2 0.4 0.6 0.8 1 1.2 Formulera detta som ett överbestämt ekvationssystem och lös med minsta kvadratmetoden. 15 februari 2016 Sida 11 / 32 Lösning Antag att data (ti, yi) lagrats som två vektorer t och x. Då fås >> A=[ t.^0 t.^1 t.^2]; b=y; c= A\b;x >> tt=0:0.1:2;yy=c(1)+c(2)*tt+c(3)*tt.^2; >> plot(t,y,’r+’,tt,yy); 1.2 1 0.8 0.6 0.4 0.2 0 −0.2 −0.2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 Vi får en vektor >> c’ ans = 0.0400 -0.1073 0.7112 15 februari 2016 Sida 12 / 32 Exempel Vi har ett antal punkter (xk , yk ) som borde ligga på en cirkel. 6 5.5 5 4.5 4 3.5 3 2.5 2 1.5 −2 −1 0 1 2 3 4 Hur kan vi använda Minstakvadrat metoden för att uppskatta centrum och radie för cirkeln? 15 februari 2016 Sida 13 / 32 Lösning Varje punkt (x, y)T på cirkeln uppfyller ekvationen F(u) = a(x2 + y2) + b1x + b2y + 1 = 0, där u = (a, b1, b2)T är okända parametrar. Centrum och radie för cirkeln ges av b1 b2 T T z = (x0, y0) = −( , ) , 2a 2a 2 + b2 b 1 2 1 2 − . och, r = 2 a 4a Vi behöver två funktioner 1. Givet x och y beräkna u: function [u]=CircleFit( x , y ) 2. Givet u beräkna z och r samt plotta cirkeln: function [z,r]=DisplayCircle( u ) 15 februari 2016 Sida 14 / 32 På filen CircleFit.m skriver vi % Hitta parameter vektor u som beskriver en cirkel % vektorerna x och y. % function [u]=CircleFit( x , y ) A=[x.^2+y.^2 x y];b=-ones(length(x),1); u=A\b; end Vi använder funktioner på våra data vektorer x och y och får >> u=CircleFit( x , y) u = 0.1729 -0.4113 -1.1799 15 februari 2016 Sida 15 / 32 På filen DisplayCircle.m skriver vi % Beräkna centrum och radie samt rita upp % cirkeln givet parameter vektorn u. % function [z,r]=DisplayCircle( u ) z=-u(2:3)/2/u(1) r=sqrt( (u(2)^2+u(3)^2)/4/u(1)^2-1/u(1)); theta=2*pi*(0:99)’/100; x=z(1)+r*cos(theta);y=z(2)+r*sin(theta); x=[x;x(1)];y=[y;y(1)]; plot(x,y); end 15 februari 2016 Sida 16 / 32 Vi använder nu funktionen för att rita cirkeln >> hold on, [z,r]=DisplayCircle( u ); hold off 6 5.5 5 4.5 4 3.5 3 2.5 2 1.5 1 −2 −1 0 1 2 3 4 Vi fick z = (1.1898, 3.4131)T och r = 2.6981. Hade valt z0 = (1.2, 3.4)T och r = 2.7. 15 februari 2016 Sida 17 / 32 Geometriska Objekt och Avbildningar Exempel En månghörning består av hörpunkter och kantlinjer. Varje punkt Pk = (xk , yk )T kan ses som en 2 × 1 vektor. Vi vill rita upp en femhörning med givna hörnpunkter 1 3 5 6 3 , , , och . 3 6 5 2 1 Vi vill sedan förflytta alla punkterna med en konstant vektor T = (1 , 2)T och rita upp månghörningen igen. Hur skall vi göra? 15 februari 2016 Sida 18 / 32 Spara punkterna i en 2 × n matris P. Varje punkt representeras av en kolumn P(:,k). I Matlab P = [ 1 3 5 6 3 ; 3 6 5 2 1 ]; plot( P(1,:),P(2,:),’r+’); hold on ind = [1 2 3 4 5 1 ]; plot( P(1,ind),P(2,ind),’b-’); För att translatera punkterna skapar vi en ny 2 × n matris att addera till P. T=ones(2,5); T(2,:)=2; P2 = P+T; plot( P2(1,ind),P2(2,ind),’k--’) hold off 15 februari 2016 Sida 19 / 32 Sätt koordinataxlarna så att vi ser hela bilden och skriv ut axis([ 0 8 0 9]) print -depsc F2-5horning.eps Den färdiga bilden blir 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 Kommentar Många olika operationer inom datorgrafik består av att enkla operationer utförs på punktmängder. I Matlab kan man göra rätt mycket om man är lite kreativ. 15 februari 2016 Sida 20 / 32 Linjära Avbildningar Definition En n × m matris A kan ses som en avbildning A : x ∈ Rm 7→ y ∈ Rn. där y = Ax. Exempel Enhetsmatrisen I representerar en avbildning I : x 7→ x. Den bildas i Matlab med kommandot >> n = 10; >> I = eye( n ); Andra viktiga avbildningar är rotationer, speglingar, och projektioner. 15 februari 2016 Sida 21 / 32 Rotationer Lemma En punkt P = (x1 , x2)T roteras kring origo (0 , 0)T , med vinkel α, med hjälp av cos(α) sin(α) ′ P = G · P, G= . − sin(α) cos(α) Exempel Vi vill illustrera rotationer i Matlab genom att rotera en punkt P = (4 , 2)T kring ett origo som satts till O = (2 , 3)T . Vridningsvinkeln skall vara α = 2π/3. Rita upp relevanta vektorer både före och efter vridningen. Samt rita upp en cirkel med centrum i punkten O för att tydligare visa att vi fått en vridning. 15 februari 2016 Sida 22 / 32 Lösning Skapa först vektorer för att representera Origo O = (2 , 3)T och punkten P. Beräkna även skillnadsvektorn R. Origo=[ 2 ; 3 ]; P=[ 4 ; 2 ]; R = P - Origo; Plotta nu vektorerna i blått clf,hold on plot( [0 P(1)],[0,P(2)] ,’b’ ) plot( [Origo(1) P(1)],[Origo(2),P(2)] ,’b’ ) 15 februari 2016 Sida 23 / 32 Skapa en mängd punkter på cirkeln med origo i O = (2 , 3)T . Radie=sqrt( sum( R.^2 ) ); alpha=0:0.01:2*pi; x=Origo(1)+Radie*cos( alpha ); y=Origo(2)+Radie*sin( alpha ); plot(x,y,’r--’) 15 februari 2016 Sida 24 / 32 Skapa sedan vridningspatrisen G och applicera den på skillnadsvektorn R. alpha=2*pi/3; G = [cos(alpha),-sin(alpha);sin(alpha),cos(alpha R2=G*R; P2=Origo+R2; Rita nu upp de nya punkterna i svart. plot( [0 P2(1)],[0,P2(2)] ,’k’ ) plot( [Origo(1) P2(1)],[Origo(2),P2(2)] ,’k’ ) axis equal hold off Kommentar Kommandot axis equal gör koordinataxlarna lika långa i fönstret. Annars ser inte cirkeln rund ut. 15 februari 2016 Sida 25 / 32 5 4.5 4 3.5 3 2.5 2 1.5 1 0.5 0 -1 0 1 2 3 4 5 Den färdiga grafen innehåller de objekt som behövs för att illustrera vridningen. Punkten blir >> P2’ ans = 1.8660 5.2321 15 februari 2016 Sida 26 / 32 Funktioner som inargument Kommandot feval kan användas för att anropa en funktion med givna inparametrar. Exempel Har vi skrivit en fil funk.m som innehåller function [z]=funk( x , y ) z=x^2+3*y; end så kan vi anropa funktionen med inargument x = 2 och y = 2.5 genom att skriva >> feval( @funk , 2 , 2.5 ) ans = 11.5000 15 februari 2016 Sida 27 / 32 Funktioner som inargument Exempel Definitionen av derivata är f (x + h) − f (x) ′ f (x) = lim . h h→0 Välj ett fixt h > 0 för att approximera derivatan av f (x). Skriv en funktion Derivata.m som kan anropas med >> Df = Derivata( @funk , x , h ); Använd funktionen för att plotta derivatan av sin(x) på intervallet [0, 2π]. 15 februari 2016 Sida 28 / 32 Lösning På filen Derivata.m skriver vi function [Df]=Derivata( f , x , h ) f1=feval( f , x + h ); f0=feval( f , x ); Df=(f1-f0)/h; end Vi kan sedan plotta derivatan av sin(x) genom att skriva >> x = 0:0.01:2*pi; >> plot( x , Derivata( @sin , x , 10^-3 ) ); 15 februari 2016 Sida 29 / 32 Enkla funktioner Enkla funktioner kan skapas direkt i Matlab. Man skriver >> f = @( <variabler> ) <uttryck>; Man får då ett handtag till en funktion. Exempel Skriv >> f = @(x) exp(2*x).*cos(x.^2)+4*x f = @(x)exp(2*x).*cos(x.^2)+4*x Funktionen kan beräknas med feval eller direkt f(4). 15 februari 2016 Sida 30 / 32 Exempel Skapa funktionerna p f (x) = 1 − x2e−2x, och g(x) = (x12 − 1 , p 1 + x2)T . Tänk på att g(x) måste ha en vektor som inagrument och returnera en vektor i R2. Försök få f (x) att acceptera vektor argument så att det går att skriva >> x = 0:0.01:1; >> plot( x , f(x) ) 15 februari 2016 Sida 31 / 32 Funktionen integral beräknar integraler. Den anropas >> I = integral( fun , a , b ) där f är ett funktionshandtag. Exempel Beräkna samma integral som tidigare genom >> f = @(x) exp(2*x).*cos(x.^2)+4*x; >> I = integral( f , 0 , 1) I = 4.6736 Det finns även integral2 för dubbelintegraler. 15 februari 2016 Sida 32 / 32
© Copyright 2024