1 / 48

Numeriska ber äkningar i Naturvetenskap och Teknik

Numeriska ber äkningar i Naturvetenskap och Teknik. Del A, Tekniska Aspekter, användning av MATLAB Kort historik, varför beräkningar med maskin? Programmering Demo av baskunskaper…. Del B, Numeriska Metoder 1. Numerisk l ösning av differentialekvationer

amie
Télécharger la présentation

Numeriska ber äkningar i Naturvetenskap och Teknik

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Numeriska beräkningar i Naturvetenskap och Teknik • Del A, Tekniska Aspekter, användning av MATLAB • Kort historik, varför beräkningar med maskin? • Programmering • Demo av baskunskaper… Del B, Numeriska Metoder 1. Numerisk lösning av differentialekvationer 2. Algebraiska metoder, matrisoperationer 3. Anpassningar av modeller till mätdata 4. Monte Carlo simuleringar

  2. Varför Numeriska Beräkningar? • Arbetsbesparande för långa men triviala • algebraiska beräkningar. • 2. Reproducerbara resultat, minimering av fel • p.g.a ”den mänskliga faktorn”. Dock dyker nya • möjligheter till fel upp: programmeringsfel. • Lösning av ekvationer, algebraiska men framförallt differentialekvationer som saknar lösning i ”sluten form”, dvs analytisk lösning. • 4. Monte Carlo simuleringar av stokastiska processer Numeriska beräkningar i Naturvetenskap och Teknik Punkt 3 och 4 är två fundamentala orsaker till att datorer är oumbärliga verktyg inom modern fysik.

  3. Numeriska beräkningar i Naturvetenskap och Teknik William Shickard:1592 – 1635 Uppfann 1623 den första mekaniska räknemaskinen. Möjliggjorde addition och subtraktion av 6 siffriga tal 1645 Blaise Pascal: 1623-1662 Uppfann den s.k ”Pascalinen” ca. 1645. Syftet var att underlätta faderns arbete som skattmästare i Rouen. Maskinen kunde addera och multiplicera. Subtraktion var tidsödande komplicerat. 1623

  4. Numeriska beräkningar i Naturvetenskap och Teknik Gottfried Leibnitz: 1646-1716, Konstruerade ca. 1670 den första maskin som kunde utföra alla de fyra grundläggande algebraiska operationerna. Charles Xavier Thomas de Colmar: 1785-1870. Baserad på Leibnitz design konstruerar Thomas den första kommersiellt framgångsrika beräkningsmaskinen, arithometern. Ca 1500 maskiner tillverkas och används huvudsakligen inom den franska förvaltningen 1820 1670

  5. Numeriska beräkningar i Naturvetenskap och Teknik Charles Babbage: 1791-1871 Design av den första programmerbara beräkningsmaskinen med syftet att minska antalet fel i matematiska tabeller. Ada Countess of Lovelace: Assistent till Babbage. Känd som den första programmeraren.

  6. Alan Turing:1912-1954 Datorvetenskap pionjär. Formalisering av algoritm begreppet. Introducerade 1936 den teoretiska bakgrunden till datormaskiner med den s.k. Turingmaskinen, bla. definierad genom en uppsättning väldefinierade instruktioner, lagringsutrymme etc. Idag kallas en maskin av denna typ även en finite state-machine. Numeriska beräkningar i Naturvetenskap och Teknik 1936 Konrad Zuse:1910-1995 Konstruerade 1941 den första program kontrollerade datormaskinen. Baserad på telefonreläer. Delvis finansierad av ”Deutsche Versuchsanstalt fur Luftfarth”.

  7. Numeriska beräkningar i Naturvetenskap och Teknik John von Neumann:1903-1957 En av de första fakultetsmedlemmarna vid IAS, Princeton (tillsammans med Einstein, Gödel, Weyl). Insatser inom matematik, fysik, ekonomisk teori och datorvetenskap. Skrev 1945 ”The first draft report on the EDVAC”. EDVAC, Electronic Discrete Varible Automatic Computer, var en uppföljare till den mer kända ENIAC, the Electronic Numerical Integrator and Calculator som var den första storskaliga programmerbara digitala datorn (vacuumrör). Till skillnad från ENIAC kunde EDVAC omprogrammeras utan handgripliga omkopplingar då både program och data lagrades i minne. Denna typ av maskin som lagrar program och data i samma minnesenhet är den dominerande datorarkitekturen idag och benämns ofta ”von Neumann arkitektur”.

  8. CPU och instruktionsset Numeriska beräkningar i Naturvetenskap och Teknik Varje instruktion som processorn (CPUn) kan utföra motsvarar en kod, dvs ett tal i maskinens minne. Typiska instruktionsset innehåller en s.k. Opcode som är kommandot som skall utföras och en eller flera operander som Opcoden använder som argument. Alla instruktioner är operationer på binära tal i datorn minne. En typisk sekvens för att addera två tal a och b kan ex.vis vara: load a in register 1 load b in register 2 add register 1 to register 2 store register 2 in b Dvs att programmera ett komplext problem på detta vis direkt i maskinkod blir mycket tidsödande och många möjligheter till fel introduceras i kodningen...

  9. Lågnivå resp. högnivåprogrammering Numeriska beräkningar i Naturvetenskap och Teknik I lågnivå eller maskinnära programmering använder man ett programmeringsspråk vars syntax ligger nära maskinens instruktionsset. Ett vanligt sätt att programmera maskinnära är att använda s.k. assembler programmering. Med denna metod ges instruktioner som addition, subtraktion, bitshift, register access etc mha av sk. Mnemonics som översätts till de tal som motsvarar en viss instruktion, dvs till maskinkod. Mnemonics av denna typ kan ex. vis vara: DEC B, (decrease content of register B), ADD A,B (add reg A to reg B) etc. Det mesta av modern tillämpad programmering sker dock i högnivåspråk vars syntaxer är sådan att de ligger närmare vårt vanliga språk. Många olika varianter av högnivåspråk har utvecklats över tiden. Några av de mer kända är FORTRAN, COBOL, ADA, LISP, PASCAL, C, SIMULA, C++... Alla dessa har liknande satsstrukturer inbyggda, men deras syntax är något olika.

  10. Tolkade resp. kompilerade programspråk Numeriska beräkningar i Naturvetenskap och Teknik Källkod Görs varje gång programmet körs Görs en gång Tolk Kompilator Producerar exekverbar kod ”rad för rad” Producerar exekverbar fil Maskinkod Maskinkod Snabbt Rel. långsamt FORTAN, C, C++ BASIC, olika scriptspråk (Perl, Ruby) MATLAB Java: bytecode compilator + Virtual machine -> maskinkod => Portabilitet (compile once run everywhere)

  11. MATLAB som kalkylator: >> 2 * 2 ans = 4 >> ans*2 ans =8 det senaste svaret lagras i ans >> pi ans = 3.14159265358793 Numeriska beräkningar i Naturvetenskap och Teknik Kommandofönstret i MATLAB

  12. Variabel Storhet man själv inför med avsikt att tilldela värden I problem i klassisk fysik kan det vara tid, acceleration, position etc... En mycket GOD ide att ge sina variabler namn som anknyter till deras funktion. För fysikaliska problem är det bra att använda notation som är vedertagen för en fysikalisk storhet. Detta är till mycket stor hjälp vid programskrivning, men något man tjänar på även i enklare sammanhang. Numeriska beräkningar i Naturvetenskap och Teknik

  13. Se ex.vis på det triviala exemplet: >> A=1 A = 1 >> B=2 B = 2 >> C=A*B C = 2 Numeriska beräkningar i Naturvetenskap och Teknik

  14. Och jämför med: >> m=1 m = 1 >> a=2 a = 2 >> F=m*a F = 2 >> Numeriska beräkningar i Naturvetenskap och Teknik

  15. Variabler En variabel kan vara av olika typ. I de flesta kompilerade programspråk måste man deklarera vilken typ en variabel har eftersom detta avgör vilken typ av variabel som skall lagras i minnet. Dessa typer kan ex. vis vara: 1. heltal med olika längd, 8, 16, 32, 64 bitar etc 2. flyttal av olika längd, i dagligt tal decimaltal med olika precision 3. vektorer/matriser 4. teckensträngar etc... Normalt inleds ett sådant program med någon form av deklarationssekvens. Numeriska beräkningar i Naturvetenskap och Teknik

  16. Variabler I MATLAB, liksom ex.vis i BASIC som också är ett tolkat språk, behövs ingen deklaration av variabelns typ. Istället bestämmer tolken vilken typ av variabel som används från de tilldelningssatser som variabeln används i: >> A=1.234 A = 1.2340 A är ett flyttal Numeriska beräkningar i Naturvetenskap och Teknik

  17. Variabler >> b=[1;2;3] b = 1 2 3 b är en vektor >> B= [1 2 3; 4 5 6;7 8 9] B= 1 2 3 4 5 6 Matriser kan ha fler dimensioner än två... 7 8 9 B är en matris Numeriska beräkningar i Naturvetenskap och Teknik

  18. Variabler Det går också att skriva >> b(1)=1 b =1 >>b(2) =2 b=1 2 >>b(3) =3 b=1 2 3 Bra i program.... Numeriska beräkningar i Naturvetenskap och Teknik

  19. Variabler På samma sätt >> A(1,1)=1 A = 1 >> A(1,2) = 2 A = 1 2 >>A(2,1) = 3 A = 1 2 3 0 >>A(2,2) = 4 A = 1 2 3 4 Numeriska beräkningar i Naturvetenskap och Teknik Addera index för fler dimensioner. Går att addera matriser till matriser av högre dimension.

  20. Speciella vektorer: >>a=1:10 ans= 1 2 3 4 5 6 7 8 9 10 >>a=0:0.1:1 ans= 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 Andra: linspace(a,b) hundra jämt fördelade element mellan a och b linspace(a,b,n) n element mellan a och b Delvektorer: x(i), element i x(i:j) delvektorn av elementen i till j x(i:k:j) delvektorn av elementen i till j med steg k x([i1 .... ip]) delvektorn av de givna elementen Numeriska beräkningar i Naturvetenskap och Teknik Se övningsuppgifter

  21. Speciella matriser zeros(n) nxn noll matris zeros(n, o, p...) n x o x p noll matris ones(...) på samma sätt matris med ettor eye(..) enhetsmatris, diagonala ettor rand(..) n x n slumpmatris, 0 till 1 randn(..) normalfördelade element Kompilerat språk så är definieras ofta storleken I deklarationen. Numeriska beräkningar i Naturvetenskap och Teknik

  22. Precision Den inre precisionen i en beräkning i MATLAB ges av att tal lagras som s.k. ”doubles”. I en modern 32 bitars maskin så lagras en double: tecken + exponent + mantissa i 64 bitar vilket ger en precision av ung. 16 siffror. Numeriska beräkningar i Naturvetenskap och Teknik

  23. Tilldelningssatser Notera att tilldelningssatser inte är ekvationer! >> x = 1 x=1 >>x = x +1 x=2 dvs till det tidigare värdet i minnespositionen given av x (=1) adderas 1 med resultatet 2. >>workspace -> ger lista av alla variabler Numeriska beräkningar i Naturvetenskap och Teknik

  24. Två resultat som kan tyda på att en beräkning inte riktigt gått som tänkt Inf (Infinity) >>a=2 a=2 >>a/0 dvs inbyggd ‘exception handler’ ans = inf NaN (Not a Number) >> 0/0 ans = NaN Numeriska beräkningar i Naturvetenskap och Teknik

  25. Tilldelningar & operatorer: De vanliga operatorerna fungerar precis som förväntat: addition + subtraktion - multiplikation * division / potens ^ Och har samma prioritetsordning som vanligt >>a=2*3-1*2 a=4 >>a=2*(3-1)*2 a=8 Numeriska beräkningar i Naturvetenskap och Teknik

  26. Tilldelningar & operatorer: En matris multipliceras med en skalär görs också på vanligt vis: >>A=[1 2 3; 1 2 3; 1 2 3]; >>c = 2; >>B=c*A B= 2 4 6 2 4 6 2 4 6 Men… Numeriska beräkningar i Naturvetenskap och Teknik

  27. Tilldelningar & operatorer: Elementvis multiplikation görs med ./ >> A.*B 2 8 18 2 8 18 2 8 18 På samma sätt elementvis division ./ Numeriska beräkningar i Naturvetenskap och Teknik

  28. Tilldelningar & operatorer: Vanlig matrismultiplikation, antalet rader i A lika med antalet kolonner i B: >> A*B 12 24 36 12 24 36 12 24 36 Andra funktioner: Transponat: A’ Invers: inv(A) Determinant: det(A) Numeriska beräkningar i Naturvetenskap och Teknik

  29. Tilldelningar & operatorer: Finns också funktioner för skalärprodukt och vektorprodukt för vektorer: >>a = [1 2 3]; >>b = [1 2 3]; >>c = dot(a,b) ans = 14 >>cross(a,b) ans = 0 Numeriska beräkningar i Naturvetenskap och Teknik

  30. Varför program? 1. Problem som kräver upprepade beräkningar ex.vis olika indata för att ge ett set av utdata 2. Komplicerade problem med komplicerade beräkningar ex. vis differential-integral ekvationer 3. Idag naturligtvis också i många styrsystem av olika slag. ofta definierade som finite state maskiner flygplan, verkstadsmaskiner, produktionsmaskiner Numeriska beräkningar i Naturvetenskap och Teknik

  31. Att tänka på innan och medan man programmerar: • Definiera det övergripande problemet • Titta efter problemets inre struktur, sök delproblem • Välj lösningsmetod(er) • Analysera indata och utdata. Vad går in i pgm och ut från det. • Gör ev. flödesschema • Debugga programmet medan det skrivs. Skriv aldrig från A till Ö. • Dokumentera kontinuerligt, separat och med pgm-kommentarer Numeriska beräkningar i Naturvetenskap och Teknik

  32. Fel i program är huvudsakligen av två typer: 1. Syntax fel Rena skrivfel (stavfel), missförstånd av syntaxen eller bristande kunskap om syntaxen. Dessa fel upptäcks av kompilatorn eller tolken och ett felmeddelande ges. En erfaren programmerare lär sig vilka typiska misstag som hör ihop med ett givet felmeddelande och löser ett sådant problem snabbt. 2. Run time fel Designfel i programmet. Kan leda till att felaktiga resultat men också till ”programkrash”. Ofta förorsakat av för dålig analys av hur ett fullständigt set av indata handas av programalgoritmen. “Farliga fel”. Lösning, skriv korta delar av programmet och testa, debugga ofta! Numeriska beräkningar i Naturvetenskap och Teknik

  33. Byggblock i program: 1. Satssekvenser På varandra följande enkla satser, ex. vis tilldelningar, alegebraiska operationer, input/ouput operationer 2. Alternativa flödesvägar Beroende på givet villkor skall olika satssekvenser utföras Ex.vis om sökt nogrannhet i en viss beräkning har uppnåtts så avbryts beräkningen och en ny beräkning beroende av den tidigare tar vid alt. har slutresultatet uppnåtts 3. Repetitioner En uppgift utförs flera gånger tills ett givet villkor uppnåtts. Ex.vis om 10 termer i en serie skall räknas ut kan en given iterationsformel upprepas 10 ggr. Numeriska beräkningar i Naturvetenskap och Teknik

  34. Numeriska beräkningar i Naturvetenskap och Teknik Hur sätter man upp ett styrvillkor?

  35. Logiska uttryck: Uttryck med svar av typen sant el. falskt, motsvaras av 1 el. 0 a=1;b=2, a==b falskt, &, |, ~ < <= == >= ~= (skilt från) MATLAB specifikt any(arg) något element ~= all(arg) alla element ~= Numeriska beräkningar i Naturvetenskap och Teknik

  36. Alternativa flödesvägar If-satser if logiskt uttryck if a~=1 satsgrupper disp(a) endif endif Kan byggas ut if logiskt uttryck if a==1 satsgrupper disp(a) else else satsgrupper disp(b) endif endif Numeriska beräkningar i Naturvetenskap och Teknik

  37. Alt. If logiskt uttryck satsgrupp elseif logiskt uttryck satsgrupp elseif logiskt uttryck satsgrupp .... else satsgrupp endif Numeriska beräkningar i Naturvetenskap och Teknik

  38. Switchsatser: switch variabel switch a case värde1 case {1} satsgrupper disp (a) case värde2 case {7} satsgrupper b=input(’give b’) ’ .... case värde3 case {11.7} satsgrupper c=23 otherwise otherwise satsgrupper a=a+23 end end Numeriska beräkningar i Naturvetenskap och Teknik

  39. For loop: for variabel = a:h:b for a=0:0.1:10 satsgrupper b=b+a end end While loop: while logiskt uttryck while a<b satsgrupp a=a+0.1 end end Loopar kan förstås skrivas inuti andra loopar, då får man s.k. nästlade loopar... Error(teckensträng), pause, break kan användas för styrning ` Numeriska beräkningar i Naturvetenskap och Teknik

  40. Error(teckensträng) avbryter m-fil och skriver ut sträng pause väntar tills godtycklig tanget trycks ned break kan användas för styrning går ur den while och for loop programmet exekverade i Numeriska beräkningar i Naturvetenskap och Teknik

  41. Funktioner När alla delproblem i programmet har definerats så blir det ofta naturligt att utföra vissa uppgifter med samma kod som kan kallas på flera gånger från ett huvudprogram. Definition: Function [utvar1, utvar2, utvar…] = filnamn(invar1, invar2, invar…) %kommentarer Exempel på anrop: [b1, b2, b3….] = filnamn(a1, a2,a3….) Numeriska beräkningar i Naturvetenskap och Teknik

  42. Globala variabler: Variablerna i en funktion är normalt lokala, d.v.s de sätts till 0 när programexekveringen lämnar funktionen. Man kan dock definiera att vissa variabler skall vara åtkomliga utanför rutinen och därmed inte nollställas. Detta görs med en global definition enl: global var1 var2 … Numeriska beräkningar i Naturvetenskap och Teknik

  43. Förmedlning av indata till program och utdata från program, s.k. i/o • INDATA • Användaren ger indata som svar på frågor från programmet • (terminal input) • 2. Hårdkodning, indata ges i programmet i form av tilldelningssatser • Indata läses från fil • UTDATA • Skrivs på skärmen (terminal output) • Skrivs till fil Numeriska beräkningar i Naturvetenskap och Teknik

  44. Input/Output >> svar = input(‘ge input värde:’) ge input värde:10 svar= 10 >>svar=input(‘ge input värde:’) ge input värde:’abc’ svar= abc Skriva till skärmen med disp >>disp(svar) abc Numeriska beräkningar i Naturvetenskap och Teknik

  45. Läsa skriva till-från filer 1. Spara workspace save myfile sparar alla variabler i myfile.mat load myfile.mat läser in alla variabler från myfile alt. save myfile a b c sparar variablerna a, b, c 2. Formatterad inläsning och utskrift fp= fopen(namn,’r’), öppnar fil för läsning fp= fopen(‘namn’,’w’), öppnar fil för skrivning Numeriska beräkningar i Naturvetenskap och Teknik

  46. Läsa skriva till-från filer stänga fil: fclose(fp) läsa från fil: A=fscanf(fp,formatkod, dim) dim = n, läs n element till A som kolonnvektor dim = inf, läs alla tal i filen till A som kolonnvektor dim = [m,n], m x n element till A som m x n matris skriva till fil: A=fprintf(fp,formatkod, A, dim) Formatkoder %e, %E exponentform med litet/stort e %f, decimalform, %u heltal, %s teckensträng, \n ny rad Numeriska beräkningar i Naturvetenskap och Teknik

  47. Input/Output Mer sofistikerad utskrift: fprintf(formatkod,x) Formatkoder: %a.bf decimalform, a siffror varav b decimaler, skrivs ut högerställt %a.be exponent, litet e %a.bE exponent, stort E %u heltal >>a = 1.1234; >>fprintf(‘talet är %4.2f’,a) Talet är 1.23 Numeriska beräkningar i Naturvetenskap och Teknik

  48. M-filer I MATLAB kan man skriva sina program el. script i s.k. m-filer m.h.a. en inbyggd editor och en debugfunktion. För större program lägger man gärna olika funktioner i egna m-filer Öppna editorn med >>edit Numeriska beräkningar i Naturvetenskap och Teknik

More Related