SCILAB/SCICOSLAB - en kompakt introduktion av Tore Gustafsson

Relevanta dokument
MATLAB - en kompakt introduktion av Tore Gustafsson

Introduktion till 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:

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

Beräkningsvetenskap föreläsning 2

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

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

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

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

MAPLE MIKAEL STENLUND

Matlabövning 1 Funktioner och grafer 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

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

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

MMA132: Laboration 2 Matriser i MATLAB

TANA17 Matematiska beräkningar med Matlab

Matlabövning 1 Funktioner och grafer i Matlab

TEKNISKA HÖGSKOLAN Matematik Fredrik Abrahamsson. Introduktion till MATLAB

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

4.3. Programmering i MATLAB

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

Du kan söka hjälp efter innehåll eller efter namn

Fel- och störningsanalys

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

Introduktion till Matlab

Newtons metod och arsenik på lekplatser

Instruktion för laboration 1

Introduktion till Matlab

TAIU07 Matematiska beräkningar med Matlab

Matriser och Inbyggda funktioner i Matlab

Mer om funktioner och grafik i Matlab

TANA17 Matematiska beräkningar med Matlab

MMA132: Laboration 1 Introduktion till MATLAB

Språket Python - Del 1 Grundkurs i programmering med Python

Laboration: Grunderna i MATLAB

Fel- och störningsanalys

Matriser och Inbyggda funktioner i Matlab

Mathematica. Utdata är Mathematicas svar på dina kommandon. Här ser vi svaret på kommandot från. , x

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

Introduktion till MATLAB Föreläsning 1

Matematisk Modellering

Användarhandledning Version 1.2

TAIU07 Matematiska beräkningar med Matlab

Lösningsförslag Tentamen i Beräkningsvetenskap I, 5.0 hp,

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

MATLAB. Vad är MATLAB? En kalkylator för linlär algebra. Ett programspråk liknande t.ex Java. Ett grafiskt verktyg.

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

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

Instruktion för laboration 1

k 1 B k 2 C ges av dx 1 /dt = k 1 x 1 x 1 (0) = 100 dx 2 /dt = k 1 x 1 k 2 x 2 x 2 (0) = 0 dx 3 /dt = k 2 x 2 x 3 (0) = 0

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

Linjär algebra med tillämpningar, lab 1

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

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

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

LABORATION I MAPLE MIKAEL STENLUND

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

Introduktion & MATLABrepetition. (Kap. 1 2 i MATLAB Programming for Engineers, S. Chapman)

Lab 1, Funktioner, funktionsfiler och grafer.

Laboration: Grunderna i Matlab

MAM283 Introduktion till Matlab

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

Teorifrågor. 6. Beräkna konditionstalet för en diagonalmatris med diagonalelementen 2/k, k = 1,2,...,20.

MATLAB handbok Introduktion

Variabler och konstanter

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

TANA17 Matematiska beräkningar med Matlab

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

Approximation av funktioner

Lägg märke till skillnaden, man ser det tydligare om man ritar kurvorna.

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

Användarmanual till Maple

Mer om funktioner och grafik i Matlab

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

At=A' % ' transponerar en matris, dvs. kastar om rader och kolonner U' % Radvektorn U ger en kolonnvektor

Laboration: Vektorer och matriser

Allmänt om Mathematica

Introduktion till Matlab

Funktioner och grafritning i Matlab

Att undervisa och studera matematik med datoralgebraprogrammet Maxima. Per Jönsson och Thomas Lingefjärd

Moment 5.5 Övningsuppgifter I 5.60a. 5.60b, 5.60.c, 61

Gruppuppgifter 1 MMA132, Numeriska metoder, distans

Laboration 2, M0043M, HT14 Python

Introduktion till Matlab

Beräkningsverktyg HT07

Introduktion till Python Teoridel

Laboration 3. Funktioner, vektorer, integraler och felskattning

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

TANA17 Matematiska beräkningar med Matlab

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

Matriser och linjära ekvationssystem

Moment Viktiga exempel Övningsuppgifter

LABORATION 2. Trapetsregeln, MATLAB-funktioner, ekvationer, numerisk derivering

4x 2 dx = [polynomdivision] 2x x + 1 dx. (sin 2 (x) ) 2. = cos 2 (x) ) 2. t = cos(x),

R AKNE OVNING VECKA 2 David Heintz, 13 november 2002

