TAIU07 Föreläsning 6 Tillämpning: Bildinterpolation. Ekvationslösning. Integraler. Tillämpning: En båt. Räkning med polynom. Projekt. Tentamensinformation. 22 februari 2016 Sida 1 / 28
Interpolation i Bilder Exempel Antag att vi har en bild I där störande objekt råkat komma med. Kan vi lösa problemet? Den del av bilden vi vill dölja är markerad. Detta är ett interpolations problem. Uppskatta lämpliga färgvärden att ersätta de pixlar vi vill ta bort. 22 februari 2016 Sida 2 / 28
Definition En bild I R n m är en matris där varje pixel I ij har ett värde som representerar en färg. Definition Interpolations masken M R n m har element M ij = 1 om motsvarande pixel skall ersättas med ett nytt interpolerat värde och M ij = 0 annars. Bilden representeras som en matris I. I Matlab läser vi in den med kommandot >> I=imread( 839.jpg ); imshow(i); Vi vill ersätta de pixlar där M ij = 1 med nya värden. Färgbilder behandlas som tre separata bilder. 22 februari 2016 Sida 3 / 28
I H = 0 Ω I H = I Definition Antag att I(x, y) är definierad på område ir 2 och okänd i delområdetω. Harmonisk interpolation innebär att man beräknar I H (x, y) som lösningen till { 2 I H x 2 + 2 I H y 2 = 0, iω, I H (x, y) = I(x, y), på Ω. 22 februari 2016 Sida 4 / 28
Numerisk Metod Approximera andra derivator med differenskvoret 2 I H x 2 (x i, y j ) 1 h 2(I H(x i+1, y j ) 2I H (x i, y j )+I H (x i 1, y j )). Formulera ett linjärt ekvationssystem Ax = b där varje okänd pixel(i, j) ger en ekvation I H (i+1, j)+i H (i 1, j)+i H (i, j+1)+i H (i, j 1) 4I H (i, j)=0, och varje känd pixel ger en ekvation I H (i, j) = I(i, j). Lösningsvektorn x innehåller de obekanta x = (I H (1, 1), I H (1, 2), I H (1, 3)..., I H (m, n 1), I H (m, n)) T. 22 februari 2016 Sida 5 / 28
Resultatet efter Harmonisk interpolation och orginal bilden. Här har bilden 384 256 pixlar. Matrisen A får dimension 98304 98304. Med linjär differential operator får vi alltid jämna bilder utan skarpa kanter! Lösning av linjära ekvationssystem på dator är en av de vanligaste uppgifterna för datorer. 22 februari 2016 Sida 6 / 28
Lösning av Icke-Linjära Ekvationer Exempel Vi skall beräkna roten x till ekvationen, f(x) = cos(3x)e x. Metod Om vi beräknar funktionsvärden för x=0 och x=1 så ser vi att f(0)=1>0 och f(1)= 2.69<0. Alltså finns det en rot i intervallet 0<x<1. Beräkna sedan f(0.5)= 0.144>0 och vi ser att roten finns i intervallet <x<1. Detta kallas intervallhalveringsmetoden. 1 2 Avsluta när intervallet [a n, b n ] som innehåller roten uppfyller b n a n < ε = 10 6. Övning Skriv en funktion IntHalv som beräknar roten till f(x) = 0 med hjälp av intervallhalveringsmetoden. 22 februari 2016 Sida 7 / 28
Frivilliga inargument Kommandot nargin ger det antal inargument som gavs då en funktion anropades. Exempel På filen funk.m skriver vi function [y]=funk( x, p ) end if nargin<2, p=1; end y=exp(x^p); I Matlab skriver vi sedan >> y = funk( 2 ); % p=1 används. Anropar vi med y=funk(2,1.5) används p = 1.5. 22 februari 2016 Sida 8 / 28
Funktionen fzero hittar en rot till ekvationen f(x) = 0. Den anropas >> x = fzero( fun, x0 ) där f är ett funktionshandtag och x 0 är en start gissning. Exempel Lös ekvationen f(x) = e 2x x = 0. Skapa en funktion och använd fzero för att hitta roten >> f = @(x) exp(-2*x)-x; >> x = fzero( f, 1 ) x = 0.4263 Kommentar Funktionen fzero använder en avancerad numerisk metod. Det finns färdiga metoder för att lösa en stor mängd problem i MATLAB. 22 februari 2016 Sida 9 / 28
Tillämpning: Hur stor del av en båt är under vatten? Problem En båt som lastas sjunker precis så mycket att båtens vikt blir precis motsvarar det vatten den tränger undan. 0.5 0-0.5-1 -1.5-2 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 Givet en viss vikt hur skall vi beräkna hur stor del av båten som hamnar under vatten? 22 februari 2016 Sida 10 / 28
Matematisk modell Inför relevanta storheter och beskriv lösningsmetoden. Båtens profil ges av en skiss y x (0, 0) (3, 0) c (a, c) (b, c) (0.6, 1.4) (2.1, 1.4) Båtens vikt inklusive last är L = 697 kg. Vattnets densitet är 998 kg/m 3. Funktioner ShipShape(x), DisplayShip(c) och DisplacedVolume(c). 22 februari 2016 Sida 11 / 28
Funktionen ShipShape blir function F = ShipShape( x ) F=zeros(size(x)); for i=1:length(x) if x(i)<0.6 F(i)=1.4*x(i)/0.6; elseif x(i)<2.1 F(i)=1.4; else F(i)=1.4*cos( pi*(x(i)-2.1)/(3.0-2.1)/2 ); end end end Kommentar Rät linje från(0, 0) till(0.6, 1.4) följt av en cosinus från(2.1, 1.4) till (3.0, 0). Funktionen måste klara en vektor x som inargument. 22 februari 2016 Sida 12 / 28
Funktionen DisplayShip blir function DisplayShip( c ) x=0:0.01:3; F=ShipShape( x ); clf,hold on plot( x, -F, k- ) plot( [0 3],[0,0], k- ) plot( [-0.5 3.5],[-c -c], b ) axis([-0.5 3.5-1.6 0.2 ] ) axis equal end Kommentar y-axeln är definierad så att y = 0 är överst på båten. Måste alltså byta tecken innan vi ritar! 22 februari 2016 Sida 13 / 28
Funktionen DisplacedVolume blir function V=DisplacedVolume( c ) % Första roten bör ligga nära x=0.4; a=fzero( @(x)shipshape(x)-c,0.4); % Andra roten bör ligga närmare x=2.5; b=fzero(@(x)shipshape(x)-c,2.5); % Undanträngd volym är en ingetral över [a,b] V=integral( @(x)shipshape(x)-c, a, b ); end Kommentar Hitta skärningspunkterna mellan skrovet och vattenytan. Integrera sedan för att hitta totala arean under ytan. 22 februari 2016 Sida 14 / 28
Huvudprogrammet blir L=697; % Last i Kg rho=998; % Vattnets densitet i kg/m3 % Ekvation Volym( c )*rho - L = 0. Start gissning är c = fzero( @(c)displacedvolume( c )*rho-l, 0.9 ) DisplayShip( c ) weight=displacedvolume( c) * rho; str=[ Med last L=,num2str(L), kg fås c= ]; str=[str,num2str(c), m ];disp(str) Resultatet blir Med last L=697kg fås c=1.0253 m 22 februari 2016 Sida 15 / 28
Räkning med Polynom Exempel Vi will anpassa ett polynom p(t) = c 0 + c 1 t+c 2 t 2 till en uppsättning mätningar (t i, y i ), 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 Funktionen polyfit beräknar ett polynom p(t) som approximerar punkterna (t i, y i ) enligt minsta kvadrat metoden. 22 februari 2016 Sida 16 / 28
Skriv >> P = polyfit( t, y, 2 ) P = 0.7112-0.1073 0.0400 Det polynom som bäst approximerar(t i, y i ) är p(t) = 0.7112t 2 0.1073t+0.0400. Funktionen polyval beräknar polynomets värden för ett antal t värden. Skriv >> y = polyval( P, t ); 22 februari 2016 Sida 17 / 28
Lösning Antag att data (t i, y i ) lagrats som två vektorer t och x. Vi skriver >> p2 = polyfit( t, y, 2 ); >> tt=0:0.1:2; >> yy=polyval( p2, tt ); >> 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 22 februari 2016 Sida 18 / 28
Exempel Hitta det polynom som interpolerar punkterna Hitta ett polynom p n (x) som interpolerar värdena i tabellen x 0.0 0.3 0.6 0.9 f(x) 1.23 1.57 1.35 1.09 Plotta polynomet p(x) tillsammans med punkterna (x i, f(x i )) i en graf. Lemma Ett polynon p n (x), av gradtal n, blir entydigt bestämt om vi anger (n+1) interpolations villkor p n (x i ) = y i. 22 februari 2016 Sida 19 / 28
1.6 1.5 1.4 1.3 1.2 1.1 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 I Matlab skriver vi >> x=0:0.3:0.9; y=[1.23 1.57 1.35 1.09]; >> p3=polyfit(x,y,3) p3 = 3.2099-6.0000 2.6444 1.2300 >> xx=0:0.01:0.9; >> plot(x,y, r+,xx,polyval(p3,xx), b- ) 22 februari 2016 Sida 20 / 28
Funktionen roots hittar alla rötter till ett polynom med coefficienter c = (c n 1,..., c 0 ). Exempel Hitta rötterna till polynomet p(x) = 1.2 2.0x+1.7x 2 0.2x 3. I Matlab skriver vi >> r = roots( [ -0.2 1.7-2.0 1.2 ] ); r ans = 7.2320+0.0000i 0.6340-0.6540i 0.6340+0.6540i >> >> polyval( [ -0.2 1.7-2.0 1.2 ], r(1) ) ans = 3.0198e-14 Vi har hittat en rot! 22 februari 2016 Sida 21 / 28
För att integrera eller derivera polynom finns polyint respektive polyder. Exempel Beräkna I Matlab I = 2 0 (0.2t 4 + 0.7t 2 1.3t+0.9)dt >> p4 = [ 0.2 0.0 0.7-1.3 0.9]; >> p5 = polyint( p4 ) >> I = polyval(p5,2)-polyval(p5,0) I = 2.3467 22 februari 2016 Sida 22 / 28
Exempel Vi vill undersäka hur bra approximationen sin(x) x x 3 /6, är. Med Taylor utveckling ser vi att felet bör domineras av termen R T = x 5 /120. Metod Välj ett antal x-värden i intervallet 0.1 < x < 0.4 och beräkna felet E(x). Passa ett uttryck av typen E(x) = Cx p till felet och bestämm C och p. Utnyttja log(e) = log(c)+p log(x) = c 0 + c 1 y, y = log(x). 22 februari 2016 Sida 23 / 28
I Matlab skriver vi >> x=0.1:0.01:0.4; E=abs( sin(x) - x + x.^3/6 ); >> p1=polyfit( log(x), log(e), 1 ) p1 = 4.9896-4.8041 >> C=exp(p1(2)), p = 5; % p heltal C = 0.0082 Beräkna 1/120 = 0.0083 så ser vi att det stämmer! 22 februari 2016 Sida 24 / 28
Seminarieuppgifterna Mål Seminarieuppgiftena syftar till att ge - träning i att skriva lite mer omfattande program med flera deluppgifter som kan lösas separat som olika funktioner. Delarna skall sedan kopplas samman för att lösa hela uppgiften. - träning i skriftlig presentation. Uppgiften, Lösningen, och resultatet skall beskrivas i en kort rapport. - erfarenhet av att använda Matlab för att lösa ett någorlunda realistiskt problem från en tillämpning. 22 februari 2016 Sida 25 / 28
Genomförande - Varje grupp tilldelas en uppgift. Denna annonseras på kurshemsidan. - Två handledningstillfällen i datorsal finns. Det är viktigt att ni är förberedda så att ni kan utnyttja läraren effektivt. - Senast dagen innan seminariet skall den grupp som skall opponera ha fått rapporten. På seminariet ges varje grupp kommentarer då rapporterna och resultaten diskuteras i gruppvis. Lärare finns tillgänglig för frågor. - Senast två dagar efter seminariet skall opponenternas kritik åtgärdas och rapporten lämnas in till respektive lärare för godkännande. 22 februari 2016 Sida 26 / 28
Krav I rapporten skall ingå - en kort bakgrund till uppgiften. - en beskrivning av de olika funktioner som utvecklats. Den metod som implementeras i funktionen skall beskrivas. - ett exempel där funktionerna används för att lösa en uppgift. Här ingår grafer. - Matlabprogram skall inte ingå i rapporten utan dessa skickas med som bilaga. Reservtillfälle Deltagande i seminariet är obligatoriskt. Ett ett extra tillfälle kommer att organiseras precis innan period VT2 börjar. Vet du att du inte kan vara med på ordinarie seminarietillfälle så kontakta din lektionsledare. Missar du ordinarie tillfälle på grund av sjukdom så ta kontakt med mig snarast efter. 22 februari 2016 Sida 27 / 28
Tentamensinformation - Skriftlig tentamen i datorsal. Lös uppgiften i Matlab. Skriv av ditt program på papper då du är färdig. Inga utskrifter behövs. - Salar är Boren/Hunn, Roxen/Glan och ISYs salar Asgård, Olympen, Egypten, etc. Anslås på kurshemsidan. - För att jämna ut antal studenter i olika lokaler så gäller att Mi1a går till MAIs lokaler och Mi1b går till ISYs. - Ni använder särskilda inloggningar för tentan. Dessa delas ut av vakterna. - Tentamen består av 6 uppgifter med totalt 18 poäng. Det krävs 8 poäng för godkänt. - Träna på lektionsuppgifterna. Lycka till! 22 februari 2016 Sida 28 / 28