SF1518,SF1519,numpbd14 LABORATION 2 Trapetsregeln, ekvationer, ekvationssystem, MATLAB-funktioner Studera kapitel 6 och avsnitt 5.2.1, 1.3 och 3.8 i NAM parallellt med arbetet på denna laboration. Genomför laborationen genom att göra de handräkningar och MATLABprogram som begärs. Var noga med att skriva upp resultaten och svaren på frågorna. Se även till att göra snygga grafer, där sådana efterfrågas. Bonuspoäng ges i samband med kontrollskrivning den 9/10. Om denna inte är godkänd eller om man uteblir, måste Lab2 redovisas muntligt enligt särskilt schema, men då ges ingen bonus. 1. Trapetsregeln för numerisk integrering - noggrannhetsordning Följande integral ska beräknas I = 1 0 1 + cos (3x 2 ) dx A. Gör först följande laborationsförberedande uppgifter a)-c): a) Rita först en graf över integranden, dvs y = 1 + cos (3x 2 ). Uppskatta den sökta integralens värde ur grafen. Svar: I b) Beräkna sedan ett mycket noggrant referensvärde på integralen med hjälp av MATLABs inbyggda funktion för approximation av integraler, integral. (Standardtoleransen bör duga här.) Svar: I ref = I nedanstående tabell har ett antal trapetsvärden, T (h), som approximerar I med konstant steglängd, x i = h, redan beräknats: h T (h) E T = T (h) I ref E T /h E T /h 2 1 0.5 0.25 1.40068 0.125 1.40480 0.0625 1.40568 c) Räkna ut och fyll i för hand de värden som ska stå i de tomma rutorna. För de två sista kolumnerna räcker två eller tre värdesiror. Felet avtar ungefär proportionellt mot en potens av steglängden h; vilken? Vad säger det om trapetsregelns noggrannhetsordning? B. Skriv sedan ett MATLABprogram som beräknar integralen numeriskt med trapetsregeln (se NAM 5.2). Undersök hur trunkeringsfelet, E T, beror av steglängden, h, genom att rita felen som funktion av steglängderna h = 1/8, 1/16, 1/32, 1/64, 1/128, 1/256, 1/512, 1/1024. Använd MATLABs kommando loglog för uppritningen.
Visa hur vi uppskattar metodens noggrannhetsordning, p, med hjälp av denna gur. För trapetsregelns noggrannhetsordning gäller e T = I T (h) Ch p där C är en konstant, p är noggrannhetsordningen, T (h) är det approximativa integralvärdet (ur trapetsregeln med konstant steglängd h), och I kan ersättas med det noggranna referensvärdet I ref. Vad blir p? 2. Olinjär skalär ekvation Man vill bestämma samtliga rötter till följande ekvation 7x 20 cos (3x 5) = 0 (a) Härled en övre och en undre gräns för intervallet där rötter kan tänkas nnas. (b) Rita med MATLAB grafen för funktionen y(x) = 7x 20 cos (3x 5) i ett intervall som är stort nog att innehålla samtliga nollställen till y(x). Hur många rötter nns det? (c) Skriv ett program i MATLAB som använder intervallhalvering för att beräkna roten närmast x = 0 med relativfel högst 0.5 10 9. Ange vilket startintervall ni väljer. Hur många iterationer krävs? (d) Genomför, med papper, penna och miniräknare två iterationer med Newton- Raphsons metod och startvärdet x 0 = 1.5. (e) Skriv ett program för Newton-Raphsons metod i MATLAB som beräknar samtliga rötter med relativfel högst 0.5 10 9. Låt programmet skriva ut tabeller som visar hur iteraten konvergerar mot rötterna. Utöka tabellerna så att följande storheter kan avläsas: 1) Antal iterationer som krävs för att få önskat relativfel, 2) Konvergenshastigheten (linjär eller kvadratisk). 3. Programmering av funktioner i MATLAB Börja med att skapa en funktion för f(x) = e x x 3, kalla den funk1. Skapa sedan era (minst 2) funktioner med namn och utseenden som du väljer själv. De ska alla vara funktioner av en variabel och ligga på separata ler med lämpliga namn. Du ska nu skriva ett program som kan tabellera, plotta, integrera och bestämma nollställen till funktioner. Programmet ska först fråga efter namnet på funktionen och läsa in det som en textsträng (läs i MATLABs hjälptext för input om hur man läser in strängar). Programmet ska förutom era egna tre funktioner också fungera för MATLABs inbyggda funktioner, som t ex sin och log). Programmet får alltså inte vara skrivet så att det i förväg vet funktionernas namn. Använd MATLAB-funktionen str2func för att omvandla textsträngen till ett funktionshandtag som kan skickas som argument mellan programmets olika delar; gör help str2func eller läs den mer utförliga referenssidan för den funktionen. Sedan ska programmet upprepat för denna funktion erbjuda tabellering, uppritning, integration och/eller nollställeberäkning med hjälp av en meny. Man ska sedan kunna byta funktion och fortsätta med den nya funktionen eller avsluta.
Ni kan använda er av MATLABs inbyggda funktioner som integral och fzero for integration och nollställesberäkning. Dialogen kan se ut enligt exemplet nedan. Vad heter funktionen? funk1 Ditt val: 1 Tabellering: Ange undre gränsen: 1 Ange övre gränsen: 3 Ange antal punkter: 7 x f(x) 1.0000 1.7183 1.5000 1.1067 2.0000-0.6109 2.5000-3.4425 3.0000-6.9145 Ditt val: 4 Beräkna nollställe: Ange ett startvärde: 2 Ett nollställe är x = 1.8572 Ditt val: 5 Välja ny funktion: Vad heter den nya funktionen? sin
Ditt val: 4 Beräkna nollställe: Ange ett startvärde: 6.3 Ett nollställe är x = 6.2832 Ditt val: 6 Tack och hej! 4. Fortsättning: Olinjär skalär ekvation Man vill använda en annan xpunktsiteration för att bestämma rötter till ekvationen i uppgift 2. (a) Visa att ekvationen i uppgift 2 kan skrivas om till xpunktsiterationen x n+1 = 7 8 x n + 5 14 cos (3x n 5). Genomför med papper, penna och miniräknare, två iterationer med startvärdet x 0 = 0. (b) Förklara teoretiskt vilka av ekvationens rötter just denna xpunktsiteration kan konvergera mot om man väljer startgissningar nära rötterna. (c) Skriv ett MATLAB-program som undersöker praktiskt mot vilka rötter just denna xpunktsiteration konvergerar om man väljer startgissningar nära rötterna. Avbryt xpunktsiterationen efter ett maximalt antal iterationer, t.ex. 200, för att undvika en oändlig slinga om metoden inte konvergerar. Stämmer (b)? (d) Välj startvärdet x 0 = 0. Hur många iterationer behövs för att få relativfel högst 0.5 10 9? Skriv ut en tabell som visar hur snabbt korrektionerna avtar och använd denna för att bestämma och konvergensen är linjär eller kvadratisk? 5. Skärning mellan ellipser, ickelinjärt ekvationssystem Beräkna alla skärningspunkter mellan den sneda ellipsen som denieras av 0.4x 2 + y 2 xy = 10 och den ellips med centrum i (4, 2) och halvaxlarna a = 4 och b = 6 (parallella med koordinataxlarna) som beskrivs av (x 4) 2 /a 2 + (y 2) 2 /b 2 = 1. Ellipserna ska ritas 1 och de erhållna skärningspunkterna markeras med en ring. Hur är det med egenskapen kvadratisk konvergens i din algoritm? 1 Den sneda ellipsen skrivs bäst i polär form inför uppritningen.
6. Numerisk derivering, felskattning och extrapolation I den här uppgiften ska vi studera numerisk derivering i ett testproblem där den exakta derivatan är känd. (I nästa laboration kommer vi använda numerisk derivering som ett steg i lösning av dierentialekvationer där vi inte känner till det exakta svaret.) Vi vill approximera derivatan av funktionen numeriskt i punkten x = 2. f(x) = sin (0.6x 2 ) (a) Derivera först funktionen analytiskt. Svar: f (x) = Räkna ut f (2) = (b) Fyll i de tomma rutorna i nedanstående tabell, där: D(h) är centraldierensapproximationen av derivatan med steglängd h, skillnaden D(h) = D(h) D(2h), felskattningen E skatt (h) = D(h)/(2 p 1) är trunkeringsfelets ledande term, (där p är centraldierensens noggrannhetsordning vad är p?), felet E(h) = D(h) f (2), extrapolerade värdet D extr (h) = D(h) + E skatt (h) är approximationen förbättrad med Richardsonextrapolation. Hur bra är felskattningen här? (c) Skriv ett MATLAB-program som räknar ut D(h) för de fyra steglängderna i tabellen och sedan halverar steglängden minst fyra gånger till. Beräkna felskattningen E skatt (h) och Richardsonextrapolationen D extr (h) samt felen i både D(h) och D extr (h). Plotta felen som en funktion av steglängderna med kommandot loglog och visa hur man kan se nogrannhetsordningen av centraldierensapproximationen och värdet efter Richardsonextrapolation. h D(h) D(h) E skatt (h) E(h) D extr (h) 0.1 1.101802 0.025139 0.05 1.082702 0.019100 0.006039 0.025 1.078158 0.001495 0.0125