2 februari 2016 Sida 1 / 23

Relevanta dokument
TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 20 november 2015 Sida 1 / 30

TAIU07 Matematiska beräkningar med Matlab

Variabler. TANA81: Beräkningar med Matlab. Matriser. I Matlab skapas en variabel genom att man anger dess namn och ger den ett värde:

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 8 december 2015 Sida 1 / 22

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 14:e januari klockan

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab

Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter.

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 9p av totalt 20p Hjälpmedel: MATLAB

Introduktion till MATLAB

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Hjälpmedel: MATLAB

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

TAIU07 Matematiska beräkningar med Matlab

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April klockan

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 13:e januari klockan

Laboration: Grunderna i MATLAB

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

TAIU07 Matematiska beräkningar med Matlab

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

MMA132: Laboration 2 Matriser i MATLAB

TAIU07 Matematiska beräkningar med MATLAB för MI. Fredrik Berntsson, Linköpings Universitet. 15 januari 2016 Sida 1 / 26

TANA17 Matematiska beräkningar med Matlab

Beräkningsvetenskap föreläsning 2

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Inledande matematik för I1. MVE011 läsperiod Matlab vecka 2 övningsuppgifter

Index. Vektorer och Elementvisa operationer. Summor och Medelvärden. Grafik i två eller tre dimensioner. Ytor. 20 januari 2016 Sida 1 / 26

TSBB14 Laboration: Intro till Matlab 1D

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 27 oktober 2015 Sida 1 / 31

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 18:e augusti klockan

Uppgift 1 - programmet, Uppg6.m, visade jag på föreläsning 1. Luftmotståndet på ett objekt som färdas genom luft ges av formeln

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

MATLAB the Matrix Laboratory. Introduktion till MATLAB. Martin Nilsson. Enkel användning: Variabler i MATLAB. utvecklat av MathWorks, Inc.

Innehåll. Vad är MATLAB? Grunderna i MATLAB. Informationsteknologi. Informationsteknologi.

15 februari 2016 Sida 1 / 32

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

TAIU07 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab

Numeriska metoder, grundkurs II. Dagens program. Hur skriver man en funktion? Administrativt. Hur var det man gjorde?

4.3. Programmering i MATLAB

Kort om programmering i Matlab

TANA17 Matematiska beräkningar med Matlab

Tentamen i Beräkningsvetenskap I/KF, 5.0 hp,

Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 2 november 2015 Sida 1 / 23

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 4 december 2015 Sida 1 / 26

Beräkningsverktyg HT07

Lösningsförslag till inlämningsuppgift 3 i Beräkningsprogrammering Problem 1) function condtest format compact format long

TANA17 Matematiska beräkningar med Matlab

TANA81: Simuleringar med Matlab

Övningar. c) Om någon vektor i R n kan skrivas som linjär kombination av v 1,..., v m på precis ett sätt så. m = n.

Kort om programmering i Python

Funktioner forts. F3: Funktioner (kap. 5) Parametrar. findgear.m forts

Matematisk Modellering

Börja programmera. Kapitel 4 i kompendiet Jämförande uttryck Villkorssatser Loopar (slingor) Funktioner. Läs inte avsnitt 4.2.3

Tentamen TAIU07 Matematiska beräkningar med MATLAB för MI

Vektorgeometri för gymnasister

Exempel att testa. Stora problem och m-filer. Grundläggande programmering 4. Informationsteknologi. Informationsteknologi.

MMA132: Laboration 1 & 2 Introduktion till MATLAB

MMA132: Laboration 1 Introduktion till MATLAB

Övningar. MATEMATISKA INSTITUTIONEN STOCKHOLMS UNIVERSITET Avd. Matematik. Linjär algebra 2. Senast korrigerad:

Matlabföreläsningen. Lite mer och lite mindre!

1. (Dugga 1.1) (a) Bestäm v (3v 2u) om v = . (1p) and u =

Laboration: Vektorer och matriser

Tillämpning: Bildinterpolation. Ekvationslösning. Integraler. Tillämpning: En båt. Räkning med polynom. Projekt. Tentamensinformation.