Beräkningsvetenskap och Matlab. Vad är MATLAB? Vad är MATLAB? Användningsområden. Vad är MATLAB? Grunderna i Matlab. Beräkningsvetenskap == Matlab?

TAIU07 Matematiska beräkningar med Matlab

Transkript:

19.6.010 1 ÅBO AKADEMI SCILAB/SCICOSLAB - en kompakt introduktion av Tore Gustafsson Scilab och Scicoslab är interaktiva programpaket för numeriska beräkningar. Scilab upprätthålls av "The Scilab Consortium" med rötter i INRIA (franska nationella institutet för forskning inom datateknik och reglering) medan Scicoslab upprätthålls av en forskargrupp inom INRIA. Båda programmen är gratis med öppna källkoder och finns tillgängliga för Linux, Windows och MacOSX. Programmen är nära besläktade och till en stor del kompatibla med varandra. Denna introduktion gäller båda programmen. Ordet Scilab kan i beskrivningen nedan bytas ut mot Scicoslab om inte annat anges. Scilab används via några interaktiva fönster. De viktigaste är konsolen "Console", "Scilab text editor" (eller "Scipad") och "Help Browser". I konsolen kan man ge beräkningsinstruktioner och detta är det normala stället för beräkningsresultaten. Det rekommerade arbetssättet är att skriva ner instruktionerna för att lösa ett problem i en speciell programfil. Dessa filer innehåller egentligen datorprogram skrivna i Scilabs eget programmeringsspråk. Programfilerna skrivs och editeras lämpligen med programmets egen texteditor. Referenser för programmeringen fås ur fönstret "Help Browser". Referenser till dokumentation om hittar vi på webben på adressen "http://wiki.scilab.org/" eller "http://www.scicoslab.org/". Följande arbetssätt rekommeras: öppna "Console", välj arbetsområde genom att välja "change current directory" i konsolens meny. Öppna "Scilab text editor" och "Help Browser" och placera dem på skärmen så att alla tre fönstren samtidigt är synliga. Skriv de instruktioner som behövs för beräkningen i en programfil med hjälp av "Scilab text editor" och med "Help Browser" som referens. Lagra filen och utför instruktionerna genom att i konsolen i menyn välja "Execute" och sedan välja den aktuella programfilen. Scilab styrs av alfanumeriska radvisa instruktioner. Normalt avslutas en instruktion till Scilab med radslutet. Om man önskar fortsätta instruktionen på nästa rad skrivs tre punkter (...) i slutet av raden. Normalt skrivs resultatet genast ut på skärmen, ett semikolon (;) efter uttrycket förhindrar utskrift Variabler Alla vanliga variabler är i princip av typen "matris med flyttalselement". En variabel har ett namn beståe av bokstäver och siffror. Bokstäverna å, ä och ö får inte förekomma, inte heller en siffra som första tecken. En variabel "deklareras" i och med att den tilldelas ett värde. Matrisens dimension slås fast i och med att variabeln tilldelas en given matris. Dess dimension kan ändras genom att tilldela den ett nytt värde. Tilldelning a = 0.5 definierar en skalär a (= 1x1-matris) och ger den värdet 0,5. Observera att Scilab använder decimalpunkt, inte decimalkomma! A = [1 3; 4 5 6; 7 8 9] definierar en 3x3 matris A med elementen som givits mellan hakparenteserna [ och ]. Semikolon (;) åtskiljer raderna. Det lönar sig i allmänhet att skriva ned större matriser en rad åt gången. Efter semikolon behöver man inte skriva tre punkter (...) för att fortsätta instruktionen: A = [ 1 3; 4 5 6; 7 8 9] Matriselement kan bestå av uttryck eller funktioner: b = [-1.3; sqrt(3); (1++3)*4/5] resulterar i matrisen (vektorn) b till höger. Scilab känner en del konstanter som π, e och i. Dessa betecknas som %pi, %e respektive %i. I resultatet anges 1 som i. Scilab känner även begreppet oändligt; en variabel kan ges värdet %inf. A = 4 7 5 8 3 6 9 1, 3 b = 1,730508 4,8 -->c = %e c =.718818 -->r = sqrt(-1) r = i -->x = %inf; -->y=sqrt(x) y = Inf

