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

Relevanta dokument
TANA81: Simuleringar med Matlab

TANA17 Matematiska beräkningar med Matlab

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

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

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

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

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

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

Tentamen TANA17 Matematiska beräkningar Provkod: DAT1 Godkänd: 8p av totalt 20p Tid: 21:a April 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

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

Matriser och Inbyggda funktioner i Matlab

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

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

Introduktion till Matlab

Matriser och Inbyggda funktioner i Matlab

Introduktion till Matlab

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

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

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

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

Datorlära 3 Octave Workspace ovh mijlö Skriva text på skärmen Värdesiffror Variabler och typer Strängar Makro Vektorer

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

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

TANA17 Matematiska beräkningar med Matlab

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

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

Introduktion till MATLAB

Laboration: Grunderna i MATLAB

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

2 februari 2016 Sida 1 / 23

TAIU07 Matematiska beräkningar med Matlab

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

Programmeringsteknik med C och Matlab

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

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

TANA17 Matematiska beräkningar med Matlab

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

TSBB14 Laboration: Intro till Matlab 1D

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

Linjär algebra med tillämpningar, lab 1

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

Introduktion till Matlab

Beräkningsvetenskap föreläsning 2

Introduktion till Matlab

4.3. Programmering i MATLAB

TANA17 Matematiska beräkningar med Matlab

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

TAIU07 Matematiska beräkningar med Matlab

729G04 Programmering och diskret matematik. Föreläsning 7

Introduktion till Matlab

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

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

Kort om programmering i Matlab

Introduktion till Matlab

Introduktion till Matlab

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

KPP053, HT2016 MATLAB, Föreläsning 2. Vektorer Matriser Plotta i 2D Teckensträngar

TAIU07 Matematiska beräkningar med Matlab

Matlabövning 1 Funktioner och grafer i Matlab

Uppgift 1 ( Betyg 3 uppgift )

Föreläsning 12: Datastrukturer & filer

Matlabövning 1 Funktioner och grafer i Matlab

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

Matriser och vektorer i Matlab

Matematisk Modellering

Funktioner och grafritning i Matlab

Föreläsning 3. Programmering, C och programmeringsmiljö

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

Matematisk Modellering

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

Introduktion till Matlab

Laboration 2: 1 Syfte. 2 Väntevärde och varians hos en s.v. X med fördelningen F X (x) MATEMATISK STATISTIK, AK FÖR BYGG, FMS 601, HT-08

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. save

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

Introduktion till Matlab

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

Matematisk Modellering

Laboration: Grunderna i Matlab

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

Uppgift 1 (grundläggande konstruktioner)

Repetition av filer Grundkurs i programmering med Python

Objektorienterad Programmering (TDDC77)

TANA17 Matematiska beräkningar med Matlab

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

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

Introduktion till Matlab

HI1024 Programmering, grundkurs TEN

Laborationstillfälle 1 Lite mer om Matlab och matematik

Filer. DA2001 (Föreläsning 16) Datalogi 1 Hösten / 19

Introduktion till Matlab

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

TANA17 Matematiska beräkningar med Matlab

MMA132: Laboration 1 Introduktion till MATLAB

Laboration 1: Linjär algebra

Uppgifter till praktiska tentan, del A. (7 / 27)

TENTAMEN OOP

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

Transkript:

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

Föreläsning 7 Textsträngar. Formatterade utskrifter. Filhantering. Seminarieuppgiften. 4 december 2015 Sida 2 / 26

Text och Strängar Definition En textrad kallas för en sträng. I Matlab lagras strängar som radvektorer där varje element representerar ett tecken. Exempel Skapa en sträng som innehåller texten Jag vill vinna! genom att skriva >> str = Jag vill vinna! Man kan ändra vill till ska genom >> str(5:8)= ska ; Kommentar Tecknet kallas sträng parentes. Detta påbörjar och avslutar strängar. 4 december 2015 Sida 3 / 26

Precis som för matriser kan vi sätta samman strängar. Exempel Skriver vi >> str1 = Jag heter ; % notera extra mellanslag. >> str2 = Fredrik ; >> str = [ str1, str2 ]; så fås en sträng Jag heter Fredrik. Detta är ofta praktiskt då man vill konstruera strängar som består av både text och siffror. 4 december 2015 Sida 4 / 26

Funktionen num2str omvandlar ett tal till en sträng. Exempel För att konvertera siffror till strängar finns num2str använd denna för att skapa en sträng sin(2) = 0.9093. Kommentar Det finns även en funktion str2num men den är inte alls lika användbar. 4 december 2015 Sida 5 / 26

Inmatning Funktionen input används för att fråga en användare efter indata. Exempel Skriver vi >> x = input( Get ett tal: ); Get ett tal: 17 Matlab väntar tills användaren skrivit in ett tal. Detta tilldelas sedan till variabeln x. 4 december 2015 Sida 6 / 26

Exempel Vi kan fråga efter en sträng genom att skriva >> Str = input( Get en kort text:, s ); Ge en kort text: Hej jag heter Fredrik >> disp( Str ) Hej jag heter Fredrik 4 december 2015 Sida 7 / 26

