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

Relevanta dokument
2 februari 2016 Sida 1 / 23

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

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

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

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 Hjälpmedel: MATLAB

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 TAIU07 Matematiska beräkningar med MATLAB för MI

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

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

Introduktion till MATLAB

TAIU07 Matematiska beräkningar med Matlab

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

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

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. 2 november 2015 Sida 1 / 23

Matematisk Modellering

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

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

TAIU07 Matematiska beräkningar med Matlab

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

Matematisk Modellering

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab

Beräkningsverktyg HT07

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

Matriser och vektorer i Matlab

TANA17 Matematiska beräkningar med Matlab

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)

Linjär algebra med tillämpningar, lab 1

Laboration: Grunderna i MATLAB

MMA132: Laboration 2 Matriser i MATLAB

TDIU01 - Programmering i C++, grundkurs

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

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

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

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

Linjära ekvationssystem i Matlab

Matriser och Inbyggda funktioner i Matlab

Instruktion för laboration 1

Matriser och Inbyggda funktioner i Matlab

TAIU07 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab

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

Datastrukturer och algoritmer

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

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Datastrukturer och algoritmer

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

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

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

M0043M Integralkalkyl och Linjär Algebra, H14, Matlab, Föreläsning 1

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Instruktion för laboration 1

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

Föreläsning REPETITION & EXTENTA

5B1146 med Matlab. Laborationsr. Laborationsgrupp: Sebastian Johnson Erik Lundberg, Ann-Sofi Åhn ( endst tal1-3

MMA132: Laboration 1 Introduktion till MATLAB

Matriser och linjära ekvationssystem

Introduktion till Matlab

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

Introduktion till Matlab Föreläsning 1. Ingenjörsvetenskap

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

(a) Skriv en matlabsekvens som genererar en liknande figur som den ovan.

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

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

TANA17 Matematiska beräkningar med Matlab

FÖRSÄTTSBLAD TILL TENTAMEN. ELLER (fyll bara i om du saknar tentamenskod): Datum: 16 januari Bordsnummer:

Föreläsning 12: Datastrukturer & filer

MMA132: Laboration 1 & 2 Introduktion till MATLAB

Föreläsning 14 Innehåll

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

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Introduktion till MATLAB Föreläsning 1

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

Abstrakta datastrukturer

TANA17 Matematiska beräkningar med Matlab

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

Matriser och vektorer i Matlab

Tentamen Datastrukturer för D2 DAT 035

Introduktion till Matlab

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Mer om funktioner och grafik i Matlab

HI1024 Programmering, grundkurs TEN

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

En introduktion till MatLab

Länkade listor, stackar och köer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Dagens föreläsning (F15)

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Fri programvara i skolan datoralgebraprogrammet Maxima

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Transkript:

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

Föreläsning 8 God programmeringsstil. Sammansatta datatyper: Poster. Cell-matriser. Tillämpning: En stack. Tentamensinformation. 8 december 2015 Sida 2 / 22

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. 8 december 2015 Sida 3 / 22

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 ) f = @(x) sqrt(1+x); 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); end e=abs(df - 1/2/sqrt(3) ); loglog( h, e, r* ) Kommentarer 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. Använd variabelnamn som är naturliga för uppgiften h, Df, etc. 8 december 2015 Sida 4 / 22

10-4 10-5 10-6 10-7 10-2 10-1 Uttryck av typen e(h) = Ch p blir räta linjer då de plottas med loglog. 8 december 2015 Sida 5 / 22

Tips För att få lättlästa program bör man vara konsekvent med hur variabler namnges - 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. 8 december 2015 Sida 6 / 22

Sammansatta Datatyper Exempel En bok beskrivs av dess Titel, Författaren, och Utgivningsåret. Vi vill skapa en funktion som presenterar denna information på ett trevligt sätt. Vi skriver en Matlab funktion function []=DisplayBook( Title, Author, Year ) fprintf(1, The book %s by %s,title,author); fprintf(1, was published %i.\n,year); end Problem Då boken är ett objekt vore det mera praktiskt att kunna skriva en funktion function []=DisplayBook( TheBook ) Där all information om boken samlats i en enda variabel. 8 december 2015 Sida 7 / 22

I Matlab används kommandot struct för att skapa sammansatta datatyper. De olika delarna kallas fält. Exempel I Matlab skriver vi >> Book = struct( Title,[], Author,[], Year,[]) så skapas en tom post med tre fält. Vi kan lägga in värden med >> Book.Title= Linjär algebra ; >> Book.Year=1990; >> disp( Book ) Title: Linjär algebra Author: [] Year: 1990 Detta är mycket användbart om flera variabler logiskt hör ihop. 8 december 2015 Sida 8 / 22

Exempel Vi kan skapa en post med givna fält genom tilldelningar >> Frukt.Sort = Äpple ; >> Frukt.Vikt = 49 ; >> Frukt.Farg = Röd ; % ä får ej användas >> disp( Frukt ) Sort: Äpple Vikt: 49 Farg: Röd Efter att en post skapats använder vi den genom att skrivas >> x = Frukt.Vikt; >> fprintf(1, Frukten är %s.\n,frukt.farg) Frukten är Röd. 8 december 2015 Sida 9 / 22

Exempel Vi vill skapa ett Matlab program som hanterar bankkonton. Ett bankkonto karakteriseras av ett Kontonummer, kontoinnehavarens Namn, och ett Saldo. Vi vill kunna skapa nya konton, sätta in och ta ut pengar, samt dela ut ränta. 8 december 2015 Sida 10 / 22

