TANA17 Matematiska beräkningar med Matlab

Relevanta dokument
TAIU07 Matematiska beräkningar med Matlab

TAIU07 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.

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

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

2 februari 2016 Sida 1 / 23

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

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

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

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

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

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

Introduktion till MATLAB

TANA17 Matematiska beräkningar med Matlab

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

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

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

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

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

TANA17 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab

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

MMA132: Laboration 2 Matriser i MATLAB

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

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

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

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

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

Laboration: Grunderna i MATLAB

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

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

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

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

TANA17 Matematiska beräkningar med Matlab

Matriser och vektorer i Matlab

Beräkningsverktyg HT07

SF1900 Sannolikhetsteori och statistik, HT 2017 Laboration 1 för CINEK2

Förkortning och förlängning av rationella uttryck (s. 29 Origo 3b)

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

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

Instruktion för laboration 1

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

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

TAMS79: Föreläsning 10 Markovkedjor

TAIU07 Matematiska beräkningar med Matlab

Matriser och linjära ekvationssystem

Instruktion för laboration 1

TAIU07 Matematiska beräkningar med Matlab

Labb 3: Ekvationslösning med Matlab (v2)

Ö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.

TMV156/TMV155E Inledande matematik E, 2009

Sanningar om programmering

Beräkningsvetenskap föreläsning 2

TANA17 Matematiska beräkningar med Matlab

4.3. Programmering i MATLAB

Matematisk analys för ingenjörer Matlabövning 2 Numerisk ekvationslösning och integration

MMA132: Laboration 1 & 2 Introduktion till MATLAB

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

MMA132: Laboration 1 Introduktion till MATLAB

Linjära ekvationssystem

a = a a a a a a ± ± ± ±500

TANA81: Simuleringar med Matlab

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

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

Laboration 4: Stora talens lag, Centrala gränsvärdessatsen och enkla punktskattningar

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

x f (x) dx 1/8. Kan likhet gälla i sistnämnda relation. (Torgny Lindvall.) f är en kontinuerlig funktion på 1 x sådan att lim a

Föreläsning 3-4 Innehåll

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

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

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

Polynomanpassningsprogram

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Inlämningsuppgift 4 NUM131

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.

Mer om linjära ekvationssystem

. (2p) 2x + 2y + z = 4 y + 2z = 2 4x + 3y = 6

TSBB14 Laboration: Intro till Matlab 1D

JAVAUTVECKLING LEKTION 4

När man vill definiera en matris i MATLAB kan man skriva på flera olika sätt.

ÖVN 6 - DIFFERENTIALEKVATIONER OCH TRANSFORMMETODER - SF Nyckelord och innehåll. a n (x x 0 ) n.

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

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

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Funktionsteori Datorlaboration 2

Förkortning och förlängning av rationella uttryck (s. 27 Origo 3c)

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

Laboration: Vektorer och matriser

Enklare matematiska uppgifter

Mer om linjära ekvationssystem

Matriser och linjära ekvationssystem

Numeriska Metoder och Grundläggande Programmering för P1, VT2014

TANA17 Matematiska beräkningar med Matlab

Modul 4 Tillämpningar av derivata

Vectorer, spannet av vektorer, lösningsmängd av ett ekvationssystem.

5B1147. Envariabelanalys. MATLAB Laboration. Laboration 1. Gränsvärden och Summor

Matriser och vektorer i Matlab

Andragradsekvationer. + px + q = 0. = 3x 7 7 3x + 7 = 0. q = 7

Transkript:

