25
Octave Tutorial Daniel Lamprecht Graz University of Technology March 26, 2012 Slides based on previous work by Ingo Holzmann

Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

  • Upload
    dangque

  • View
    233

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

OctaveTutorial

Daniel Lamprecht

Graz University of Technology

March 26, 2012

Slides based on previous work by Ingo Holzmann

Page 2: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Introduction

What is Octave?

• GNU Octave is a high-level interactive language for numericalcomputations

• mostly compatible to MATLABhttp://www.octave.org/wiki/index.php?title=FAQ#

How_is_Octave_different_from_Matlab.3F

Why use Octave?

• fast prototyping

• little syntactic overhead

• free software

Octave Daniel Lamprecht

Page 3: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Installing Octave

How to get Octave?

• part of most Linux repositories

• http://www.gnu.org/software/octave/

• be sure to use one of the 3.2.x versions

• assignments will be tested with 3.2.4

Libraries:

• Gnuplot: www.gnuplot.info

Octave Daniel Lamprecht

Page 4: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Introduction

• Octave does not come with its own IDE

• there are a few available

• OctaveNB NetBeans IDE Integration

• QtOctave Qt based IDE front-end

• octavede GTK based IDE front-end

• Kalculus, Xoctave

Or just use any text editor and a command shell!

Octave Daniel Lamprecht

Page 5: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Operators and Variables

Numbers:

n = 25 % Numericn = 2 5 . 5 % Numeric

• no variable declarations

• dynamically typed

String delimiters:

s = ” H e l l o w o r l d ! ” % S t r i n gs = ’ H e l l o w o r l d ! ’ % S t r i n g

Octave Daniel Lamprecht

Page 6: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Operators and Variables

Basic Operations:

6 ∗ 5# ans = 30

• results will be stored in the variable ans, if not otherwisespecified

number = 25 + p i# number = 28.142number = number + 5 ;

• predefined constants pi, e, i ...

• use semicolon to suppress output

Octave Daniel Lamprecht

Page 7: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Structs

Defining a Struct:

c o o r d i n a t e s . x = 5 ;c o o r d i n a t e s . y = 8 ;

c o o r d i n a t e s# c o o r d i n a t e s =# {# x = 5# y = 8# }

Accessing a Single Member of a Struct:

c o o r d i n a t e s . x# ans = 5

Octave Daniel Lamprecht

Page 8: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Comparators

Comparing Values:

25 ˜= 25# ans = 0

• 0, false are false

• 1, true and all other numeric values are true

Comparing Strings:

” h e l l o ” == ” h e l l o ”# ans = 1 1 1 1 1

Octave Daniel Lamprecht

Page 9: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Vectors and Matrices

Defining a Vector:

v e c t o r = [ 1 2 3 ] ;

• lines are separated by spaces or commas

Defining a Matrix:

m a t r i x = [ 1 2 ; 3 4 ] ;

• rows are separated by semicolons

Octave Daniel Lamprecht

Page 10: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Vectors and Matrices

Indexing starts with 1

A = [ 1 2 3 ; 4 5 6 ; 7 8 9 ]A( 2 , 3 ) % #ans = 6A ( 1 , : ) % #ans = 1 2 3

A( 4 ) % #ans = 4 a b s o l u t e i n d e x i n gA ( : ) % r e t u r n s a l l e l e m e n t s i n a column v e c t o r

Subscripted Indexing

A ( [ 3 , 5 ] ) % #ans = 7 5A ( [ 2 : 3 , 1 ] ) % #ans = 4 7 1

Octave Daniel Lamprecht

Page 11: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Vectors and Matrices

Matrix Operations:

m a t r i x a = [ 1 2 ; 3 4 ] ;m a t r i x b = [ 5 6 ; 7 8 ] ;m a t r i x a + m a t r i x b

# ans =# 6 8# 10 12

m a t r i x a ∗ m a t r i x b# ans =# 19 22# 43 50

% element−w i s e m u l t i p l i c a t i o nm a t r i x a .∗ m a t r i x b

Octave Daniel Lamprecht

Page 12: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Vectors and Matrices

Transpose of a Matrix:

m a t r i x = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ;matr ix ’#ans =# 1 4 7# 2 5 8# 3 6 9

Inverse of a Matrix:

i n v ( m a t r i x )#ans =# −4.5036 e+15 9.0072 e+15 −4.5036 e+15# 9.0072 e+15 −1.8014 e+16 9.0072 e+15# −4.5036 e+15 9.0072 e+15 −4.5036 e+15

Octave Daniel Lamprecht

Page 13: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Control Structures

If Statement:

i f l e n g t h ( v e c t o r ) < 4v e c t o r ( 4 ) = 0 ;

e l s ev e c t o r ( 4 )

end

Loops:

f o r i = 1 : 1 0 % l o o p from 1 to 10i

e n d f o r

w h i l e i <= 10 % l o o p from 1 to 10i++

e n d w h i l e

Octave Daniel Lamprecht

Page 14: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Vectorizing

Octave works well with array operations and can be slow whenusing loops.(Matlab = Matrix Laboratory)

D = [−0.2 1 . 0 1 . 5 3 . 0 −1.0 4 . 2 3 . 1 ] ;H = [ 2 . 1 2 . 4 1 . 8 2 . 6 2 . 6 2 . 2 1 . 8 ] ;

f o r n = 1 : l e n g t h (D)V( n ) = 1/12∗ p i ∗(D( n ) ˆ 2 )∗H( n ) ;