Tore GustafssonScilab/Scicoslab - en kompakt introduktion 3 A = 4 5 6 7 8 10 4 s = 1,3 10 Kolon (:) är en operator för att tilldela en sekvens av tal till en matris eller vektor, t.ex. x = 1:5 resulterar i x = [1 3 4 5], d.v.s. varje element i sekvensen inkrementeras med ett. I ett uttryck med två kolon anger uttrycket mellan kolonen hur mycket talvärdet skall ökas i varje steg i sekvensen, y = 0 : %pi/4 : %pi resulterar i y = [0. 0.785398 1.5707963.3561945 3.141597]. Matriselement anges med index inom parentes, t.ex. som A(,3) eller b(). Första indexet anger raden och andra indexet kolumnen. Ett a index anger elementets ordningsföljd oberoe om det är en radvektor eller kolumnvektor. Vi kan t.ex. ändra värdet på elementet i rad 3, kolumn 3 i den tidigare specificerade matrisen A med instruktionen A(3,3) = 10 Små och stora tal skrivs i traditionellt e-format: s = 1.3e-4 Komplexa tal är tillåtna i många funktioner z = 3 + 4*%i Uttryck Matematiska operatorer + addition - subtraktion * multiplikation / högerdivision \ vänsterdivision ^ exponent ' transponering c = b T b = [ 1,3 1,731 4,8] = 7,7300 d = 4 7 c f 5 8 3 6 x = 10 3 1,3 1,731 4,8 En utförbar sats är av formen variabel = uttryck eller enbart uttryck. Ett uttryck består av variabler och aritmetiska operatorer och/eller funktioner. T.ex. c = b' * b ger inre produkten b T b = 7,7300. Satsen fungerar så att uttrycket till höger om likhetstecknet evalueras, varefter räkneresultatet tilldelas variabeln till vänster om likhetstecknet. Observera att likhetstecknet i alltid betyder tilldelning. Likhetstecknet innebär inte att vi har en ekvation såsom i matematiken. T.ex. instruktionen n = n + 1 innebär att värdet av n ökas med ett. Högerdivision och vänsterdivision är för skalärer identiska, d = c / f är samma som d = f \ c, d.v.s. c divideras med f. För matriser gäller att x = A \ b är en lösning till ekvationen A x = b. Om A är kvadratisk innebär division en direkt Gausselimination av A, annars innebär operationen en minsta-kvadrat-lösning till ekvationen. 1 x = 0 1

Scilab/Scicoslab - en kompakt introduktion Tore Gustafsson 3 Elementvisa operationer (Array operations) Elementvisa operatorer utför aritmetiska operationer element för element på matriser eller vektorer. T.ex. om x = [ 1 3] och y = [4 5 6] så ger operationen z = x.^ y resultatet z = [ 1 3 79], medan om exponenten är skalär, z = x.^ resulterar i z = [ 1 4 9]. Variablerna i högerledet kan vara vektorer eller matriser, men alla bör ha samma dimension. Resultatet blir då en vektor eller matris med denna samma dimension. Addition och subtraktion behöver inte specificeras som elementvisa därför att addition och subtraktion av matriser enligt definition utförs elementvis. Elementvisa operatorer + addition - subtraktion.* multiplikation./ högerdivision.\ vänsterdivision.^ exponent Matematiska funktioner Det existerar ett otal elementära matematiska funktioner samt vektor-, matrisoch polynomtransformationer. Funktionerna sin, cos, exp etc. fungerar elementvis med vektorer eller matriser som argument, medan för motsvarande matrisfunktioner finns skilda funktioner, t.ex. matrisexponentialfunktionen expm. alfa = 0 : %pi/ : *%pi x = sin(alfa) resulterar i svaret x = [ 0. 1. 1.5D-16-1. -.449D-16 ]. Resultatet 1.5D-16 betyder 1,5 10 16. Svaret pekar på en begränsning vid numerisk matematik: noggrannheten är begränsad. I detta fall har svaret en relativ 15 felgräns på ca 10, vilket är den normala felgränsen vid datorberäkningar. Det exakta svaret är ju x = [ 0 1 0 1 0] Listan till höger ger några vanliga funktioner. "Help browser" innehåller många fler. Några matematiska funktioner e x exp(x) ln x log(x) log 10 x log10(x) x abs(x) x sqrt(x) sin x sin(x) cos x cos(x) tan x tan(x) arcsin x asin(x) arccos x acos(x) arctan x atan(x) arctan (x/y) atan(x,y) Egna funktioner En egen funktion kan definieras som en del av ett Scilabprogram eller i en skild fil. Ytterligare kan en funktion definieras i form av en textsträng tillsammans med funktionen deff. En funktion deklareras med deklarationsraden function [x,y]= minfunk(a,b) där minfunk är funktionens namn, a och b är funktionens argument (funktionen kan ha ett eller flera argument) och [x, y] är resultaten från funktionen (kan vara ett eller flera). Efter deklarationsraden kommer själva programmet som definierar funktionen. Funktionsdefinitionen avslutas med instruktionen function. Vi vill t.ex. beräkna integralen = 3 x Q cos( x) e dx. I "Help Browser" 0 // betecknar kommentar, Scilab ignorerar resten av raden efter // hittar vi funktionen intg för numerisk integration av en funktion. Vi skriver en programfil som löser problemet. Först definierar vi integranden som en egen funktion, som skall heta integrand, och sedan beräknar vi integralen med funktionen intg. // Integral.sce - numerisk integration. function y = integrand(x) y = cos(x).*exp(x); function Q = intg(0, 3, integrand)