Då en sträng är en radvektor ger length antalet tecken i strängen. Exempel Skriv ett program NamnLangd.m som frågar efter ditt namn och beräknar antalet bokstäver i namnet. Utskrift skall ske enligt följande mönster >> NamnLangd Vad heter du? Fredrik Hej, Fredrik. Ditt namn innehåller 7 bokstäver. 4 december 2015 Sida 8 / 26

På filen NamnLangd.m skriver vi Namn = input( Vad heter du?, s ); str1=[ Hej,,Namn,. Ditt namn innehåller ]; str2=[ num2str(length(namn)), bokstäver ]; disp( [str1 str2] ) Kommentar Matlab används i allmänhet inte för att behandla text. 4 december 2015 Sida 9 / 26

Jämförelser mellan strängar utförselementvis. Funktionen strcmp testar om två strängar är lika eller inte. Exempel Vi skriver >> str1= abc ; str2= abc ; >> str1 == str2 ans = 1 0 1 där alltså b och B är olika tecken. Skriver vi >> strcmp( str1, str2 ) ans = 0 dvs vi får falskt då strängarna är olika. 4 december 2015 Sida 10 / 26

Funktionen blanks skapar en sträng bestående av endast blanktecken. Exempel Skriv en funktion TaBortBlanka med en sträng som inparameter och samma sträng, fast utan blanktecken, som utparameter. Vi skall kunna skriva >> str1 = Hej jag heter Fredrik! ; >> str2 = TaBortBlanka( str1 ); >> disp( str2 ); HejjagheterFredrik! Övning Skriv ett flödesschema och översätt detta till en Matlab funktion. 4 december 2015 Sida 11 / 26

På filen TaBortBlanka skriver vi function [UtStr]=TaBortBlanka( InStr ) n=length( InStr ); UtStr=blanks( n ); j=0; for i=1:n if InStr(i) ~= j=j+1; % Plats att kopiera nästa tecken! UtStr(j)=InStr(i); end end UtStr=UtStr(1:j); % Vi kopierade totalt j tecken. end 4 december 2015 Sida 12 / 26

Exempel Vi vill undersöka konvergensen hos kvadratrotsiterationen, x k = 1 ( x 2 k 1 + a ), k = 1, 2, 3,... x k 1 som konvergerar mot a. Skriv därför ett Matlab program som beräknar talföljden x k, för k = 1, 2,...,20. Skriv ut k, x k, och x k a i varje steg. 4 december 2015 Sida 13 / 26

Programmet blir xk=1;a=3; for k=1:20 xk=(xk+a/xk)/2; str=[ k=,num2str(k), ger xk=,num2str(xk)]; str=[str, och felet,num2str(abs(xk-sqrt(a)))]; disp(str) end; Kör vi programmet fås en utskrift k=1 ger xk=2 och felet 0.26795 k=2 ger xk=1.75 och felet 0.017949 k=3 ger xk=1.7321 och felet 9.205e-05 k=4 ger xk=1.7321 och felet 2.4459e-09 k=5 ger xk=1.7321 och felet 0 Vi behöver ett sätt att styra exakt hur siffror skrivs ut! 4 december 2015 Sida 14 / 26

Formatterade utskrifter För formatterade utskrifter används funktionen fprintf. Kommandot har formen >> fprintf( <dest>, sträng,<variabler> ) där sträng består av text och speciella styrtecken. Vill man skriva ut till skärmen gäller att <dest> är 1. Exempel Skriv ut en textsträng sin(2.3)=0.7457 genom >> x=2.3; y=sin(x); >> fprintf( 1, sin(%3.1f)=%6.4f\n,x,y); sin(2.3)=0.7457 4 december 2015 Sida 15 / 26

Vid utskrift med fprintf gäller Styrtecken är \n för nyradstecken, \t för tab, och för apostrof. Siffror kan skrivas ut på - %e eller %E för exponentform. - %f för vanlig decimalform. - %u eller %i för heltal. Hjälptexten är hyfsad (help fprintf). Exempel Skriv ut texten Det gäller att exp(-7.600)=5.00e-04. Utskrift på exponentform är bra då små eller stora tal skall skrivas ut. 4 december 2015 Sida 16 / 26

Exempel Kvadratrots programmet ändras till xk=1;a=3; for k=1:5 xk=(xk+a/xk)/2; ek=abs(xk-sqrt(a)); fprintf(1, x(%i)=%6.4f och e(%i)=%6.1e.\n,k,xk,k,ek); end; Kör vi programmet fås en utskrift x(1)=2.0000 och e(1)=2.7e-01. x(2)=1.7500 och e(2)=1.8e-02. x(3)=1.7321 och e(3)=9.2e-05. x(4)=1.7321 och e(4)=2.4e-09. x(5)=1.7321 och e(5)=0.0e+00. 4 december 2015 Sida 17 / 26

