Kommandon, textsträngar, looper och logik

Det finns en fullständig dokumentation på http://www.gnu.org/software/octave/doc/interpreter/

Formatera tal

Man kan formatera tal på tre olika sätt; format long, format short och format bank (2 decimaler)

>>> format long
>>> pi
ans = 3.14159265358979
>>> format short
>>> pi
ans = 3.1416
>>> format bank
>>> pi
ans = 3.14 

Om man bara skriver kommandot format får man det fördefinierade formatet short.

Textsträngar

Om man vill hantera text istället för tal används textsträngar. En textsträng skrivs mellan två "-tecken eller '-tecken.

>>> my_string_variable="Hello World!"
my_string_variable = Hello World!
>>> my_string_variable='Hello World!'
my_string_variable = Hello World! 

help kommandot

Om man vill få hjälp med ett kommando eller en funktion använder man help kommandot.

>>> help asin
`asin' is a built-in function

-- Mapping Function: asin (X)

Compute the inverse sine in radians for each element of X.

See also: sin, asind

disp kommandot

Man kan använda disp kommandot tillsammans med ett argument innanför en parentes för att visa utdata. Då man använder disp visas utdatan utan ans=.

>>> disp(pi)
3.1416
>>> disp(my_string_variable)
Hello World!
>>> disp("The value of pi is:"), disp(pi)
The value of pi is:
3.1416 

Datum och tid

Då man mäter tid på en dator är det en konvention att mäta tiden sedan 00:00:00 UTC 1 Januari 1970. Kommandot time returnerar antalet sekunder sedan dess; kommandot now antalet dagar. Kommandot date returnerar dagens datum som en textsträng. Kommandot clock returnerar tiden som år-månad-dag-timme-minut-sekund med hjälp av en rad-matris.

>>> time
ans = 1.2737e+009
>>> now
ans = 7.3427e+005
>>> date
ans = 12-May-2010
>>> clock
ans =

2010.0000 5.0000 12.0000 15.0000 41.0000 40.3795

m-filer

Du kan lagra flera kommandon i en så kallad m-fil. Skriv in kommandona i en editor och kör m-filen inifrån Octave.

Arbetsmapp

Alla m-files bör ligga i den så kallade arbetsmappen. Skriv pwd (print working directory) för att se vilken mapp som är arbetsmapp. Om du föredrar att spara filerna i en annan mapp, kan du ta dig till denna med kommandot cd (change directory). För mer information om cd se http://www.computerhope.com/unix/ucd.htm.

Skriv dina m-filer i en editor som kan hantera textfiler utan att lägga till .txt. Några exempeleditorer är Notepad++ för Windows, Sublime Text 2 för Mac (installera från App Store), och gedit för Linux. Spara m-filerna i Octaves arbetsmapp.

En första m-fil

Spara följande rader:

a=1;
b=2;
disp('a+b=')
disp(a+b)

i en fil kallad test1.m i Octaves arbetsmapp. Skriv test1 i Octave för att köra koden.

for-satser

Att upprepa samma operation flera gånger kallas för att iterera. Ett sätt att iterera på när man programmerar är att använda sig av en for-sats. En for-sats i sin enklaste form använder sig av en variabel som representerar ett index vilken ökas med 1 i varje steg.

I koden nedan kallas indexet i. Kommandot mellan for och end upprepas 10 gånger. Första gången rad 2 exekveras är i lika med 0, andra gången är i lika med 1, och så vidare.

Rad 4 börjar med ett %-tecken. Allting till höger om ett %-tecken ignoreras då programmet körs; det som står där är en kommentar avsedd för den som läser själva koden.

for i=0:9
    disp(i)
end
%the numbers 0, 1,...,9 are displayed

Man kan öka index med något annat än 1 genom att skriva dit ett tal mellan startindex och slutindex.

1 for i=0:0.1:2
2     disp(i)
3 end
4 %21 numbers are displayed, the numbers 0,0.1,0.2,...,2

Talföljder, fortsättning

Övning 1

Skriv for-satser i m-filer för att lösa följande uppgifter. Använd format long.

  1. Den rekursiva ekvationen \[ \left\{ \begin{align} a_0 &=c \\ a_{n+1} &=1+\frac{1}{a_n}, n\geq0 \end{align} \right. \] har två fixpunkter \(x_1=\dfrac{1+\sqrt{5}}{2}\) och \(x_2=\dfrac{1-\sqrt{5}}{2}\).
    Skriv en for-sats för att iterera ekvationen 10 gånger.
    Vad händer om du startar med \(c=x_1\) respektive \(c=x_2\)?
    Vad händer om du itererar 50 gånger? 100 gånger?
  2. Skriv en rekursiv ekvation för kedjebråket \[ 1 + \cfrac{1}{2 + \cfrac{1}{2 + \cfrac{1}{2 + \cfrac{1}{2+\cdots } } }} \] Tips: det är enklare att skriva en rekursiv ekvation för att bestämma kedjebråket plus 1.
    1. Bestäm gränsvärdet av den rekursiva ekvationen genom att iterera i Octave.
    2. Bestäm det exakta värdet av kedjebråket genom att först bestämma fixpunkterna till den rekursiva ekvationen från a och sedan subtrahera 1.

Några serier

En serie \(\sum a_i\) sägs konvergera om \(\sum_{i=0}^{n}a_i\) har ett ändligt gränsvärde då \(n\rightarrow\infty\).

Övning 2

  1. Använd Octave till att dra en slutsats om huruvida \[ \sum_{i=1}^{n}\left(\frac{1}{i}\right)^2 \] konvergerar eller ej då \(n\rightarrow\infty\).
  2. Använd Octave till att dra en slutsats om huruvida \[ \sum_{i=1}^{n}\frac{1}{i} \] konvergerar eller ej då \(n\rightarrow\infty\).
    1. Skriv om \[ 1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\frac{1}{5}-\frac{1}{6}+\cdots \] till \(\sum\)-notation.
    2. Använd Octave till att dra en slutsats om huruvida denna serie konvergerar eller ej då \(n\rightarrow\infty\).
  3. Iterera för att bestämma summan av de första 50 termerna av \[ 1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\frac{1}{11}+\cdots \] multiplicera sedan resultatet med 4. Vad händer om man itererar 500 gånger? 5000 gånger? 50000 gånger?

Boolesk logik

Boolesk algebra

I boolesk algebra representeras de logiska värdena sant och falskt av talen 1 respektive 0.

>>> true
ans = 1
>>> false
ans = 0

och, eller, inte

De grundläggande operatorerna inom logiken är och, eller och inte, dessa skrivs med hjälp av symbolerna ∧, ∨ respektive ¬. Om p och q är påståenden som är antingen sanna eller falska får man följande sanningstabell

p q pq pq ¬p
true true true true false
true false false true false
false true false true true
false false false false true

Operatorerna ∧ och ∨ är binära operatorer, de appliceras på två operander. Operatorn ¬ är en unär operator, den appliceras på en operand.

I Octave (och de flesta andra programmeringsspråk) skrivs operatorerna ∧, ∨ och ¬ med symbolerna &&, || och !; vilket ger denna sanningstabell

p q p && q p || q !p
1 1 1 1 0
1 0 0 1 0
0 1 0 1 1
0 0 0 0 1

I Octave (och de flesta andra programmeringsspråk) räknas tal som inte är lika med 0 som sanna.

>>> a=4.5;
>>> b=0;
>>> (a && b) || !b
ans = 1

Notera att man kan åstadkomma logiska operationer med hjälp av aritmetik.

p && q = pq

p || q = p+q-pq

!p = 1-p

Jämförelseoperatorer

Då man gör en jämförelse i Octave applicerar man en jämförelseoperator på två tal och resultatet är antingen sant eller falskt, representerat av 1 eller 0.

operation operatorer operander resultat
arithmetisk operation + - * / ^ tal ett tal
logisk operation && || ! logiska värden ett logiskt värde
jämförelse > >= < <= == != tal ett logiskt värde

Jämförelseoperatorerna är:

operator förklaring
> större än, >
>= större än eller lika med,
< mindre än, <
<= mindre än eller lika med,
== lika med, =
!= skilt från,
>>> a=1; b=2; c=2; d=3;
>>> a>=b
ans = 0
>>> b>=c
ans = 1
>>> (a < b) && (c!=d)
ans = 1

>>> a < b && c!=d
>>>parse error:

syntax error

>>> a < b && c!=d
^

mer info:

Harmonic series
Madhava-Leibniz series

Fuzzy Logics: Denna artikel publicerades i Scientific American 1993, A Partly True Story, av Ian Stewart

Det där är sant→      ← Det där är falskt

by Malin Christersson under a Creative Commons Attribution-Noncommercial-Share Alike 2.5 Sweden License

www.malinc.se