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
.
- 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 enfor-
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? - 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.
- Bestäm gränsvärdet av den rekursiva ekvationen genom att iterera i Octave.
- 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
- 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\).
- Använd Octave till att dra en slutsats om huruvida \[ \sum_{i=1}^{n}\frac{1}{i} \] konvergerar eller ej då \(n\rightarrow\infty\).
-
- Skriv om \[ 1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\frac{1}{5}-\frac{1}{6}+\cdots \] till \(\sum\)-notation.
- Använd Octave till att dra en slutsats om huruvida denna serie konvergerar eller ej då \(n\rightarrow\infty\).
- 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 | p ∧ q | p ∨ q | ¬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