En introduktion till MatLab

Instruktion för laboration 1

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Linjära ekvationssystem

NUMPROG, 2D1212, vt Föreläsning 9, Numme-delen. Stabilitet vid numerisk behandling av diffekvationer Linjära och icke-linjära ekvationssystem

LAB 4. ORDINÄRA DIFFERENTIALEKVATIONER. 1 Inledning. 2 Eulers metod och Runge-Kuttas metod

1, 2, 3, 4, 5, 6,...

Allmänt om Mathematica

Föreläsning 3-4 Innehåll

Vetenskapsdagen 2016 SciLab för laborativa inslag i matematik eller fysik

Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while. Från labben: if, for och while

Vektorgeometri för gymnasister

Linjärisering, Jacobimatris och Newtons metod.

Sanningar om programmering

Matlabövning 1 Funktioner och grafer i Matlab

Textsträngar från/till skärm eller fil

1 Förberedelser. 2 Att starta MATLAB, användning av befintliga m-filer. 3 Geometriskt fördelad avkomma

Variabler och konstanter

Introduktion till MATLAB, med utgångspunkt från Ada

Lösningar till linjära problem med MATLAB

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

MATLAB Matrix laboratory

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Matriser och linjära ekvationssystem

Programmering i Matlab

Tentamen i Beräkningsvetenskap I (nya versionen), 5.0 hp, Del A

Matlabövning 1 Funktioner och grafer i Matlab

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Studio 6: Dubbelintegral.

Matlab övningsuppgifter

Enhetsvektorer. Basvektorer i två dimensioner: 1 1 Basvektorer i tre dimensioner: Enhetsvektor i riktningen v: v v

3 Man kan derivera i Matlab genom att approximera derivator med differenskvoter. Funktionen cosinus deriveras för x-värdena på följande sätt.

Transkript:

TAIU07 Föreläsning 4 Repetitonssatsen while. Avbrott med break. Exempel: En Talföljd och en enkel simulering. Egna funktioner. Skalärprodukt. Lösning av Triangulära Ekvationssystem. Programmeringstips. 2 februari 2016 Sida 1 / 23

Repetitionssatser Kommandot while exekverar en satsgrupp så länge som ett logiskt villkor är sant. Den generella formen är: while <logiskt villkor> <satsgrupp> Det är viktigt att en while sats kan avbrytas. Falskt Villkor Sant Kommandon 2 februari 2016 Sida 2 / 23

Exempel Fibonacci talen ges av F 1 = 0, F 2 = 1, och F n = F n 1 + F n 2. Vilket är det största talet F k som forfarande är mindre än 100? I Matlab skriver vi: F(1)=0;F(2)=1;n=2; while ( F(n)< 100 ) n=n+1; F(n)=F(n-1)+F(n-2); n-1,f(n-1) Repetitionssatsen avbryts när n = 13 så det största talet blir F 12 = 89. 2 februari 2016 Sida 3 / 23

Exempel Exponentialfunktionen kan beräknas genom Taylor serien, e x = 1+x+ x2 2 + x3 6 +... Skriv ett program som beräknar e x för ett givet värde x. Avbryt summeringen då nästa term inte längre påverkar resultatet. Om S är en vektor med logiska värden så ger all(s) sant om samtliga elemement i S har värdet sant; och falskt annars. Uttrycket any(s) ger värdet sant om något element i S har värdet sant. Använd all() för att förändra programmet så att det kan beräkna e x för alla värden i en vektor x. 2 februari 2016 Sida 4 / 23

Att avbryta en repetitionssats Kommandot break avbryter en while eller for sats direkt. Exempel I ett spel försöker vi slå en tärning högst 10 gånger i följd. Målet är att få samma resultat två gånger i rad. Skriv ett Matlab program som simulerar en sådan spelomgång. För varje lyckad omgång skriver vi ut antalet kast som krävdes. Övningar Rita först upp ett flödesschema som beskriver hur simuleringen skall genomföras. Skriv sedan lämpliga Matlab kommandon. 2 februari 2016 Sida 5 / 23