Utskrifter till en textfil Innan vi kan läsa/skriva till en fil så måste den öppnas. Detta görs med kommandot >> fid = fopen( filnamn.tex, w ); där fid är en filidentifierare, och w betyder att vi skall skriva till filen. Alternativ är r för läsning och a för att skriva till slutet av en existerande fil. Efter att vi skrivit färdigt måste filen stängas. Det görs med >> fclose( fid ); 4 december 2015 Sida 18 / 26

Efter att vi öppnat en fil för skrivning kan vi skriva till den med fprintf. Skriv i Matlab >> utfil = fopen( textfil.txt, w ); >> fprintf( utfil, Hej\n ); så hamnar texten Hej på filen textfil.txt. Exempel Vi behöver en tabell över funktionen f(x) = sin(x 2 ) för Nst jämnt utspridda värden mellan 0 och 2π. Tabellen skall skrivas till en fil sinus_tabell.txt och ha följande utseende *********************** * x * sin(x) * *********************** * 0.23124 * 0.229185 * *********************** 4 december 2015 Sida 19 / 26

Exempel Programmet AMPL löser ett optimeringsproblem av typen min c T x, då Ax b. där vektorerna c, b och matrisen A är indata till programmet. Lösningen blir vektorn x. I Matlab har vi beräknat vektorerna c och b och vill skriva dem till en indata fil som kan läsas av AMPL. Om skall datafilen innehålla raderna c = (1, 2, 3) T och b = (2, 1, 5) T, param c:= 1 1.0 2-2.0 3-3.0; param b:= 1 2.0 2 1.0 3 5.0; Skriv en lämpliga Matlab funktioner som skriver ner dessa rader till en fil. 4 december 2015 Sida 20 / 26

Lösning Vi behöver en funktion som skriver ut en vektor till filen. Alltså function []=printvector( fid,vectorname,data ) som kan anropas exempelvis >> printvector( 1, c, [ 1.0-2.0-3.0] ); param c:= 1 1.0 2-2.0 3-3.0; där utskriften sker till skärmen. Vi behöver dessutom en huvudprogram som öppnar en fil och skriver ner de båda vektorerna till den. function []=printdatafile( filename,c,b ); Vektorerna c och b skall kunna vara av godtycklig dimension. 4 december 2015 Sida 21 / 26

På filen printvector.m skriver vi function []=printvector( fid,vectorname,data ) fprintf( fid, param %s:=,vectorname); n=length(data); for i=1:n fprintf( fid, %i %7.3f,i,data(i) ); end fprintf( fid, ;\n ); % Avsluta med ; och nyrad. end I Matlab terminalen skriver vi >> printvector(1, c,[1-2 3 2] ) param c:= 1 1.0000 2-2.0000 3 3.0000 4 2.0000; 4 december 2015 Sida 22 / 26

På filen printdatafile.m skriver vi function []=printdatafile( filename,c,b ) fid=fopen( filename, w ); printvector( fid, c, c ); printvector( fid, b, b ); fclose( fid ); end I Matlab skriver vi >> printdatafile( data.txt,[1-2 -3],[2 1 5] ); >> type data.txt param c:= 1 1.0000 2-2.0000 3-3.0000; param b:= 1 2.0000 2 1.0000 3 5.0000; Filen data.txt har skapats med rätt innehåll! 4 december 2015 Sida 23 / 26

Seminarieuppgifterna Mål Seminarieuppgiftena syftar till att ge - träning i att skriva lite mer omfattande program med flera deluppgifter som kan lösas separat som olika funktioner. Delarna skall sedan kopplas samman för att lösa hela uppgiften. - träning i skriftlig presentation. Uppgiften, Lösningen, och resultatet skall beskrivas i en kort rapport. - erfarenhet av att använda Matlab för att lösa ett någorlunda realistiskt problem från en tillämpning. 4 december 2015 Sida 24 / 26

Genomförande - Varje grupp tilldelas en uppgift. Denna annonseras på kurshemsidan i början av vecka 50. - Två handledningstillfällen i datorsal finns. Det är viktigt att ni är förberedda så att ni kan utnyttja läraren effektivt. - Senast dagen innan seminariet skall den grupp som skall opponera ha fått rapporten. På seminariet ges varje grupp kommentarer då rapporterna och resultaten diskuteras i gruppvis. Lärare finns tillgänglig för frågor. - Senast två dagar efter seminariet skall opponenternas kritik åtgärdas och rapporten lämnas in till respektive lärare för godkännande. 4 december 2015 Sida 25 / 26

Krav I rapporten skall ingå - en kort bakgrund till uppgiften. - en beskrivning av de olika funktioner som utvecklats. Den metod som implementeras i funktionen skall beskrivas. - ett exempel där funktionerna används för att lösa en uppgift. Här ingår grafer. - Matlabprogram skall inte ingå i rapporten utan dessa skickas med som bilaga. Reservtillfälle Deltagande i seminariet är obligatoriskt. Ett ett extra tillfälle kommer att organiseras i januari precis innan period VT1 börjar. Vet du att du inte kan vara med på ordinarie seminarietillfälle så kontakta din lektionsledare. Missar du ordinarie tillfälle på grund av sjukdom så ta kontakt med mig snarast efter. 4 december 2015 Sida 26 / 26