MATEMATISKA VETENSKAPER TMV5 016 Chalmers tekniska högskola Läsvecka 5 Examinator: Anders Logg TMV5 Inledande matematik M Veckoprogram för läsvecka 5 Efter att ha avslutat vårt studie av derivator kommer vi den här veckan att fokusera på beräkningsmatematik och förbereda oss inför läsvecka 6 då vi skall studera och implementera generella algoritmer för ekvationslösning. Det blir en föreläsning med ny teori då vi studerar Lipschitzkontinuitet som är ett centralt verktyg för konstruktion och analys av lösningsalgoritmerna, men vi kommer framförallt att fokusera på programmering, både på föreläsningarna och övningarna. Ta chansen att jobba ikapp med tidigare uppgifter om du ligger efter, och glöm inte att göra veckans datordugga (dugga nummer ) för att samla bonuspoäng inför tentan! Vi ses på föreläsningarna! Anders Föreläsningar Avsnitt 1 Innehåll F1 Lipschitz-kontinuitet F13 Flyttal och avrundningsfel F14 Beräkningsmatematik Övningar Uppgifter Ö1 Övning 5.1 5.10 (a) och (b) Ö13 Problem 5.1 5.5 + gamla uppgifter om du ligger efter Ö14 Datorövning 5.1 5.5 http://xkcd.com/ 1 AE = Adams/Essex, AL = Anteckningar i inledande matematik, RP = Pettersson, JM = Madjarova Understrukna uppgifter = extra viktiga, alternativt demonstreras av övningsledare.
Uppgifter läsvecka 5 Övningar Övning 5.1 Bestäm en Lipschitz-konstant på intervallet [ 10, 10] för följande funktioner genom att använda Lipschitz-konstantens definition. (a) f (x)=kx+ m (b) f (x)=5 (c) f (x)=1/x (d) f (x)= x Övning 5. Bestäm en Lipschitz-konstant på intervallet [,5] för följande funktioner genom att använda Lipschitz-konstantens definition. (a) f (x)=x (b) f (x)=x 3 (c) f (x)=x n (n Z + ) (d) f (x)=x n (n Z + ) Övning 5.3 Bestäm en Lipschitz-konstant för funktionen f (x) =x /(x + 1) på följande intervall genom att använda Lipschitz-konstantens definition. (a) [0,1] (b) [1,] (c) [ 3, 1] (d) [ 3, ] Övning 5.4 Bestäm en Lipschitz-konstant för funktionen f (x)=3 + p 1 + x på följande intervall genom att använda Lipschitz-konstantens definition. (a) [1,] (b) [0,1] (c) [ 1,0] (d) [ 1,1] Övning 5.5 Bestäm den bästa möjliga Lipschitz-konstanten på intervallet [ 10, 10] för följande funktioner genom att derivera. (a) f (x)=kx+ m (b) f (x)=5 (c) f (x)=1/x (d) f (x)= x Övning 5.6 Bestäm den bästa möjliga Lipschitz-konstanten på intervallet [,5] för följande funktioner genom att derivera. (a) f (x)=x (b) f (x)=x 3 (c) f (x)=x n (n Z + ) (d) f (x)=x n (n Z + ) Övning 5.7 Bestäm den bästa möjliga Lipschitz-konstanten för funktionen f (x)=x /(x+1) på följande intervall genom att derivera. (a) [0,1] (b) [1,] (c) [ 3, 1] (d) [ 3, ] Övning 5.8 Bestäm den bästa möjliga Lipschitz-konstanten för funktionen f (x) =3 + p 1 + x på följande intervall genom att derivera. (a) [1,] (b) [0,1] (c) [ 1,0] (d) [ 1,1] Övning 5.9 Bestäm Taylor-polynomet P 3 (x) runt x = 1 för följande funktioner. (a) f (x)=sin(px) (b) f (x)=sin(lnx) (c) f (x)=3x + 5x + 1 (d) f (x)=sin(lnx)+3x + 5x + 1 Övning 5.10 Bestäm Taylor-polynomet P 3 (x) för f (x)=(x + 1)/(x + ) runt följande punkter. (a) x = 0 (b) x = 1 (c) x = (d) x =
Problem Problem 5.1 Visa att om f : R! R är Lipschitz-kontinuerlig och talföljden (x n ) n=0 är konvergent, så är också talföljden ( f (x n )) n=0 konvergent. Problem 5. Visa att f (x)= p x inte är Lipschitz-kontinuerlig på intervallet [0,1]. Problem 5.3 För vilka a är f (x)=x a Lipschitz-kontinuerlig på intervallet [0,1]? Problem 5.4 En kula med vikten 7.6 kg skall tillverkas av järn (densitet r = 7.874 g/cm 3 ). Hur noggrannt måste kulans radie bestämmas (i absoluta tal) för att noggrannheten i kulans vikt skall vara 1h? Ledning: Använd Lipschitz-villkoret. Problem 5.5 Hur noggrannt måste längden L på ett pendelur bestämmas för att uret skall dra sig maximalt en sekund på ett år? Ledning: Använd Lipschitz-villkoret och antag att periodtiden T = 1 s ges av T = p p L/g för g = 9.81 m/s. Datorövningar Datorövning 5.1 Skriv ett program som (approximativt) beräknar Lipschitz-konstanten för funktionen f (x) =sin(cos(ln(px))) på intervallet [1, 100]. Ledning: Låt x=linspace(1, 100,N) och använd funktionerna diff och max. Datorövning 5. Försök att på samma sätt bestämma Lipschitz-konstanten för funktionen f (x)=sin(tan(x)) på intervallet [0,p/]. Datorövning 5.3 Skriv ett program som beräknar summan  N n=1 n, dels genom att använda en loop och dels genom att använda funktionen sum. Plotta tiden det tar att beräkna summan som funktion av N för båda tillvägagångssätten. Ledning: Använd funktionen time.time i Python och funktionerna tic och toc i MATLAB. Datorövning 5.4 Skriv ett program som beräknar produkten P N n=1n = 1 3 N, dels genom att använda en lopp och dels genom att använda funktionen prod. Plotta tiden det tar att beräkna summan som funktion av N för båda tillvägagångssätten. Datorövning 5.5 Undersök hur många flyttal som maximalt kan lagras i datorns minne. Hur många bytes motsvarar detta? Jämför med datorns arbetsminne (RAM). Ledning: Använd funktionen ones(n) och experimentera med allt större N. Använd gärna en systemmonitor ( Aktivitetskontroll, top eller liknande verktyg) för att övervaka processen när den allokerar minne.
Facit Övningar Ö5.1 (a) L f = k (b) L f = 0 (c) Ej Lipschitz-kontinuerlig (d) L f = 1 Ö5. (a) L f = 10 (b) L f = 75 (c) L f = n 5 n 1 (d) L f = n 5 n 1 n Ö5.3 (a) L f = 3 (b) L f = (c) Ej Lipschitz-kontinuerlig (d) L f = 15 Ö5.4 (a) L f = 1/ p (b) L f = 1 (c) L f = 1 (d) L f = 1 Ö5.5 (a) L f = k (b) L f = 0 (c) Ej Lipschitz-kontinuerlig (d) L f = 1 Ö5.6 (a) L f = 10 (b) L f = 75 (c) L f = n 5 n 1 (d) L f = n (n+1) Ö5.7 (a) L f = 3 /4 (b) L f = 8 /9 (c) Ej Lipschitz-kontinuerlig (d) L f = 3 /4 Ö5.8 (a) L f = 1/ p (b) L f = 1 (c) L f = 1 (d) L f = 1 Ö5.9 (a) P 3 (x) = p(x 1)+p 3 (x 1) 3 /6 (b) P 3 (x) =(x 1) (x 1) / +(x 1) 3 /6 (c) P 3 (x)=3x + 5x + 1 (d) P 3 (x)=(x 1) (x 1) / +(x 1) 3 /6 + 3x + 5x + 1 Ö5.10 (a) P 3 (x)= 1 / + x/4 x /8 + x 3 /16 (b) P 3 (x)=x + 1 (x + 1) +(x + 1) 3 (c) Existerar inte (d) P 3 (x)= 3 /4 +(x )/16 (x ) /64 +(x ) 3 /56 Problem P5.1 Låt x = lim n! x n (som existerar) och låt f = f ( x). Då gäller att f f (x n ) = f ( x) f (x n ) 6 L f x x n < e när x x n < e/l f, vilket är uppfyllt för n tillräckligt stort eftersom (x n ) n=0 är konvergent. P5. Antag att f (x)= p x är Lipschitz-kontinuerlig med Lipschitz-konstant L f. Tag x 1 = 0 och p x = x > 0. Då gäller att f (x 1 ) f (x ) 6 L f x 1 x, det vill säga 0 x 6 L f 0 x, p x 6 L f x, L f > 1/ p x. Genom att låta x! 0 ser vi att Lipschitz-konstanten inte är begränsad och att funktionen därmed inte är Lipschitz-kontinuerlig. P5.3 Derivatan f 0 (x)=ax a 1 är begränsad på [0,1] för a > 1, vilket innebär att funktionen är Lipschitz-kontinuerlig med Lipschitz-konstanten L f = a. P5.4 Massan ges av m(r)=4pr 3 r/3. Derivera och få Dm 6 L f Dr med L f = 4pr r. Sätt Dm /m 6 L f Dr /m = 1h, vilket ger Dr = 1 10 3 m/l f 0 µm. P5.5 Derivera och få DT 6 L f DL med L f = p/ p Lg = p /(gt ). Sätt 365 4 3600 DT 6 365 4 3600 L f DL = 1 s, vilket ger DL 16 nm. Datorövningar D5.1 3 def f(x): 4 return sin( cos(log(pi*x))) 5 6 Ns = logspace(1, 6, 0) 7 L_fs = [] 8 9 for N in Ns: 10 11 x = linspace(1, 100, int(n)) 1 y = f(x) 13 14 L_f = max( abs( diff(y) / diff(x))) 15 L_fs.append(L_f) 16 17 print N, L_f 18
figure() 0 plot(x, f(x)) 1 xlabel( x ) ylabel( f(x) ) 3 grid( True) 4 5 figure() 6 semilogx(ns, L_fs, -o ) 7 xlabel( N ) 8 ylabel( L_f ) 9 grid( True) 30 31 show() 1 f = @(x) sin( cos( log(pi*x))) 3 Ns = logspace(1, 6, 0); 4 L_fs = []; 5 6 format long 7 8 for N = Ns 9 10 x = linspace(1, 100, round(n)); 11 y = f(x); 1 13 L_f = max( abs( diff(y)./ diff(x))); 14 L_fs = [L_fs L_f]; 15 16 [N, L_f] 17 18 end 0 figure() 1 plot(x, f(x)) xlabel( x ) 3 ylabel( f(x) ) 4 grid on 5 6 figure() 7 semilogx(ns, L_fs, -o ) 8 xlabel( N ) 9 ylabel( L_f ) 30 grid on Lipschitz-konstanten skall konvergera mot L f = sin(log(p)) cos(cos(log(p))) 0.8339. D5. 3 def f(x): 4 return sin( tan(x)) 5 6 Ns = logspace(1, 6, 0) 7 L_fs = [] 8 9 for N in Ns:
10 11 x = linspace(0, pi/, int(n)) 1 y = f(x) 13 14 L_f = max( abs( diff(y) / diff(x))) 15 L_fs.append(L_f) 16 17 print N, L_f 18 figure() 0 plot(x, f(x)) 1 xlabel( x ) ylabel( f(x) ) 3 grid( True) 4 5 figure() 6 semilogx(ns, L_fs, -o ) 7 xlabel( N ) 8 ylabel( L_f ) 9 grid( True) 30 31 show() 1 f = @(x) sin( tan(x)) 3 Ns = logspace(1, 6, 0); 4 L_fs = []; 5 6 format long 7 8 for N = Ns 9 10 x = linspace(0, pi/, round(n)); 11 y = f(x); 1 13 L_f = max( abs( diff(y)./ diff(x))); 14 L_fs = [L_fs L_f]; 15 16 [N, L_f] 17 18 end 0 figure() 1 plot(x, f(x)) xlabel( x ) 3 ylabel( f(x) ) 4 grid on 5 6 figure() 7 semilogx(ns, L_fs, -o ) 8 xlabel( N ) 9 ylabel( L_f ) 30 grid on Funktionen är ej Lipschitz-kontinuerlig: L f! på [0,b] då b! p/.
D5.3 from time import time 3 4 Ns = logspace(1, 6, 0) 5 t1 = [] 6 t = [] 7 8 for N in Ns: 9 10 t = time() 11 s = 0 1 for n in range(1, int(n) + 1): 13 s += n 14 t1.append(time() - t) 15 16 t = time() 17 s = sum( range(1, int(n) + 1)) 18 t.append(time() - t) 0 loglog(ns, t1, g-o ) 1 loglog(ns, t, r-o ) legend([ Loop, sum() ]) 3 grid( True) 4 show() 1 Ns = logspace(1, 6, 0); t1 = []; 3 t = []; 4 5 for N = Ns 6 7 tic() 8 s = 0; 9 for n = 1:N 10 s = s + n; 11 end 1 t1 = [t1, toc()]; 13 14 tic() 15 s = sum(1:n); 16 t = [t, toc()]; 17 18 end 0 loglog(ns, t1, g-o ) 1 hold on loglog(ns, t, r-o ) 3 legend( Loop, sum() ) 4 grid on
D5.4 from time import time 3 4 Ns = logspace(1, 5, 0) 5 t1 = [] 6 t = [] 7 8 for N in Ns: 9 10 t = time() 11 p = 1 1 for n in range(1, int(n) + 1): 13 p *= n 14 t1.append(time() - t) 15 16 t = time() 17 p = prod(range(1, int(n) + 1)) 18 t.append(time() - t) 0 loglog(ns, t1, g-o ) 1 loglog(ns, t, r-o ) legend([ Loop, prod() ]) 3 grid( True) 4 show() 1 Ns = logspace(1, 6, 0); t1 = []; 3 t = []; 4 5 for N = Ns 6 7 tic() 8 s = 1; 9 for n = 1:N 10 s = s*n; 11 end 1 t1 = [t1, toc()]; 13 14 tic() 15 s = prod(1:n); 16 t = [t, toc()]; 17 18 end 0 loglog(ns, t1, g-o ) 1 hold on loglog(ns, t, r-o ) 3 legend( Loop, prod() ) 4 grid on
D5.5 3 x = ones(8e9) 4 print len(x) 1 x = ones(e9, 1); size(x) (Python) På en modern laptop (016) med 16 GB internminne (RAM) och väl tilltaget växlingsutrymme (swap space) går gränsen vid ca 8 10 9 element (innan processen kraschar), vilket innebär 8 10 9 8 byte = 8 10 9 8/104 3 GB 59.6 GB. I god överensstämmelse med detta rapporterar operativsystemet att Python-processen använder 60 GB. (MATLAB) Med MATLAB går gränsen vid 10 9 element (innan MATLAB själv sätter stopp för större allokering), vilket innebär 10 9 8 byte = 10 9 8/104 3 GB 14.9 GB. I god överensstämmelse med detta rapporterar operativsystemet att MATLAB-processen använder 15 GB.