4 Tore Gustafsson Scilab/Scicoslab - en kompakt introduktion Det allmännaste sättet att definiera egna funktioner är att skriva dessa i egna filer. En sådan funktionsfil kan innehålla flera funktioner. Innan en sådan funktion kan användas måste den laddas in med instruktionen exec. Diagram f(x) 5 0-5 -10-15 Integrandens graf -0 0 0.5 1 1.5.5 3 - plot(x,y,'-') ritar heldragen linje - plot(x,y,'--') ritar streckad linje - plot(x,y,'o') märker ut de givna punkterna med cirklar - plot(x,y,'k') ritar en heldragen svart linje. plot(x,y) ritar diagram. Ett diagram med grafen av funktionen "integrand", definierad i funktionen integrand, erhålls med följande programsekvens: function y = integrand(x) y = cos(x).*exp(x); function x = [0:0.1:3]'; y = integrand(x); figure(1) clf plot(x,y) title('integrandens graf') xlabel('x') ylabel('f(x)') Den första raden efter funktionsdefinitionen bildar en vektor med 31 ekvidistanta x-värden, och den andra raden beräknar motsvarande funktionsvärden, som lagras i variabeln y. figure(1) initierar figur nummer 1. I Scicoslab skulle vi skriva set("current_figure",1) istället för figure(1). clf raderar en eventuell tidigare figur. plot(x,y) ritar ett linjediagram med räta linjer mellan (x, y)-par i vektorerna x och y. Diagrammet skalas automatiskt. De tre sista raderna sätter till en titel ovanför diagrammet och storheter på x- och y-axeln. Räknenoggrannhet och utskrift Scilab räknar med ca 15 siffrors noggrannhet. Detta gäller emellertid inte för alla funktioner. T.ex. numerisk lösning av differentialekvationer med funktionen ode ger ett relativt fel mindre än 10 5 och ett absolut fel mindre än 10 7 i resultatet. Önskas högre noggrannhet måste detta specificeras skilt. Oberoe av räknenoggrannheten skrivs resultatet ut med ett fast antal siffror. Normalt skrivs resultatet med sex decimaler. Om det normala formatet för talvärden inte är tillfredsställande kan man ändra urskriften med funktionen format. Mera om matriser A = 4 7 3 d = 6 5 8 3 6 10 g = [ 4 5 6] F = 4 5 6 7 8 10 Undermatriser kan specificeras med vektorer som index, t.ex. d = A(1:,3) ger en x1-matris, d.v.s. rad 1 och ur kolumn 3 ur A. Observera att indexeringen av matriser startar från 1, inte från 0 som i vissa programmeringsspråk. Ett ensamt kolon som index betecknar alla element i motsvarande rad eller kolumn: g = A(,:) F = A(:3,:) En matris kan sättas ihop av ett antal undermatriser, t.ex. b1 = [4 6 8];