På filen SkapaKonto.m skriver vi function [Konto]=SkapaKonto( Namn, Nummer ); Konto.Saldo=0; Konto.Namn=Namn; Konto.Nummer=Nummer; end På filen Uttag.m skriver vi function [Konto]=Uttag( Konto, Belopp ); end if Konto.Saldo < Belopp error( Ogiltigt uttag ); else Konto.Saldo=Konto.Saldo-Belopp; end 8 december 2015 Sida 11 / 22

Cell matriser En cell matris har elemelent som kan vara av olika typ. En tom cell matris skapas med kommandot cell. Exempel Vi skapar en vektor av cell typ och lägger in information i den. >> C = cell( 1, 3 ); >> C{1} = Fredrik ; >> C{2} = rand(2,2); >> C{3} = 5.3; >> C C = Fredrik [2x2 double] [5.3000] För indexering ersätts oftast () med { }. Skriver vi C{1} fås elementet på plats 1. Alltså strängen Fredrik. 8 december 2015 Sida 12 / 22

Datastruktur - Stack Ofta opraktiskt att tänka i termer av vektorer och matriser då man programmerar. Definition En Stack är en abstrakt datatyp som motsvarar en hög. Man kan lägga till nya element överst på högen och man kan ta bort det element som ligger överst. Operationer som kan utföras är - Skapa en tom stack: >> S = CreateStack(); - Lägg till ett element överst: >> S = Push( S, E ); - Ta bort ett element: >>[S,E]=Pop( S ); - Kontrollera stackens storlek: >> n = Size( S ); Vi behöver inte bry oss om hur dessa funktioner fungerar. 8 december 2015 Sida 13 / 22

Exempel Vi vill flytta oss i en graf och komma ihåg färdvägen. 1 2 3 4 5 6 7 8 Vi skall stata i Nod 1 och försöka ta oss till Nod 8. Vi har en funktion function [ NextNode ] = Move( Graph,CurrentNode ) Hur skall vi göra? 8 december 2015 Sida 14 / 22

Lösning För varje flytt sparar vi en vektor med nuvarande och nästa nod i en stack i en stack. På filen GraphMovement.m skriver vi S = CreateStack(); CurrentNode = 1; while CurrentNode ~= 8 NextNode=Move( Graph, CurrentNode ); S = Push( S, [CurrentNode,NextNode] ); fprintf(1, Move from %i to %i.\n,... CurrentNode,NextNode); CurrentNode=NextNode; end Skriver vi... fortsätter ett Matlab kommando på nästa rad. 8 december 2015 Sida 15 / 22

För att gå tillbaka samma väg skriver vi while StackSize( S ) > 0 [ Nodes,S]=Pop( S ); fprintf(1, Återvänd från %i till %i.\n,... Nodes(2),Nodes(1)) end Vi behöver inte veta hur stacken är implementerad för att använda den. Det gäller att tänka på rätt abstraktionsnivå! 8 december 2015 Sida 16 / 22

Övning Implementera en stack som kan användas för att larga vilka typer av data som helst. Följande funktioner skall finnas: CreateStack, StackSize, Push, Pop. Hur skall stacken representeras? Hur ser en tom stack ut? Stacken används bara genom funktionerna ovan. 8 december 2015 Sida 17 / 22

Lösning Vi behöver lagringsutrymme för att spara de element som sparats i Stacken. Dessutom måste vi veta hur många element som finns där. Använd en struct med fält: Elements - cell-vektor där element sparas. StackSize - Antalet element sparade i stacken. MaxSize - Maximala utrymmet i Elements. Frågor Hur ser en tom stack ut? Hur blir funktionen CreateStack? 8 december 2015 Sida 18 / 22

I filen CreateStack.m skriver vi function [Stack]=CreateStack( MaxSize ) Stack.Elements=cell( MaxSize, 1 ); Stack.StackSize=0; Stack.MaxSize=MaxSize; end Vi kan nu skriva >> S = CreateStack( 100 ) S = Elements: {100x1 cell} StackSize: 0 MaxSize: 100 Fråga Hur skall stacken förändras om vi sparar ett element i den? 8 december 2015 Sida 19 / 22

I filen Push.m skriver vi function [ Stack ]=Push( Stack, E ) Stack.StackSize=Stack.StackSize+1; Stack.Elements{ Stack.StackSize }=E; end I Matlab kan vi nu skriva >> S=Push(S, a );S=Push(S, b );S=Push(S, c ) S = StackSize: 3 MaxSize: 100 Elements: {100x1 cell} >> S.Elements(1:4) ans = a b c [] 8 december 2015 Sida 20 / 22

På filen Pop.m skriver vi function [Stack,E]=Pop( Stack ) E=Stack.Elements{ Stack.StackSize }; Stack.StackSize=Stack.StackSize-1; end I Matlab skriver vi >> [S,E]=Pop( S )[ S = StackSize: 2 MaxSize: 100 Elements: {100x1 cell} E = c Vi behöver inte radera elementet från Elements. Kontroller för tom eller full stack behövs. 8 december 2015 Sida 21 / 22

Tentamensinformation - Skriftlig tentamen i datorsal. Lös uppgiften i Matlab. Skriv av ditt program på papper då du är färdig. Inga utskrifter behövs. - Salar är Boren/Hunn, Roxen/Glan och ISYs salar Asgård, Olympen, Egypten, etc. Anslås på kurshemsidan. - Antingen 8 12 eller 14 18. Datorer räcker inte till alla. - Ni använder särskilda inloggningar för tentan. Dessa delas ut av vakterna. De två tentor som finns på hemsidan är relevanta att öva på. Förutom - Funktionen filter ingår inte i årets version av kursen. - Utskrifter med fprintf ingick inte förra året. Uppgifterna består av kortare Matlab program (5-10 rader). Träna på lektionsuppgifterna. Lycka till! 8 december 2015 Sida 22 / 22