Numeriska Metoder och Grundläggande Programmering för P1, VT2014 Föreläsning 1, Introduktion & MATLABrepetition. (Kap. 1 2 i MATLAB Programming for Engineers, S. Chapman) January 20, 2014
Kursansvarig och huvudföreläsare: Beatrice Frock Föreläsningar på MATLAB-delen: Erik von Schwerin Undervisning: Föreläsningar Presenterar teori och färdiga program/exempel. Stöd till egna studier av kurslitteraturen. Övningar Visar problem och följer lösningsprocessen. Laborationer Ni får problem och ska själva arbeta er fram till deras lösning. Övningsledare: Grupp 1 B. F. Grupp 2 E. v. S. Grupp 3 Erik Dalsryd
Kursen består av: numeriska metoder, programmering i MATLAB. Lärandemål:... ge... insikt om att numeriska metoder och programmeringsteknik behövs för att göra tillförlitliga och effektiva simuleringar av tekniska och naturvetenskapliga processer baserade på matematiska modeller.
Efter kursen kan ni använda numeriska metoder för att: Lösa olinjära ekvationer: hitta x s.a. e x2 cos(3x) 2 = 0 Lösa linjära och icke-linjära ekvationssystem: hitta x, y, och z s.a. x 3y + 2z = 0 x 3yz = 0 6x + 5y = 3z cos(x) + 5y = 3z 4(y z) = x z y = 1/x
Interpolera data: Skatta y(2010) då t 2007 2009 2011 2013 y 432 467 547 693 och minstakvadratanpassning: bestäm parametrarna a, b, c, och w i modellfunktionen f (t) = ae bx + c cos (wt) givet data t 2.1 2.2 2.4 2.5 2.7 2.8 f (t) 13.4 16.2 15.1 17.8 19.3 17.6 Ni kommer också kunna avgöra om den föreslagna modellfunktionen är bra, eller måste förbättras.
Beräkna integraler: 10 3 cos (2x)e x3 0.8 + x 2 dx 0 1 ( x x 2 + dx 1 + x 3) och lösningar till differentialekvationer: rita y(x) för 5 x 9 då ( d 3 y d 2 y +x cos (yx) = 0.86 dx 3 dx dy ) y(5) = 12, med y 2 dx (9) = 34, y (5) = 56. Och bedöma noggrannheten i de numeriska svar som beräknats.
Numeriska metoder Efter kursen kan ni: identifiera olika matematiska problem och skriva om dem på en form som är lämplig för numerisk behandling välja lämplig numerisk metod för behandling av det givna problemet motivera val av metod genom att redogöra för fördelar och begränsningar välja en algoritm som leder till effektiva beräkningar och implementera den i ett programspråk lämpat för beräkningar t ex Matlab presentera resultaten på ett relevant och illustrativt sätt göra tillförlitlighetsbedömning av resultaten
Programmering Efter kursen kan ni: bryta ner större problem i hanterliga delar och skriva egna funktioner för dessa i programspråket använda styr- och datastrukturer hantera filer på olika sätt, både vid inläsning och utskrift använda färdiga funktioner ur programspråkets bibliotek (t ex Matlabs bibliotek) för beräkning, visualisering och effektiv programmering skriva välstrukturerade program i programspråket. Föreläsningarna i programmering inleder kursen, men ni kommer öva på och lära er programmering under hela kursen.
Administrativa punkter: kursen ger 9hp, (tentamen 3hp, laborationer 6hp) Godkända delmoment rapporteras i Rapp registera er! Angående laborationer: Laborationer görs och redovisas i par Bilda par i dag och välj terminalövningsgrupp (A eller B) Schemalagd tid inte nog arbeta på egen tid också! Allmänhandledning (för hjälp, ej redovisning) Vid godkänd lab., signaturbladet ert ansvar! Lab. redovisad och godkänd i tid bonuspoäng (Gäller ej Lab. 1 och projektet) Terminalövningar i CSC:s salar (linux-miljö) Linux-konton delas ut 1:a salsövningen, under rasten. Kom ihåg legitimation!
MATLABREPETITION (Läs också kapitel 1 och 2 i PEng.) Egenskaper hos MATLAB Grafiska gränssnittets komponenter och deras betydelse Variabler, identifierare Tabeller, (skalärer, vektorere, matriser,...) Uttryck, tilldelning,... Operatorer, (aritmetiska, logiska, komponentvisa eller matrisoperationer) Skapa, indexera, omforma tabeller
Egenskaper hos MATLAB MATLAB är ett kommersiellt program som finns på flera plattformar: Unix, Windows, och Mac OS X. kan användas interaktivt, som en miniräknare är anpassat för numeriska beräkningar har många inbyggda funktioner, speciellt: metoder för linjär algebra, metoder för ordinära differentialekvationer lättanvända ritfunktioner kan byggas ut med egna kommandofiler och funktioner, eller genom tillägg av en s.k. toolbox används vanligtvis interpreterat Nackdelar: dyrt och exekverar långsammare än kompilerade program (t.ex. C och Fortran)
En titt på Matlabs grafiska miljö Viktiga delar Kommandofönstret: här skriver man kommandon som utförs direkt Kommandohistoriken: visar de senaste utförda kommandona Man kan även kopiera allt som skrivs i kommandofönstret, m.h.a. diary filnamn. Vid kommandot diary off avslutas kopieringen. redigeraren används för att arbeta med kommandofiler, som är textfiler med flera kommandon; kan även redigeras fristående textredigerare som Emacs fältet Workspace visar variabelminnet
Tabeller MATLAB står för MATrix LABoratory, utvecklat för att undervisa linjär algebra Med matris brukar man mena en tabell av dimension 2 (rader och kolumner) Matlabs grundläggande datastrukturer är tabeller i generellt antal dimensioner Specialfall: Skalär: ses som tabell med en rad och en kolum [1,1] Kolumnvektor: tabell med flera rader och en kolum [m,1] Radvektor: tabell med en rad och flera kolumner [1,n] Matris: [m,n] Tabeller av högre dimension kan också skapas (andvänds inte lika ofta)
Variabler En matris som man vill spara lagras i en variabel En variabel ges ett namn (identifierare) så att man kan komma åt den senare Kan ses som en namngiven plats i datorns minne Identifierare kan innehålla A Z, a z, siffror, och. (Första tecknet bokstav!) Stora (versaler) och små (gemena) bokstäver tolkas som olika tecken Konvention: använd variabelnamn med enbart VERSALER för s.k. globala variabler, men inte för andra variabler
Uttryck och tilldelning Skriv en formel i kommandofönstret och tryck enter så beräknas uttryckets värde, värdet tilldelas variabeln ans, och variabeln skrivs ut. Vill man spara värdet i en annan variabel använder man en tilldelningssats, var = uttryck, t.ex. >> a = sqrt(2); % ; undertrycker utskriften Det är värdet är högerledet som kopieras in i variabeln i vänsterledet. Behöver man mer än en rad för ett uttryck avslutar man raden med... och fortsätter på nästa rad.
Variabler Variabler definierade i kommandofönstret (eller körda kommandofiler) finns i variabelminnet eller workspace, arbetsplats who ger information om variablerna i variabelminnet, (whos extra information) clear rensar variabelminnet Det finns fördefinierade variabler, t.ex. ans, pi, i, j, eps, realmin, realmax, Inf, NaN Ni kan ändra deras värden, men de återställs vid clear Identifierare i variabelminnet döljer inbyggda funktioner: t.ex. >> sin = 3 % Döljer sinus-funktionen >> sin(1) % Returnerar värdet 3 >> sin(2) % Ger fel, variabeln sin har ett element
Skapa tabeller Man skapar en tabell genom att räkna upp, mellan hakparanteser, elementen. Radbryte eller ; separerar rader och blanktecken eller, separerar kolumnerna. >> A = [1 2; 3 4]; A = [5 6; 7 8]; >> c = [9 10]; d = [11;12]; e=[13 14]; Man kan också sammanfoga tabeller >> f = [c; e] lägga till nya rader eller kolumner
Speciella tabeller: b:s:e linspace och logspace ones och zeros eyes
Fler sätt att modifiera tabeller, eller komma åt delar av dem: indexering, ger enstaka element eller subtabeller A(:) reshape vektorer genom stegning
Operatorer Aritmetiska operatorer i Matlab: +,- addition, subtraktion * multiplikation / division (högerdivision) 6/3 är 2 \ vänsterdivision 6\3 är 0.5 ^ exponentiering, upphöjt till, 3^2 är 9 Matrisoperationer som i linjär algebra För matriser finns också elementvisa operationer; då måste matriserna ha samma storlek, eller en vara skalär +,- elementvis addition, subtraktion.* elementvis multiplikation./ elementvis division.\ elementvis vänsterdivision.^ elementvis exponentiering
Icke elementvisa operatorer Om ena operanden är skalär fungerar operatorerna elementvis. C=A*B matrismultiplikation. A och B har dimension högst 2; antal kolumner i A = antal rader i B. C=A/B matrisdivision, löser linjärt ekvationssystem, C = AB 1 C=A\B matrisdivision, löser linjärt ekvationssystem, C = A 1 B C=A. transponering C jk = A kj C=A komplexkonjugering C jk = conj(a kj ) C=A^p för kvadratisk matris A och skalär p, C = A*A*...*A, p ggr
Logiska operatorer Värdet 0 tolkas som falskt; alla andra som sant, men resultatet sant lagras som 1. < elementvis mindre än <= elementvis mindre än eller lika med > elementvis större än >= elementvis större än eller lika med == elementvis lika med ~= elementvis skilt från & elementvis och elementvis eller ~ elementvis icke && och med genvägsutvärdering eller med genvägsutvärdering
Prioritet 1. ^,.^,,. 2. +,-,~ (med en operand, unära) 3. *,.^*,/,./,\,.\ 4. +,- (binära operationer) 5. : 6. ==,~=,<,<=,>,>= 7. & 8. 9. && 10. Paranteser används för att ändra ordningen
Polynom Lagras som en koefficientvektor med högstagradskoefficienten först och det finns speciella funktioner för polynom. Ex. p(x) = 2x 3 + 3 2 x + π >> p = [2 0 1.5 pi]; >> val = polyval(p,1) >> val = polyval(p,[1 2; 4 8]) >> rot = roots(p)
Datatyper Data lagras som bitföljder i datorns minne. Likadana bit-följder måste kunna tolkas på olika sätt i olika sammanhang. En datatyp i Matlab kan ses som ett sätt att lagra data eller tolka en variabels värde. Många andra programmeringsspråk kräver att användaren anger vilken sorts datatyp en variabel ska innehålla. Matlab är mer förlåtande och tolkar själv datatypen vid tilldelningen. I ett Matlab-programm kan samma variabel ha olika datatyper vid olika tillfällen
Datatyper Alla variabler hittils har varit av datatypen double som är matlabs standard datatyp för numeriska värden. Andra datatyper är t.ex. single flyttal med hälften så många bitar (mindre minnesåtgång, lägre precision) int8 heltal mellan -128 och 127 char tecken fler exempel senare i kursen Tilldela variabler av datatypen char genom att använda >> c = a ; citationstecken Strängar i Matlab är >> d = b ; tabeller av datatypen char och man kan indexera in i dem >> e = [c d]; (och utföra andra matrisoperationer) >> f = [c;d];
eval Formler kan lagras som text. Exempel: 1 + x + x 2 +... + x K = xk+1 1 x 1 >> str = sk = (x^(k+1)-1)/(x-1) ; >> x = 2; K = 10; >> eval(str) sk = 2047
I morgon Styrstrukturer och programmeringsteknik