TANA17 Matematiska beräkningar med Matlab Datorlektion 3. Repetitionssatser och Programmering 1 Introduktion Denna övning syftar till att träna programmering med repetitionssatser och villkorssatser. Undvik därför att använda vektor beräkningar i största möjliga mån. Skriv alltså inte D=sum(x.*y) om du vill räkna ut en skalärprodukt utan använd en for-loop. 2 Repetionssatsen for I MATLAB finns två konstruktioner för upprepad exekvering av satser: for och while. Kommandot for används då en grupp satser skall exekveras ett fixt antal gånger. Den generella formen på en for sats är: for <variabel>=<uttryck> <satsgrupp> Här tilldelas <variabel>, den så kallade loopvariabeln, ett startvärde. Varje gång kommandona i <satsgrupp> har utförts så ökas värdet på loopvariabeln. Detta upprepas tills ett bestämt slutvärde uppnås. Uppgift 2.1 Skriv ett program som beräknar summan S = 100 k=1 k. Uppgift 2.2 Vad blir x(5) då följande program exekveras? x=zeros(5,1); for k=2:1:5 x(k)=x(k-1)+k Pröva om du är osäker!

Uppgift 2.3 Exponentialfunktionen kan approximeras bra genom att använda serien e x = 1+x+ x2 2 + x3 6 +... n där vi alltså tar med de första n+1 termerna i summan. Välj n = 10 och skriv en for loop som beräknar summan ovan. Testa ditt program genom att beräkna e 2 genom dels standard funktionen exp och dels ditt program. Tips Då du beräknar termerna i summan behöver du k fakultet. Utnyttja att k! = (k 1)!k och inför en extra variabel där k! lagras och som uppdateras i varje steg i for loopen. Uppgift 2.4 Skriv ett program som bildar den så kallade Hilbert matrisen, dvs en n n matris H, vars element ges av H(i,j) = 1/(i + j 1). Du kan tilldela parametern n ett värde överst i ditt program. Tips Det finns en inbyggd standard funktion, hilb, i MATLAB som du kan använda för att kontrollera att ditt program fungerar. Uppgift 2.5 Antag att vi har en vektor x som innehåller n element. Använd en for-loop för att hitta det största elementet i vektorn. Tips Skapa en test vektor x=rand(5,1) och testa så att ditt program fungerar. Uppgift 2.6 Låt c = (1, 2, 1.5) T. Vi vill beräkna polynomet p(x), som ges av n 1 p(x) = c k x k, k=0 för ett antal x-värden sparade i en vektor x. Använd en for-loop för att beräkna polynomets värden. Använd length(c) för att bestämma hur många koefficienter som finns (och därmet polynomets gradtal). Då du är färdigt skall du använda ditt program för att rita en graf över polynomet p(x) = 1 2x+ 1.5x 2 på intervallet 0 x 2. Uppgift 2.7 Låt a och b vara två vektorer med n element, och antag att alla element i vektorn b är positiva. Skriv ett program som beräknar värdet, k=0 x k k!. M= max a i. 1 i n b i Uppgift 2.8 Låt A vara en n m matris som innehåller både positiva och negativa element. Beräkna summan av de positiva elementen i matrisen. Tips Som exempel kan du bilda en testmatris med A=rand(5,4)-0.5. Använd [n,m]=size(a); i ditt program för att ta reda på hur stor matrisen är.. 2

