SF1518,SF1519,numpbd15 LABORATION 2 Trapetsregeln, MATLAB-funktioner, ekvationer, numerisk derivering - Genomför laborationen genom att göra de handräkningar och MATLAB-program 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. Det materialet ska du ha med som stöd på lappskrivningen den 7/10. Klarar du den så får du bonuspoäng (1,5) till tentan. Om skrivningen inte är godkänd eller om du uteblir, måste Lab2 redovisas muntligt enligt särskilt schema, men då ges ingen bonus. Föreläsningsbilder, Pohl avsnitt 5.1, 5.4, kapitel 3, avsnitt 4.2 och exempel 2.10, och NAM (Gerd Eriksson) avsnitt 6.1-6.8, 5.2.1, 1.3 och 3.8, ger kött på benen för denna laboration, liksom MATLAB-böckerna av Moore, kap.6, 12, och Chapman, kap.5. 1. Trapetsregeln för numerisk integrering - noggrannhetsordning Följande integral ska beräknas.. I = 1 1 x + 2 dx 1A. Gör först följande laborationsförberedande uppgifter a)-c): a) Rita först en graf över integranden, dvs y = x + 2. Uppskatta den sökta integralens värde ur grafen. Svar: I b) Använd MATLABs symboliska matematik för att beräkna obestämda integralen, F (x), och bestämda integralen, F (1) F ( 1), som används som referensvärde. Gör om det exakta uttrycket till decimaltal med eval. Svar: F (x) = I ref = F (1) F ( 1) = 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 2.796336 0.125 2.797160 0.0625 2.797366 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ärdesiffror. Felet avtar ungefär proportionellt mot en potens av steglängden h; vilken? Vad säger det om trapetsregelns noggrannhetsordning?
1B. Skriv sedan ett MATLAB-program som beräknar integralen numeriskt med trapetsregeln. Undersök hur trunkationsfelet, E T, beror av steglängden, h, genom att rita felen som funktion av följande steglängder 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 man uppskattar metodens noggrannhetsordning, p, med hjälp av grafen. 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. 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 flera (minst 2) funktioner med namn och utseenden som du väljer själv. De ska vara funktioner av en variabel och ligga på separata filer med lämpliga namn. Skriv nu 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!
3. Olinjär skalär ekvation Man vill bestämma samtliga rötter till följande ekvation 7x 20 cos (3x 5) = 0 (a) Hitta en övre och en undre gräns för intervallet där rötter kan tänkas finnas. (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 finns 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). (f) Visa att ekvationen kan skrivas om till fixpunktsiterationen 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. (g) förklara teoretiskt vilka av ekvationens rötter i just denna fixpunktsiteration kan konvergera mot om man väljer startgissningar nära rötterna. (h) Skriv ett MATLAB-program som undersöker praktiskt mot vilka rötter just denna fixpunktsiteration konvergerar om man väljer startgissningar nära rötterna. Avbryt fixpunktsiterationen efter ett maximalt antal iterationer, t.ex. 200, för att undvika en oändlig slinga om metoden inte konvergerar. Stämmer (b)? (i) 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? 4. Skärning mellan ellipser, ickelinjärt ekvationssystem Beräkna alla skärningspunkter mellan den sneda ellipsen som definieras 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 algoritmen? 1 Den sneda ellipsen skrivs bäst i polär form inför uppritningen.
5. Numerisk derivering, felskattning och extrapolation Vi vill approximera derivatan av funktionen numeriskt i punkten x = 2. f(x) = sin (0.6x 2 ) (a) Börja med att derivera funktionen analytiskt med hjälp av MATLAB. Substituera x mot 2, vad blir resultatet?. Evaluera detta resultat. Gör om derivatan till en numerisk MATLAB-funktion och beräkna värdet av f (2) = med hjälp av denna. Svar: f (x) = Med substitution f (2) = Med numeriska funktionen f (2) = (b) Fyll i de tomma rutorna i nedanstående tabell, där: D(h) är centraldifferensapproximationen 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 centraldifferensens 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 centraldifferensapproximationen 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