Exempel En talföld {x k } k=0 genereras ifrån ett positivt heltal x 0 enligt följande regler: 1. Om x k udda så fås nästa tal som x k+1 = 3x k + 1. 2. Om x k är jämnt fås x k+1 = x k /2. Om vi startar med talet 6 får vi talföljden: 6 3 10 5 16 8 4 2 1. Övning Vi antar att att alla sådana talföljder slutar med 1. Skriv ett program som verifierar detta för startvärden mellan 1 and 100. Hitta dessutom det startvärde som ger den längsta talföljden. 2 februari 2016 Sida 6 / 23

Funktioner i MATLAB En funktion har ett antal inagrument och beräknar ett antal utargument. Exempel Funktionen zeros har som inparameter två heltal N och M. Utparameter är en matris av dimension N M med nollor. >> Z = zeros( N, M ); 2 februari 2016 Sida 7 / 23

Funktioner skapas genom att man samlar kommandon på en fil, exemelvis min_funktion.m. Dessutom skall man skriva ett funktionshuvud. % % Inledande kommentar % function [ut1,ut2]=min_funktion( in1,in2,in3 ) <beräkna ut1,ut2 givet in1,in2,in3> En funktion kan ha godtyckligt antal in-, respektive ut-parametrar. Den inledande kommentaren skrivs ut om man skriver >> help min_funktion 2 februari 2016 Sida 8 / 23

Exempel På filen funk.m har vi skrivt function [f]=funk(x,y) y=2*x+y; f=x^2+2*y; Vad händer om vi skriver följande kommandon >> x=1;y=2; >> x=funk( x, y ); >> disp(x),disp(y) 2 februari 2016 Sida 9 / 23

Exempel På filen serie.m har vi skrivt function [S]=serie(N) S=0; for k=1:n,s=s+1/k^2;, Skriver vi följande kommandon >> S=serie( 100 ); >> disp(s) 1.6350 >> disp(k) Undefined function or variable k. Variabler är lokala. Skapas, eller ändras, en variabel i en funktion är det en lokal kopia som ändras. Då funktionen avslutas är det ast utparametrar som sparas. 2 februari 2016 Sida 10 / 23

Exempel Skalärprodukten mellan två vektorer x och y kan beräknas med formeln n x y = x i y i. Skriv en funktion som beräknar skalärprodukten. Funktionen skall användas enligt i=1 >> S = ScalarProd( x, y ); 2 februari 2016 Sida 11 / 23

På filen ScalarProd.m skriver vi: % ScalarProd: Beräkna skalärprodukt mellan två v % y. Anropas enligt: % % >> S = ScalarProd( x, y ); % function [S]=ScalarProd( x, y ) n=length(x); S=0; for i=1:n S=S+x(i)*y(i); ; Kommentar Då x y = x T y kan vi skriva funktionen enklare. Det finns även en fördefinierad funktion dot(). 2 februari 2016 Sida 12 / 23

Rekursiva funktioner En funktion som anropar sig själv kallas rekursiv. Vid varje funktionsanrop skapas nya lokala kopior av variabler. Exempel Fakulteten är definerad genom att n! = n (n 1)!, 0! = 1. Skriv en MATLAB funktion som beräknar n! för ett givet heltal n. 2 februari 2016 Sida 13 / 23

På filen Fakultet.m skriver vi function [F]=Fakultet(N) if N==0, F=1; else F=N*Fakultet(N-1); ; Vad händer om vi skriver >> Fakultet( 4 ); 2 februari 2016 Sida 14 / 23

Tillämpning: Triangulära ekvationssystem Exempel Ett undertriangulärt ekvationssystem Lx = b har följande struktur l 11 0 0 0 x 1 b 1 l 21 l 22 0 0 x 2 l 31 l 32 l 33 0 x 3 = b 2 b 3. l 41 l 42 l 43 l 44 x 4 b 4 Frågor När är ett undertriangulärt ekvationssystem lösbart? Hur skall lösningen beräknas. 2 februari 2016 Sida 15 / 23

