Newtons metod och arsenik på lekplatser Karin Kraft och Stig Larsson Beräkningsmatematik Chalmers tekniska högskola 1 november 2004
Introduktion Denna övning ingår i Lärardag på Chalmers för kemilärare från högstadiet och gymnasiet. Syftet med övningen är att ge dig en uppfattning om hur vi undervisar i matematik vid KB-sektionen på Chalmers. Ytterligare material och information finner du genom att besöka http://www.math.chalmers.se/ stig/presentations/larardag_kb/ Matlab Idag ska vi använda oss av ett datorprogram som heter Matlab. Matlab är en förkorting av Matrix Laboratory. Matlab kan ses som ett programmeringsspråk som är speciellt anpassat för att programmera numeriska lösningar till matematiska problem. Det innehåller många grafiska verktyg och olika påbyggnadsmoduler och det används mycket i industrin. Matlab är ett kommersiellt program. De program som du använder idag kan också köras i det fria programmet GNU Octave som finns att ladda ned från internet. Förberedelser Starta Explorer för att få tillgång till internet. Gå till hemsidan: http://www.math.chalmers.se/ stig/presentations/larardag_kb/ Kopiera alla programfiler som ligger under länken programfiler till din hemkatalog. Funktioner Vi ska arbeta med funktionen f(x) = x 2 2 Starta nu Matlab genom att dubbelklicka på Matlab-ikonen. Välj att skapa en ny m-fil genom att klicka på ikonen med det vita papperet. Detta startar Matlabs editor/textbehandlare i vilken man kan skriva sitt program. Vi ska nu skriva in vår funktion med följande syntax:
function y = funk1( x ) y=xˆ2-2; Funktionens invärde är x, returvärdet är y och funk1 är funktionens namn. Spara filen med namnet funk1.m. Räkna ut värdet av funktionen i punkten x = 5 för hand. f(5) = Nu ska vi göra samma sak med hjälp av Matlab. För att beräkna funktionsvärdet i en punkt behöver man en funktionsfil, ett värde och ett kommando som talar om vad man vill göra. Skriv följande kommando i det högra fönstret: >> f=feval( funk1,5) Kommandot feval evaluerar funktionen funk1 i punkten x = 5. f(5) = Prova att räkna ut funktionsvärdet i några olika punkter. f( ) = f( ) = Skriv en funktionsfil funk2.m för någon annan polynomfunktion.
Grafritning Nu ska vi rita grafen y = f(x) till vår funktion med hjälp av Matlab. Detta kan man göra med följande kommando: >> fplot( funk1,[-2,2]) Det andra argumentet, [ 2, 2], anger på vilket intervall man ska rita funktionen. Funktionerna cos(x) och sin(x) har inbyggda funktionsfiler i Matlab. Rita upp cos(x) på intervallet [ π, π]. Derivering Derivatan av en funktion f(x) definieras formellt f f(x + h) f(x) (x) = lim. h 0 h Om t.ex. f(x) = x 2 innebär detta att f(x + h) f(x) = (x + h) 2 x 2 = x 2 + 2hx + h 2 x 2 = 2hx + h 2, dvs f(x + h) f(x) h Går vi slutligen i gräns med h fås = 2hx + h2 h = 2x + h. f(x + h) f(x) lim h 0 h = lim h 0 2hx + h 2 h = lim h 0 (2x + h) = 2x. Beräkna derivatan till f(x) = x 2 2 i punkten x = 0 (f(x) = x r har derivatan f (x) = rx r 1 ). f (0) =
Beräkna derivatan till f(x) = x 2 2 i punkten x = 3. f (3) = Numeriska derivator En dator kan inte göra någon formell gränsövergång, eftersom den bara arbetar med diskreta tal. Alltså kan vi inte beräkna derivatan av en funktion f(x) exakt med hjälp av definitionen ovan. Vi kan emellertid approximera derivatan genom att välja h litet, t.ex. 10 4, och sedan beräkna kvoten f (x) f(x + h) f(x) h för ett givet värde på x och för en given funktion f(x). Vi har skrivit ett program som gör den här beräkningen. Funktionen jacobi beräknar den numeriska derivatan för en funktion i en given punkt. >> f_prim=jacobi( funk1, 2 ) Beräkna numeriska derivatan till f(x) i punkten x = 0. f (0) = Beräkna numeriska derivatan till f(x) i punkten x = 3. f (3) = Extraövning: Titta på koden för funktionen jacobi och försök förstå hur den fungerar. Öppna filen genom att välja open i file-menyn och välj filen jacobi.m
Nollställen till funktion Vi vill nu hitta lösningar till ekvationen f(x) = 0. Först räknar vi ut rötterna exakt. Bestäm lösningarna till f(x) = x 2 2 = 0. x 1 = x 2 = Newtons metod Nu ska vi använda Newtons metod för att numeriskt beräkna approximativa lösningar till f(x) = 0. Vi börjar med att beräkna ekvationen för tangenten till kurvan y = f(x) i punkten a enligt y = f(a) + f (a)(x a) Bestäm tangentens ekvation till f(x) = x 2 2 i punkten a = 1. y = Om nu x i är en approximativ lösning till f(x) = 0 så får vi en bättre approximativ lösning x i+1 genom att lösa den linjäriserade ekvationen: f(x i ) + f (x i )(x i+1 x i ) = 0. Dvs vi söker den punkt x i+1 där tangenten till f(x) i punkten x i skär x-axeln. Detta leder till Newtons metod: x i+1 = x i f(x i) f (x i ).
Genom att utföra upprepade iterationer med Newtons metod får vi en följd av tal som konvergerar mot en lösning till f(x) = 0. Utför en iteration med Newtons metod för att hitta ett nollställe till f(x). Använd startvärde x 0 = 2. x 0 = f(x 0 ) = f (x 0 ) = x 1 = Nu ska vi beräkna några fler iterationer med hjälp av datorn. I filen newton.m finns ett program för Newtons metod. När man anropar funktionen behöver man en funktionsfil, ett startvärde och en tolerans som anger hur nära man vill komma den exakta lösningen. Till exempel >>x=newton( funk1, 2, 1e-7) I det här fallet är startvärdet 2, toleransen 10 7, vilket skrivs 1e-7 i Matlab, och x är den approximativa lösningen. Bestäm en lösning till x 2 2 = 0 med hjälp av programmet newton. Använd startvärde x 0 = 2 och tolerans 10 1. x = Räkna ut 2 med kommandot >>sqrt(2) och jämför med svaret i föregående uppgift. Varför blir svaren inte lika?
x = Bestäm en lösning till x 2 2 = 0 med hjälp av programmet newton. Använd samma startvärde som förut, x 0 = 2, men byt till toleransen 10 3. Jämför svaret med svaret i föregående uppgift. x = Bestäm en annan lösning till x 2 2 = 0 med hjälp av programmet newton genom att byta startvärde till x 0 = 2 och tolerans 10 3. x = Vi ser i övningarna att man får fram olika rötter till ekvationen beroende på vilket startvärde man väljer. Man ska alltså gissa ett startvärde som ligger nära den verkliga roten som man är intresserad av. Man måste också ge en tolerans så att man får önskad noggrannhet i svaret. Newtons metod för system av ekvationer Newtons metod kan utvidgas till att lösa system av ekvationer. Vi har lagrat systemet x 2 1 + x 2 2 = 0 x 3 1 + 3x 2 2 = 0 i filen syst.m. Den fungerar nu som vår funktionsfil. Eftersom vi har ett system kommer derivatan nu att vara en matris. Kör Matlab-kommandot:
>>A=jacobi( syst,[2;1]) för att räkna ut derivatan i punkten (2, 1). A = När vi anropar programmet newton med denna fil behöver vi som förut också ett startvärde, som nu ska vara en vektor med två tal, och en tolerans. >>x=newton( syst, [2;1], 1e-3) Kör ovanstående Matlab-kommando för att räkna ut lösningen till systemet. x 1 = x 2 = Arsenik på lekplatser Det har diskuterats i Göteborgsposten om farhågor för höga halter av arsenik i stadens lekplatser. Den höga arsenikhalten kan bero på att man har använt tryckimpregnerat trä till lekredskap och sandlådor. Tryckimpregnering av virke görs bland annat med lösningar av Na 3 AsO 4 och dikromat varpå det antagligen bildas svårlösligt Cr(AsO 4 ) inuti virket. Gränsvärdet för arsenik är 0, 003 mg/m 3. Reaktionen när Cr(AsO 4 ) löses i vatten är Arsenatjonens hydrolys: Cr(AsO 4 )(s) Cr 3+ (aq) + AsO 3 4 (aq) H 3 AsO 4 (aq) H 2 AsO 4 (aq) + H + (aq) (1) H 2 AsO 4 (aq) HAsO 2 4 (aq) + H + (aq) HAsO 2 4 (aq) AsO 3 4 (aq) + H + (aq)
Reaktion (1) har jämviktskonstant K = 5, 62 10 3 M. Man kan skriva jämviktsekvationen för reaktion (1) med hjälp av koncentrationerna och jämviktskonstanten enligt K = [H 2AsO 4 ][ H + ], (2) [H 3 AsO 4 ] där [A] betecknar koncentrationen av ämne A. Vi skriver om (2) till 0 = K [H 2AsO 4 ][ H + ] [H 3 AsO 4 ] Om vi ställer upp jämviktsekvationerna på samma sätt för alla reaktioner och sätter koncentrationerna av de olika ämnena till våra obekanta x 1, x 2,..., x 6 får vi ett system av ekvationer på formen f(x) = 0. Vi använder Newtons metod för att lösa detta system för flera olika ph-värden i programmet arsenik. Programmet ritar upp halten av arsenik som funktion av ph i en figur. Kör programmet arsenik >>arsenik Vad är arsenikhalten vid ph= 7? Ligger den under gränsvärdet? Läs programmen arsenik och arsenik ekvationer för att få en uppfattning om hur våra teknologer arbetar med Matlab för att lösa ett realistiskt kemiproblem. Studenternas uppgift Arsenik på lekplatser är ett projekt som teknologerna utför i matematikkursen redan på höstterminen i årskurs 1. Utifrån de kemiska reaktionerna ställer de upp ekvationssystemet och skriver programmen som behövs för att lösa det.