Scilab/Scicoslab - en kompakt introduktion Tore Gustafsson 5 b = [1 3 0]; c1 = [ ; 7]; B = [[ b1 ; b ] c1 ]. Då det är tvetydigt om en vektor är en radvektor eller kolumnvektor föredrar Scilab kolumnvektorer. T.ex. instruktionerna h(1) = 1 h() = resulterar i en kolumnvektor. Önskar vi bestämma en radvektor elementvis kan vi skriva g(1,1) = 1 g(1,) =. Dimensionen av en matris eller vektor X erhålls med instruktionen [m, n] = size(x) Tre speciella matriser definieras med Z = zeros(m,n), som ger en mxn-matris fylld med nollor, E = ones(m,n), som ger en mxn-matris fylld med ettor och I = eye(n,n), som ger en identitetsmatris av dimensionen nxn. Diagonalmatriser konstrueras enkelt med instruktionen F = diag(d), där d är en vektor. Funktionerna det, norm, rank, cond beräknar matrisens determinant, norm, rang respektive konditionstal. Funktionen inv inverterar en matris Olinjära ekvationer Iterativ lösning av olinjära ekvationer kan utföras med fsolve. x = fsolve(x0, funktion) fsolve beräknar här iterativt ett nollställe x för en given funktion, definierad i en funktion med namnet funktion, utgåe från en given gissning x0. Exempel. Bestäm en lösning till ekvationen ( x 3) 1 = 0 i närheten av x = 1. Vi skriver en funktionsfil, som definierar funktionen vars värde skall vara noll, och kallar den funk.sce. Filen ser ut såhär: // funk.sce - funktion för fsolve function y = funk(x) y = (x-3).^ - 1; function Lösningen fås med följande instruktioner i konsolen eller i huvudprogrammet: exec('funk.sce'); x = fsolve(1, funk) Observera att vi i funktionen använder elementvisa operationer, och tillåter sålunda att argumentet x kan vara en vektor. b 1 = [ 4 6 8] b [ 1 3 0] = c = 1 7 4 6 B = 1 3 h = g = [ 1 ] 8 0 Exempel: -->size(b) ans =. 4. Exempel: E = ones(3,1) I = eye(3,3) D = [E I] ger matrisen 1 0 0 D = 1 0 1 0 1 0 0 1 Exempel: d = [1 3]' F = diag(d) ger matrisen 0 0 F = 0 0 0 0 3 7 Scilab/Scicoslab kan inte lösa ekvationer! fsolve löser egentligen inte ekvationer, utan söker nollställen för funktioner. Ekvationen måste alltså först skrivas i normalformen f(x) = 0, d.v.s. med en nolla i högerledet.

6 Tore Gustafsson Scilab/Scicoslab - en kompakt introduktion y ( x 3) e = 0 xy = 1 Scilabs normalform: x ( x 3) e 1 = 0 x1x 1 = 0 x x = 1 x x y x f ( x) = ( x1 3) e x1x 1 --> exec('ekvsys.sce') --> x = fsolve([0.1;0.1],ekvsys) x = 1.64479 0.608009 Fsolve löser även olinjära ekvationssystem. Fsolve vill ha problemet i formen f(x) = 0, där vektorfunktionen f(x) ges i en egen funktion. Exempel. Bestäm en lösning till ekvationssystemet y ( x 3) e = 0 xy = 1 i närheten av origo. Vi skriver en funktionsfil, som definierar funktionen vars värde skall vara noll, och kallar den ekvsys.sce. Filen ser ut så här: // ekvsys.sce - ekvationssystem för fsolve. function f = ekvsys(x) f(1,1) = (x(1) - 3)^ - exp(x()); f(,1) = x(1)*x() - 1; function Lösningen fås med följande instruktion i konsolen eller i huvudprogrammet: exec('ekvsys.sce'); x = fsolve([0.1;0.1],ekvsys) där första argumentet är startvärdet för iterationen, en vektor [0,1 0,1] T. fsolve klarar inte av problemet med startvektorn [0 0] T. Ordinära differentialekvationer Ordinära differentialekvationer kan lösas numeriskt med funktionen ode. Funktionen ode löser ett system av 1:a ordningens differentialekvationer, skrivet i formen dy f ( t, y) dt =, med begynnelsetillståndet y 0 vid ett värde t = t 0. y är tillståndsvektorn, t är den oberoe variabeln och f är en vektorfunktion. y = ode(y0,t0,t,funktion); löser differentialekvationen definierad i en funktion "funktion", från t = t0 med begynnelsevärdet y(t0) = y0. Lösningen erhålls i vektorn y, vars element innehåller funktionsvärdena vid de värden som specificerats i vektorn t. y1 = y1(1 y ) y y = y1 y y = 1 y dy f ( t, y) dt = f ( t, y) = y1 (1 y ) y y1 Exempel. Vi skall lösa systemet av differentialekvationer, y 1 = y1(1 y ) y y = y1 mellan 0 < t < 0 med begynnelsetillståndet y 1 (0) = 0, y (0) = 0,5. Systemet av differentialekvationer skrivs i normalformen ovan. Funktionen f(t, y) definieras i funktionen "diffek". Sedan bildas en lämplig vektor med oberoe variabler, t, och differentialekvationen löses med funktionen ode. // Lös ett system av en diff.ekv. function f = diffek(t,y) f = [y(1)*(1-y()^)-y(); y(1)]; function t = [0.0:0.1:0]; y0 = [0 0.5]'; y = ode(y0,0,t,diffek); plot(t,y) xlabel('<mi>t</mi>') ylabel('<mi>y</mi>')