Lemma Ett undertriangulärt ekvationssystem Lx = b har en unik lösning om alla diagonalelement l ii, i = 1,...,n är nollskiljda. Uppgift Skriv en funktion IsNonSingular som undersöker om alla diagonal elemement i matrisen L är noll-skiljda. Funktionen skall kunna användas som L=[1 0 0 ; -2 3 0 ; 2 4-1 ]; if IsNonSingular( L ) disp( Finns unik lösning ) 2 februari 2016 Sida 16 / 23

Lemma Ett undertriangulärt ekvationssystem Lx = b kan lösas med frammåtsubstitution. Ekvationssystemet Lx = b löses en obekant i taget. Givet att vi beräknat x 1, x 2,...,x i 1 fås nästa obekant genom x i = b i k 1 j=1 l ij x j /l ii. Uppgift Skriv en Matlab funktion TriangleSolv som löser ett godtyckligt undertriangulärt ekvationssystem. 2 februari 2016 Sida 17 / 23

På filen TriangleSolv.m skriver vi function [x]=trianglesolv( L, b ) [n,m]=size(l); % Kontrollera matris storlek x=zeros(n,1); for i=1:n % Beräkna lösningskomponenten x(i) x(i)=b(i); for j=1:i-1 x(i)=x(i)-l(i,j)*x(j); x(i)=x(i)/l(i,i); Vi kan nu använda våra funktioner! 2 februari 2016 Sida 18 / 23

I Matlab L=[1 0 0 ; -2 3 0 ; 2 4-1 ]; b=[3-1 2] ; if IsNonSingular( L ) x = TriangleSolv( L, b ); b2=l*x; disp( b2 ) else disp( Ej säkert lösbart ); Detta ger utskriften 3-1 2 Vi kar alltså fått rätt lösning! 2 februari 2016 Sida 19 / 23

Programmeringstips Exempel Vi vill beräkna en approximation av derivatan f (2) då f(x) = 1+x med formeln f (2) f(2+h) f(x h), h > 0. 2h Beräkna felet som funktion av h för h = 1/n, n = 10, 20,..., 100. Plotta sedan resultatet med loglog. Lösning Gör följande steg 1. Skapa en vektor h med alla h-värden. Skapa en vektor Df med nollor. 2. En for-loop där Df(i) beräknas som derivata approximationen för steglängd h(i). 3. Beräkna en vektor med fel. Plotta i log-skala. 2 februari 2016 Sida 20 / 23

I Matlab skriver vi n=10:10:100; % Får n=( 10 20 30... 100 ) h=1./n; % Får h=(1/10 1/20... 1/100 ) Df = zeros(size(h)); for i=1:length(h) % Beräkna Df(i) med steg h(i) Df(i)=( f(2+h(i)) - f(2-h(i)) )/2/h(i); e=abs(df - 1/2/sqrt(3) ); loglog( h, e, b+- ) Vi väljer först h vektorn. I for-loopen använder vi ett värde h i i taget. Undvik for-loopar där loop-variabeln inte kan ses som ett index eller heltalig räknevariabel. Använd variabelnamn som är naturliga för uppgiften h, Df, etc. 2 februari 2016 Sida 21 / 23

Felet vid derivata beräkning som funktion av h uppritat i log-skala. 10-4 10-5 10-6 10-7 10-2 10-1 Taylor-utveckling visar att detta approximation har ett fel e(h) Ch 2. Då log(e(h)) = log(c)+2 log(h) fås en rät linje med riktningskoefficient 2. 2 februari 2016 Sida 22 / 23

För att få lättlästa program bör man vara konsekvent med hur variabler namnges Regler - Index variabler för loopar: i, j, k. - Vektorlängd, Matrisstorlek, Antal: n, m, N, M - Reella tal: t, x, y, z, u, v - Matriser: A, B, C,... - Vektorer: x, y, b,... - Funktionsvärden: f, g, q, w,... Undvik att använda l, o, O, 0 ty svåra att se skillnad på. Långa förklarande namn blir tydliga men jobbiga att skriva. 2 februari 2016 Sida 23 / 23