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