end

A vectorized version of the same code is

V = 1/12∗ p i ∗(D. ˆ 2 ) . ∗H;

Octave Daniel Lamprecht

Page 15: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Vectorizing

Set all entries < 4 to 0

A =[1 2 4 ; 5 6 3 ; 9 8 8 ]A(A<4) = 0

Vectorizing Sums

a = [ 1 3 4 5 4 2 7 1 ]b = [ 1 1 2 3 5 8 13 2 1 ]

r = 0f o r i = 1 : l e n g t h ( a )

r = r + a ( i ) ∗ b ( i ) ;end

This is just the scalar product of a and b:

r = a ∗ b ’

Octave Daniel Lamprecht

Page 16: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Built-In Functions

Useful Built-In Functions:

• the length of a vector or matrix:

m a t r i x = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ;l e n g t h ( m a t r i x )

# ans = 3

• the size of a matrix:

s i z e ( m a t r i x )# ans =# 3 3

• the diagonal of a matrix:

d i a g ( m a t r i x ) ’# ans = 1 5 9

Octave Daniel Lamprecht

Page 17: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Built-In Functions

• the sum:

m a t r i x = [ 1 2 3 ; 4 5 6 ; 7 8 9 ] ;sum ( m a t r i x )# ans = 12 15 18

• the minimum and maximum:

min ( max ( m a t r i x ) )# ans = 7

• identity matrix:

eye ( 3 )# ans =# 1 0 0# 0 1 0# 0 0 1

Octave Daniel Lamprecht

Page 18: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Built-In Functions

Other Useful Functions:

• abs: the absolute value of a number

• ones: a matrix containing only ones

• zeros: a matrix containing only zeros

• repmat: returns a matrix composed of multiple other matrices

• factorial: the faculty of a number

• any: detecting rows containing only zeros in matrices

• Many functions have overloaded signatures

• Use the help system to get the one you need

h e l p f u n c t i o n n a m e % s h o r t d e s c r i p t i o ndoc f u n c t i o n n a m e % documentat ion

• The Matlab help might also be usefulwww.mathworks.com/help/techdoc/

Octave Daniel Lamprecht

Page 19: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Scripts

script.m:

p r i n t f (” Octave T u t o r i a l Test S c r i p t \n ” ) ;number = 3 ;p r i n t f (” Number = %d\n ” , number ) ;

s c r i p t % c a l l s c r i p t# Octave T u t o r i a l Test S c r i p t# Number = 3

• multiple commands can be stored in a script-file

• call the script without the .m extension

• file must be placed in Octave paths or in the current directory

• use addpath to add a folder to Octave paths

Octave Daniel Lamprecht

Page 20: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Functions

Faculty Function:

f u n c t i o n r e s u l t = f a c u l t y ( v a l u e )r e s u l t = 1 ;f o r i = 1 : v a l u e

r e s u l t ∗= i ;e n d f o re n d f u n c t i o n

• function result-values = function-name(parameters)

• if stored in a file function name and file name have to be equal

f a c u l t y ( 4 )# ans = 24

Octave Daniel Lamprecht

Page 21: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Functions

Multiple Return Values:

f u n c t i o n [ r e s a r e s b ] = swap ( v a l a , v a l b )r e s a = v a l b ;r e s b = v a l a ;e n d f u n c t i o n

[ v a l c , v a l d ] = swap ( 5 , 8 )# v a l c = 8# v a l d = 5

• if a function has more than one return value you have to storethem in different variables

• otherwise only the first return value will be stored

Octave Daniel Lamprecht

Page 22: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Two-Dimensional Plotting

v e c t o r = [ 5 3 9 8 1 4 ] ;p l o t ( v e c t o r )

Saving a Plot to a File:

p r i n t (” m y p l o t . png ” ) ;

Octave Daniel Lamprecht

Page 23: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Two-Dimensional Plotting

Additional Commands:

% c r e a t e new f i g u r e and s e t a p r o p e r t yf = f i g u r e ( ’ v i s i b l e ’ , ’ o f f ’ ) ;

x l a b e l (” x ” ) ; % naming the x−a x i sx l a b e l (” y ” ) ; % naming the y−a x i st i t l e (” MyPlot ” ) ; % s e t th e p l o t t i t l e% p r i n t w i t h o u t d i s p l a y i n g t he p l o t window

p r i n t (” MyPlot . png ”)

Octave Daniel Lamprecht

Page 24: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Introduction Language basics Scripts and Functions Plotting

Two-Dimensional Plotting

• all plotting functions use gnuplot

• download from www.gnuplot.info

• included in the installer for MS Windows

• plot could be used with many different input parameters

• use the help system

h e l p p l o t % s h o r t d e s c r i p t i o n o f p l o tdoc p l o t % p l o t documentat ion

Octave Daniel Lamprecht

Page 25: Tutorial Daniel Lamprecht - Markus Strohmaiermarkusstrohmaier.info/.../707.000_web-science/slides/slides-octave.pdf · Octave Tutorial Daniel Lamprecht Graz University of Technology

Further reading

Octave Documentation(www.gnu.org/software/octave/doc/interpreter)A Short Octave Tutorial (German)(www.christianherta.de/octaveMatlabTutorial.html)Octave Programming Tutorial at Wikibooks(http://en.wikibooks.org/wiki/Octave Programming Tutorial)

Octave Daniel Lamprecht