Uppgift 2.9 (Svår) En matris sägs vara diagonaldominant om n j=1,j i a ij a ii, i=1,2,...,n, med sträng olikhet för åtminstone en rad i. Skriv ett program som kontrollerar om en matris A är diagonal dominant. Ifåfall skall en utskrift göras till skärmen. Uppgift 2.10 (Svår) Multiplikation mellan två matriser A och B definieras som att C = AB, där c ij = n a ik b kj. k=1 Skriv ett program som beräknar matrisen C. Produkten AB är ast definierad om A och B har dimensioner som passar ihop. Ditt program skall innehålla en villkorssats som testar detta. 3 Repetionssatsen while Kommandot while exekverar en satsgrupp så länge som ett logiskt villkor är sant. Den generella formen på en while sats är while <logiskt villkor> <satsgrupp> Det är viktigt att en while sats kan avbrytas. Uppgift 3.1 Skriv ett program som skriver ut det minsta tal av formen 3 n som är större än 5000. Talet n skall vara ett heltal. Uppgift 3.2 En reell rot till ekvationen p(x)=x 3 3ax+1 = 0, där a 1, kan bestämmas som gränsvärde av talföljden {x k } k=0 definierad av { x0 =0 x k+1 = x3 k +1 3a, k = 0,1,2,... Skriv ett program som bestämmer detta gränsvärde. Tilldela först konstanten a ett värde och beräkna sedan x 1,x 2,... Avbryt då villkoret x k+1 x k <10 6. Skriv ut värdet på a, x k+1, k+1, och p(x k+1 ). Vilket resultat fås då a=3? 3

Uppgift 3.3 Skriv ett program som beräknar en approximation till summan S = k=1 sin(k) k 2. Avbryt summeringen då nästa term är till beloppet mindre än en given tolerans. Vad blir summans beräknade värde om toleransen ǫ=10 8 används? Uppgift 3.4 En talföld bildas enligt följande regler: x 0 = 1 och x 1 = 2 x n = 5x n 1 4x n 2 n = 2,3,... Skriv ett program som bildar följden {x n } n=0 enligt ovanståe regler. Programmet skall beräkna nya termer i talföljden ända tills nästa term x n är större än 10 4. Programmet skall då göra en utskrift liknande: n=9 ger xn=29983 vilket ar storre an 10000 Uppgift 3.5 Fibonaccitalen är en talföljd som definieras av följande rekursionsformel: { F1 =1, F 2 =1, F n+2 =F n+1 +F n, n= 1,2,3,... De första 5 talen i följden är alltså F= ( 1 1 2 3 5 ), Skriv ett program som hittar det största Fibonacci talet som fortfarande är mindre än 1000. Uppgift 3.6 (Svår) Ett kast med en tärning kan simuleras med hjälp av funktionen randi. Vi vill ta reda på hur många tärningskast som krävs i genomsnitt för att få en sexa. Gör följande: Skriv ett program som simulerar tärningskast. Ränka hur många kast som krävs innan du får en sexa. Bygg ut ditt program så att N = 100 omgångar simuleras. Beräkna genomsnitttliga antalet kast som krävdes för att få en sexa. Tips Skapa först en N 1 vektor AntalKast som innehåller nollor. Efter att du genomfört en omgång tärningskast så sparar du antalet kast som krävdes på en plats i vektorn AntalKast. I slutet kan du använda mean för att beräkna genomsnittliga antalet kast. 4

TANA17 Matematiska beräkningar med Matlab Facit till Datorövning 3. 2 Repetionssatsen for Uppgift 2.1 Följande MATLAB kommandon beräknar summan S=0; for k=1:100 S=S+k; ; disp(s) % <- används för att lagra en partialsumma Uppgift 2.2 Programmet skapar en kolumnvektor x = (0 2 5 9 14) T. x(5) blir alltså 14. Uppgift 2.3 Vi sparar en variabel kfak för att spara k!. Programmet blir x=0.7; % Eller det x-värde man är intresserad av kfak=1;s=1;n=10; for k=1:n kfak=kfak*k; % Blir 1*1 första gången! S=S+x^k/kfak; disp(s) Uppgift 2.4 För att skapa Hilbert matrisen H kan följande program användas. N=5; H=zeros(N,N); for i=1:n for j=1:n H(i,j)=1/(i+j-1); ; ; Uppgift 2.5 Vi sparar en variabel x_min som innehåller det hittils minsta elementet vi hittat. Programmet blir då 5

x_min=x(1); n = length(x); for k=2:n if x(k)<x_min x_min=x(k); % Hittat mindre! Uppdatera x_min. disp(x_min) Uppgift 2.6 Vi skapar vektorn c, en vektor med x-värden och beräknar polynomet med c=[1-2 1.5]; x=0:0.01:2; p=c(1)*x.^0; for k=2:length(c) p=p+c(k)*x.^k; plot(x,p) % ger första termen. elementvis op. ty x är vektor. Uppgift 2.7 Vi skriver M = abs(a(1)/b(1)); for k=2:length(a) if abs(a(k)/b(k))>m M = abs(a(k)/b(k)); disp(m) Uppgift 2.8 Vi använder size för att hitta matrisens storlek. Summan beräknas med [n,m]=size(a);s=0; for i=1:n for j=1:m if A(i,j)>0 S=S+A(i,j); disp(s) Uppgift 2.9 Vi behöver två logiska variabler: Den första AllaMindre skall bli falsk om någon rad bryter mot olikheten. Den andra EnStrikt skall bli sann så snart vi hittar en strikt olikhet på någon rad. Programmet blir [n,m]=size(a); AllaMindre = 1; % Alla rader vi undersökt hittils uppfyller olikheten. 6

EnStrikt = 0; % Vi har ännu inte hittat någon strikt olikhet for i=1:n % Undersök rad i. S=0; for j=1:m S=S+abs(A(i,j)); % S blir radsumman ; if S<2*abs(A(i,i)) % Vi har A(i,i) i S också. EnStrikt = 1; if S > 2*abs(A(i,i)) AllaMindre = 0; % Hittat en ogiltig olikhet! break; % Vi behöver inte fortsätta. Vet nu att falskt! % Nu lägger vi ihop resultatet i en ny logisk variabel. DiagDom = AllaMindre & EnStrikt ; if DiagDom, disp( Matrisen är diagonal dominant ), Uppgift 2.10 Givet två matriser A och B skriver vi [n1,m1]=size(a);[n2,m2]=size(b); if m1 ~= n2 % I detta fallet fungerar det inte disp( dimensioner passar ej ); else C=zeros(n1,m2); % Skapa C med rätt storlek for i=1:n1 for j=1:m2 % beräkna C(i,j) med formeln. for k=1:m1 C(i,j)=C(i,j)+A(i,k)*B(k,j); 3 Repetionssatsen while Uppgift 3.1 n=1; while (3^n <= 5000 ) n=n+1; 7

disp( villkoret uppfyllt for n= ) n Uppgift 3.2 Följande program bestämmer gränsvärdet: a=3; k=-1; Xk=1; Xkp1=0 % Garanterar att avbrottsvillkoret är sant första gången. while ( abs(xk-xkp1) >= 1e-6 ) Xk=Xkp1; k=k+1; Xkp1=(Xk^3+1)/3/a; ; disp( Polynomets varde: ) p=xkp1^3-3*a*xkp1+1 % Övriga uttskrifter på samma sätt. Resultatet blir att x 3 =0.111264... och p(x 3 )=2.332 10 8. Uppgift 3.3 Summan beräknas med programmet: S=0;k=0;term=1; while ( abs(term)>1e-8 ) k=k+1; term=sin(k)/k^2; S=S+term; disp( Summan blir: ), S Summans värde blir S=1.01396... Uppgift 3.4 Programmet blir x(1)=1;x(2)=2;k=2; while x(k)<10^4 k=k+1; x(k)=5*x(k-1)-4*x(k-2); ; disp([ k=,num2str(k), ger xk=,num2str(x(k)), vilket är större än 1000 ]) Ger talet 21846 för k = 9. Uppgift 3.5 Programmet blir F(1)=1;F(2)=1;k=2; while F(k)<1000 k=k+1; 8

F(k)=F(k-1)+F(k-2); ; disp(f(k-1)) Ger talet 987. Uppgift 3.6 Det färdiga programmet blir N=100; AntalKast=zeros(N,1); for i=1:n % Simulera en omgång k=1; D6 = randi([1,6],1); while D6 ~= 6 % Ej fått sexa. Kasta en gång till k=k+1; D6 = randi([1,6],1); ; AntalKast(i)=k; ; M = mean(antalkast) Ger medelvärdet M = 5.52 (eller däromkring). 9