Scilab/Scicoslab - en kompakt introduktion Tore Gustafsson 7 Vi prövar med att ta ut en diskret lösning vid 01 ekvidistanta t-värden och ritar lösningarna y 1 (t) och y (t) i ett diagram. Den grafiska lösningen visas till höger. Scilab kan skriva välformaterade matematiska uttryck i diagram genom att använda XML-kod i teckensträngarna för text som skall skrivas in i diagrammen. Scicoslab klarar inte av XML-kod i texten. Flödeskontroll Instruktionerna "for - ", "if - then - (elseif - then -)(else - then -)" och "while - " kan användas för flödeskontroll. Instruktionerna mellan for och utförs upprepade gånger medan variabel tar ett värde åt gången ur uttryck. T.ex. for k = 1:5 x(k,1) = log(k); bildar en vektor x som innehåller 5 element: naturliga logaritmerna av 1,, 3, 4 och 5. Om värdet av uttryck är sant (= T) utförs instruktionerna mellan if och, annars utförs instruktionen efter. If - kan kompletteras med elseif eller med else. Då utförs antingen den första satsen instruktioner eller den andra satsen instruktioner beroe på om uttryck är sant eller falskt. T.ex. if x > 0 then y = log(x) else y = -%inf ger y värdet ln x om x > 0, annars får y värdet. Instruktionerna mellan while och utförs upprepade gånger så länge uttryck är sant. T.ex. k = 0 while k < 100 k = k + 1; ökar värdet på k tills k = 100 varefter instruktionen efter utförs. Räkneslingan utförs alltså 100 gånger och resulterar ast i att k = 100 efter slingan. Flödeskontroll kräver logiska uttryck. Ett logiskt uttryck (variabel) får värdet T då det är sant och värdet F då det är falskt. De logiska operatorerna jämför matriser elementvis. T.ex. k = 0 L = k < 100 ger resultatet L = T (k och L är skalärer), medan x = [1 5 0.3]; L = (x == [1 1 1]) ger resultatet L = T F F. for variabel = uttryck instruktion... instruktion if uttryck then instruktion... instruktion if uttryck then instruktioner else instruktioner while uttryck instruktioner Logiska operatorer < mindre än > större än == lika med <= >= ~= olika & och eller ~ inte

8 Tore Gustafsson Scilab/Scicoslab - en kompakt introduktion Mera om variabler och funktioner global x y z Normalt har varje funktion sina lokala variabler. Detta betyder att en variabels värde är känt ast i den funktion där variabeln har givits ett värde. Dessutom känner varje funktion den anropande omgivningens variabler, men funktionen kan inte ändra värdet på dessa. Globala variabler kan definieras med instruktionen global. Globala variablers värden är dock fortfarande kända ast i de funktioner där de är definierade som globala. Instruktionen global måste således finnas i alla funktioner inklusive huvudprogrammet. T.ex. följande tre funktioner har delvis gemensamma variabler: deff('initdata()','global A C ;A=10,C=30') deff('letsgo()','global A C ;disp(a) ;C=70') deff('letsgo1()','global C ;disp(c)') Felsökning För enklare beräkningsuppgifter rekommeras följande procedurer för felsökning: - skriv några få rader i gången varefter programmet testas genom att utföras i konsolen - uttryck du är osäker på kan testas genom att kopiera uttrycket till konsolen och utföra det där - kontrollera viktiga variablers värden och dimensioner genom att tillfälligt ta bort semikolon på den rad där de beräknas, eller sätt in nya rader med enbart variabelns namn för att få en utskrift. T.ex. kan vi kontrollera att parametern c fungerar som den bör i funktionen coscx genom att låta dess värde skrivas ut medan funktionen utförs. - pröva att dina funktioner fungerar genom att beräkna något funktionsvärde från konsolen. Kom ihåg att du måste ge argumenten inom parentes.