Está en la página 1de 80

SMB: 2.

Clculo numrico con Octave


J. Rafael Rodrguez Galvn

OSLUCA (Ocina de Software Libre de la Universidad de Cdiz)


III Curso intensivo i-MATH de software libre orientado a ciencias e
ingeniera: Software Matemtico Bsico (SMB)

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

1 / 78

(c) Rafael Rodrguez Galvn, Guillm Borrell. Se autoriza la utilizacin de este documento segn la licencia GFDL,
sin secciones invariantes, texto de portada ni de respaldo.

http://ciencialibre.forja.rediris.es

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

2 / 78

Seccin 1. Toma de contacto con Octave

1 Toma de contacto con Octave


Introduccin a Octave
Primeros pasos con qtOctave

2 Matrices y lgebra matricial


3 Representacin de grcos
Grcos 2D
Grcos en 3D

4 Programacin con Octave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

3 / 78

Seccin 1.1
Toma de contacto con Octave: Introduccin a Octave

1 Toma de contacto con Octave


Introduccin a Octave
Primeros pasos con qtOctave

2 Matrices y lgebra matricial


3 Representacin de grcos
Grcos 2D
Grcos en 3D

4 Programacin con Octave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

4 / 78

Qu es Octave

Lenguaje interpretado de alto nivel, orientado al clculo matricial

Intrprete para este lenguaje

Licencia libre (GPL)

Concebido en 1988 por John W. Eaton


Amplia comunidad de usuarios (http://www.octave.org)
Cdigo fuente C++

Potente biblioteca de clculo matricial (GPL)


Fcilmente extensible en C++

Disponible para numerosos sistemas y arquitecturas

Octave no est especializado en clculo simblico

Para ello, existen numerosas herramientas libres como


Axiom, Pari/GP o Ginac

Maxima,

Existen muchos otros entornos de clculo numrico libres:

Scilab, Euler, Freemat, Python/Scipy...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

5 / 78

Potencialidad de Octave

Curva de acceso poco empinada

Incluye de serie:

Operaciones matriciales
Resolucin de (sistemas de) ecuaciones lineales y no lineales
Clculo de autovalores y autovectores
Clculo de races de ecuaciones no lineales
Aproximacin numrica de funciones y datos (interpolacin,
FFT, funciones spline,...)

Clculo numrico de derivadas e integrales


Resolucin numrica de ecuaciones diferenciales
Representacin de grcas 2D y 3D (a travs de Gnuplot)
...

Compatibilidad con Matlab...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

6 / 78

Octave y Matlab

Alta compatibilidad con el  lenguaje Matlab

ventajas

freno a la innovacin propia


hereda puntos dbiles

Dnde se pierde la compatibilidad?

hereda puntos fuertes

inconvenientes

fcil migracin desde Matlab

Extensiones al lenguaje Matlab


Toolkits

Filosofa propia:  lenguaje de scripting cientco

Se complementa con otras herramientas libres

Parte de una navaja suza


Concentrarse en cumplir sus objetivos
Filosofa unix y losofa software libre

No se identica con un entorno grco concreto

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

7 / 78

Lenguajes interpretados en clculo cientco

Lenguajes interpretados:

Reduccin del ciclo de desarrollo (relacin esfuerzo/resultado)


Polivalencia, acceso a herramientas de alto nivel
Concentrarse en las dicultades del problema (no en las del
lenguaje)

Lenguajes compilados: Potencia de clculo


Lenguajes interpretado como lenguajes  pegamento: lo mejor de
dos mundos

90 % del cdigo: lenguaje interpertado


10 % restante (zonas crticas en potencia de calculo): lenguaje
compilado

Para tareas cientcas:

Octave
Python

Lisp, scilab, Ruby,...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

8 / 78

Seccin 1.2
Toma de contacto con Octave: Primeros pasos con qtOctave

1 Toma de contacto con Octave


Introduccin a Octave
Primeros pasos con qtOctave

2 Matrices y lgebra matricial


3 Representacin de grcos
Grcos 2D
Grcos en 3D

4 Programacin con Octave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

9 / 78

qtOctave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

10 / 78

qtOctave

Entorno grco para Octave, desarrollado con libreras QT

Desarrollador principal: Pedro L. Lucas

Orgen: Proyecto presentado al I Concurso Uninversitario de


Software Libre (2007)

Apoyo de la OSLUCA (Alejandro lvarez Aylln).

Dnde conseguirlo:

Blog:
http://qtoctave.wordpress.com/

Forja de RedIris:
https://forja.rediris.es/projects/csl-qtoctave/

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

11 / 78

Instalacin

Windows: utilizar el instalador disponible

MacOsX: Compilar el cdigo fuente

GNU/Linux:

Instalar la versin disponible para tu distribucin favorita


O bien descargar QtOctave portable
O bien compilar cdigo fuente

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

12 / 78

Primera sesin con qtOctave

Arrancamos qtOctave...

Distintas secciones

1
2
3
4

Consola de Octave: usando Octave como una calculadora


Edicin de matrices: para amantes del point and click
Editor de cheros de Octave
Lista de variables,

Directorio actual

Otras utilidades:

Acceso a la ayuda de Octave

Entorno mejorado para la representacin de grcos (Easy Plot)


...

1 http://www.gnu.org/software/octave/doc/interpreter/index.html
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

13 / 78

Primera sesin con qtOctave

Arrancamos qtOctave...

Distintas secciones

1
2
3
4

Consola de Octave: usando Octave como una calculadora


Edicin de matrices: para amantes del point and click
Editor de cheros de Octave
Lista de variables,

Directorio actual

Otras utilidades:

Acceso a la ayuda de Octave

Entorno mejorado para la representacin de grcos (Easy Plot)


...

1 http://www.gnu.org/software/octave/doc/interpreter/index.html
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

13 / 78

Primera sesin con qtOctave

Arrancamos qtOctave...

Distintas secciones

1
2
3
4

Consola de Octave: usando Octave como una calculadora


Edicin de matrices: para amantes del point and click
Editor de cheros de Octave
Lista de variables,

Directorio actual

Otras utilidades:

Acceso a la ayuda de Octave

Entorno mejorado para la representacin de grcos (Easy Plot)


...

1 http://www.gnu.org/software/octave/doc/interpreter/index.html
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

13 / 78

Octave como una calculadora (I)

Operadores numricos habituales:

+, -, *, /, ^

Parntesis para modicar la preferencia

El resultado se almacena en la variable

Re-editar rdenes:

, ,

(Maysculas

ans
+) ,

>> 1+3*1.5
ans = 5.5000
>> (2+3) ^10
ans = 9765625
>> ans /5^7
ans = 125

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

14 / 78

Octave como una calculadora (II)


Estilo Matlab...

Comillas simples para introducir una cadena de texto

Porcentaje para comentarios

Tres puntos para continuacin de lnea

Punto y coma para un retorno de carro sin salida

>> ' Esto es una cadena de texto '


ans = Esto es una cadena de texto
>> 20000000 + 3100020500 +...
> 13
ans = 3.1200 e +09
>> 2+2; % No se muestra el resultado

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

15 / 78

Octave como una calculadora (II)

Estilo Octave (no compatible!)...

Comillas dobles para introducir una cadena de texto

Almohadilla (#) para comentarios

Barra invertida (\) para continuacin de lnea

Sabor a otros lenguajes de scripting: perl, python...

>> `` Esto es una cadena de texto ' '


ans = Esto es una cadena de texto
>> 20000000 + 3100020500 +\
> 13
ans = 3.1200 e +09
>> 2+2; # No se muestra el resultado

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

16 / 78

Ms madera...

>> 1/7
% Aritmetica punto fijo
ans = 0.14286
>> format long % Mostrar doble precisi ' on
>> 1/7
ans = 0.142857142857143
>> format
% O bien ' format short '
>> sin ( pi )
% sen ( pi ) = 0 ?
ans = 1.2246 e -16
>> eps
% El " cero " de la maquina
ans = 2.2204 e -16
>> x =1+2* i; y =2+3* i; % Asignacion , complejos
>> x*y
ans = -4 + 7i
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

17 / 78

Variables
rdenes:

who:

listado de variables

whos:

listado detallado

clear x y ...:
clear all:

borrar variables

x, y,...

borrarlas todas

help orden:

informacin sobre una orden de octave

save fichero x y ...2


load fichero x y ...

load fichero

Variables reservadas:

ans, eps, inf, nan, pi, i, j, nargin, nargout, realmin,

realmax, bitmax, varargin, varargout

2 Octave puede grabar en numerosos formatos. Vase la ayuda


J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

18 / 78

Ejercicios

1 Denir las variables:


x = e 1

y =

1
+ x+
2
z = x +y
t = log(x + y + z )
1

2 Almacenarlas en un chero llamado variables.dat


3 Borrar todas las variables y volverlas a cargar desde el chero
Para subir nota: Grabar en distintos formatos de chero, por
ejemplo, hdf5

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

19 / 78

Seccin 2. Matrices y lgebra matricial

1 Toma de contacto con Octave


Introduccin a Octave
Primeros pasos con qtOctave

2 Matrices y lgebra matricial


3 Representacin de grcos
Grcos 2D
Grcos en 3D

4 Programacin con Octave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

20 / 78

Secuencias

Son argumentos dedicados a contar.

Uso:

contador en bucles
denir rangos de valores
crear vectores la.

Ejemplo:

>> 1:5
ans =
1 2 3 4 5
>> 0:2:10
ans =
0 2 4 6 8 10
>> 0: -3: -10
ans =
J. Rafael Rodrguez
0 -3Galvn
-6 (OSLUCA)
-9

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

21 / 78

Nuestro primer script desde qtOctave

Editar y grabar en disco un chero llamado tablavalores.m con


el siguiente contenido:

x = -1:0.1:1;
y =1./(1+ x .* x);

1
2

Los operadores

.*

./

multiplican y dividen elemento a

elemento.

1
2
3
4
5

En la consola, ejecutar el script y pedir los valores de x e y

>> tablavalores
>> x
(... valores de x ...)
>> y
(... valores de y ...)

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

22 / 78

Tipos numricos

Por omisin, Octave (al igual que Matlab) emplea un nico tipo
numrico.

(arrays n-dimensionales de)

reales de doble precisin

Cualquier otro tipo tendr que asignarse explcitamente:

int8, int16, int32, int64


uint8, uint16, uint32, uint64
single, double

Ejemplo:

i=int8(32)

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

23 / 78

Para escribir matrices


Notacin:

Se utilizan corchetes
El espacio en blanco o la coma separan columnas en una la
El retorno de carro o el punto y coma separan las

Ejemplo

>> A =[1 ,2; 3 ,4]


A =
1
2
3
4
Ejercicio: Escribir de dos formas distintas la matriz:


M

J. Rafael Rodrguez Galvn (OSLUCA)

11

12

13

21

22

23

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

24 / 78

Subndices

Los arrays son indexables del modo usual

>> M (1 ,2)
ans = 12
>> M( end , end )
ans = 23

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

25 / 78

El lenguaje de Matlab/Octave es muuuy exible

>> a = pi
a = 3.1416
>> a (1)
ans = 3.1416
>> a (1 ,1)
ans = 3.1416
>> a (1 ,1 ,1)
ans = 3.1416

Lo anterior devolvera un error en cualquier otro lenguaje de


programacin.

Esto es bueno o es malo?

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

26 / 78

Por lo menos hay Boundary Checking

>> a= rand (3 ,3)


a =
0.583220
0.336715
0.060404

0.285967
0.530313
0.999098

0.010804
0.860391
0.501339

>> a (3 ,4)
error : invalid column index = 4

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

27 / 78

Pero no para la asignacin!

>> nuevo (4) =1


nuevo =
0

>> nuevo (4 ,3) =2


nuevo =
0
0
0
0

0
0
0
0

0
0
0
2

J. Rafael Rodrguez Galvn (OSLUCA)

1
0
0
0

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

28 / 78

Submatrices

Supongamos que de la matriz M queremos extraer una matriz S


formada por las 3 ltimas las y columnas:

J. Rafael Rodrguez Galvn (OSLUCA)

11

12

13

14

15

21

22

23

24

25

31

32

33

34

35

41

42

43

44

45

51

52

53

54

55

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

29 / 78

Submatrices
Los subndices se seleccionan mediante secuencias. Si

i de 3 a 5
j de 3 a 5

>> S = M (3:5 ,3:5)


33
34
35
43
44
45
53
54
55
Si deseamos tos los elementos de una la o columna, podemos
abreviar usando ':'. Por ejemplo:

>> S = M (3:5 ,:)


31
32
33
34
41
42
43
44
51
52
53
54
J. Rafael Rodrguez Galvn (OSLUCA)

35
45
55

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

30 / 78

Submatrices

Ejercicio: La orden

pascal(N)

devuelve una matriz cuadrada de

orden N formada a partir del respectivo tringulo de Pascal.

Calcular la matriz de Pascal P de orden 6.

Extraer la matriz T formada por:

Las las 1 a 3 y...


Las columnas 2 y 5

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

31 / 78

Submatrices

Solucin: La matriz formada por las

las 1 a 3 y...

columnas 2 y 5

se obtiene de la siguiente forma:

>> P = pascal (6)


>> T = P (1:3 ,[2 ,5]) ;

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

32 / 78

Submatrices

Ejercicio: Ahora queremos extraer la matriz formada por las

columnas 1, 3 y 5.

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

33 / 78

Submatrices

Ejercicio: Ahora queremos extraer la matriz formada por las

columnas 1, 3 y 5.
Solucin: La matriz formada por las columnas 1, 3 y 5 es...

>> P (: ,1:2:5)

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

34 / 78

Operadores

+ , - , * , / , ^
escalares: .* , ./ , .^
lgicos:
&, | , !
de comparacin: < , > , == , >= , <= , !=
matriciales o de conjuntos:
&& , ||

Operadores matriciales:
Operadores
Operadores
Operadores
Operadores

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

35 / 78

Diferencias entre & y &&

>> a =[1 ,2;0 ,1];


>> b =[1 ,0;0 ,1];
>> a&b
ans =
1
0

0
1

>> a && b
ans = 0
&& se utiliza para las sentencias condicionales.
&& es un operador de cortocircuito
Ejercicio: Cundo es A && A verdadero? La

false && 1/0

orden

devuelve un error (divisin por cero)?

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

36 / 78

Operadores II

Operadores matriciales y escalares pueden confundirse fcilmente:

>> a= rand (3 ,3) ; b= rand (3 ,3) ;


>> a*b
ans =
1.0297
0.9105
0.3293
0.9663
0.8267
0.4211
0.5355
0.4318
0.3279
>> a .* b
ans =
0.1824
0.3253
0.0563
0.5500
0.6003
0.1897
0.0458
0.0017
0.1822

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

37 / 78

Cul es la solucin correcta?

>> a =[1 ,2 ,3;4 ,5 ,6;7 ,8 ,9];


>> a .^ pi
ans =
1.0000
8.8250
31.5443
77.8802 156.9925 278.3776
451.8079 687.2913 995.0416
>> a^ pi
ans =
1.0 e +03 *
0.6943 -0.0004 i 0.8540 -0.0001 i 1.0136+0.0002 i
1.5743 -0.0000 i 1.9344 -0.0000 i 2.2946+0.0000 i
2.4543+0.0003 i 3.0149+0.0001 i 3.5756 -0.0002 i

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

38 / 78

lgebra

Con estas funciones se puede crear casi cualquier matriz


eye: Matriz de ceros con unos en la diagonal
linspace: Vector de elementos equiespaciados
logspace: Vector de elementos espaciados exponencialmente
ones: Matriz de unos
diag: Matriz con la diagonal que decidamos
zeros: Matriz de ceros
rand: Matriz de nmeros pseudoaleatorios.
meshgrid: Matrices equiespaciadas de dos dimensiones

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

39 / 78

lgebra

Manipulacin de matrices
reshape: Cambia la forma de la matriz conservando el nmero de
elementos
transpose: Traspuesta. Equivale a .'
ctranspose: Matriz conjugada. Equivale a '
rot90: Gira la matriz 90 grados en sentido antihorario.
Tamao de una matriz
size Devuelve el nmero de las y columnas
length Devuelve el nmero de elementos de un vector

3 En realidad,

length(A)=max(size(A))

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

40 / 78

Resolucin de sistemas lineales

Para resolver sistemas de eucuaciones lineales contamos con un


operador universal:

>> A =[1 ,0;2 ,1]; y =[2;4];


>> x=A\y
x =
2
0

A bajo nivel se usan las (excelentes) bibliotecas ATLAS y


LAPACK

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

41 / 78

Seccin 3. Representacin de grcos

1 Toma de contacto con Octave


Introduccin a Octave
Primeros pasos con qtOctave

2 Matrices y lgebra matricial


3 Representacin de grcos
Grcos 2D
Grcos en 3D

4 Programacin con Octave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

42 / 78

Seccin 3.1
Representacin de grcos: Grcos 2D

1 Toma de contacto con Octave


Introduccin a Octave
Primeros pasos con qtOctave

2 Matrices y lgebra matricial


3 Representacin de grcos
Grcos 2D
Grcos en 3D

4 Programacin con Octave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

43 / 78

Representacin grca

Repesentar datos grcamente en Octave es sencillo e intuitivo

Se utiliza, a bajo nivel, el programa Gnulot , a travs de un

conjunto de funciones compatibles con Matlab,

Estas funciones son pocas porque no hay necesidades avanzadas


(de tipo, por ejemplo, VTK)

4 Tambin es posible utilizar otros sistemas grcos distintos a Gnuplot, por


ejemplo

EasyPlot (entorno grco disponible en qtOctave y que puede activarse


Config), octplot, plplot,...

mediante el men

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

44 / 78

Plot 2D

La manera ms sencilla de representar datos es mediante la funcin


plot
Ejemplo: Representar una curva en el plano a partir de dos series
de datos:

1
2
3

>> x= linspace (0 ,20 ,100) ;


>> y= exp ( -x ./100) .* sin (x);
>> plot (x ,y);

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

45 / 78

Plot 2D (II)
El resultado (similar a)...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

46 / 78

Plot 2D (III)

Los atributos de las grcas se introducen con la ventana activa


Ejemplo:
1
2
3

>> title ( ' Una funcion cualquiera ')


>> xlabel ( ' Tiempo ')
>> ylabel ( ' Amplitud ')

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

47 / 78

Plot IV
El resultado...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

48 / 78

Plot V
Podemos poner varias curvas con distintos estilos:

>> x= linspace (0 ,20 ,50) ;


>> plot (x , exp ( x /10) .* sin (x) ,': ' ,...
x , exp ( x /10) .* cos (x) ,' -^ ');
Aadir una leyenda a posteriori...

>> legend ( ' exp ( x /10) * sin ( x) ',' exp ( x /10) * cos (x) ');
>> replot ; % Volver a pintar la gr ' afica
Y exportar a un chero

print - deps dibujo . eps


En la ayuda de

print

est la lista de dispositivos (-d)

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

49 / 78

Plot 2D (VI)
El resultado...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

50 / 78

Seccin 3.2
Representacin de grcos: Grcos en 3D

1 Toma de contacto con Octave


Introduccin a Octave
Primeros pasos con qtOctave

2 Matrices y lgebra matricial


3 Representacin de grcos
Grcos 2D
Grcos en 3D

4 Programacin con Octave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

51 / 78

Curvas 3D

Las grcas 3D ms sencillas

5 son curvas trazadas mediante la

funcin plot3
Ejemplo: Representar una curva en el espacio a partir de tres
vectores de datos,

>>
>>
>>
>>
>>

1
2
3
4
5

5 Aunque

x, y, z.

t =0:0.1:10* pi ;
x =(1+ sin ( t)) .* cos ( t);
y =(1+ sin ( t)) .* sin ( t);
z=t;
plot3 (x ,y ,z);

plot3 tiene otras posibilidades, por ejemplo


x, y, z son matrices). Vase la ayuda.

representar familias de

curvas (cuando

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

52 / 78

Curvas 3D: El resultado...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

53 / 78

Supercies 3D: Generacin de mallas

[x,y]=meshgrid(xmin:hx:xmax, ymin:hy:ymax)
x e y:
Filas de x: copias del vector xmin:hx:xmax
Columnas de y: vector (ymin:hy:ymax)'

La funcin

genera dos matrices

Ejemplo

>> [x ,y ]= meshgrid (0:2 ,0:1)


x =
0
1
2
0
1
2
y =
0
1
Los

0
1

0
1

(x[i],y[j])

son un mallado de

J. Rafael Rodrguez Galvn (OSLUCA)

[xmin,xmax][ymin,ymax]

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

54 / 78

Dibujo de supercies 3D
La orden

mesh(x,y,z)

representa una supercie 3D, siendo

x, y dos matrices que representan una malla


z otra matriz que representa los valores f (x , y )
Ejemplo: grca de la funcin f (x , y )

= sin(x ) cos (y )

>> [x ,y ]= meshgrid (- pi :0.1: pi , -pi :0.1: pi );


>> z= sin ( x) .* sin (y);
>> mesh (x ,y ,z);
Podemos cambiar el punto de vista con la funcin

a
e

view(a,e), donde

es el azimut (ngulo de rotacin en el plano xy)


es la elevacin vertical

>> view (30 ,60) ;


>> colorbar ( ' East '); % Pintar una barra vertical
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

55 / 78

Supercies 3D: El resultado...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

56 / 78

Curvas de nivel

La orden

x, y

contour(x,y,z)

representa curvas de nivel

tienen el mismo signicado que en la orden

Acepta un cuarto parmetro,

La variante

contourf

mesh

(nmero de curvas)

dibuja un degradado de colores

>> [x ,y ]= meshgrid (- pi :0.1: pi , -pi :0.1: pi );


>> z= sin ( x) .* sin (y);
>> contourf (x ,y ,z);

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

57 / 78

Curvas de nivel: El resultado...

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

58 / 78

Mallas estructuradas 3D con VTK


1 Creamos un array 3D y lo grabamos en formato
1
2
3

nx = ny = nz =4; % Por ejemplo , 4 ptos en cada eje


A= rand (nx ,ny , nz ); % array aleatorio nx * ny * nz
save - hdf5 " malla_estruc . h5 " A;
2 Convertimos el chero

hdf5

hdf5

en formato

vtk

$ h5tovtk -d /A/ value malla_estruc . h5

Se ha usado el programa

h5tovtk

(en Ubuntu, paquete h5utils).

La opcin  -d indica la ruta hacia el dataset, dentro del chero


(sta se puede localizar con el programa

h5dump

h5ls -r)

3 Visualizamos el chero resultante (malla_estruc.vtk) con

mayavi2

o con

paraview

J. Rafael Rodrguez Galvn (OSLUCA)

(ltro  Treshold)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

59 / 78

Resultado (generado con paraview)

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

60 / 78

Seccin 4. Programacin con Octave

1 Toma de contacto con Octave


Introduccin a Octave
Primeros pasos con qtOctave

2 Matrices y lgebra matricial


3 Representacin de grcos
Grcos 2D
Grcos en 3D

4 Programacin con Octave

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

61 / 78

Control de ujo

No hay diferencias con otros lenguajes de programacin


interpretados

En estos lenguajes un bucle es en realidad un iterador

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

62 / 78

Condicionales

Este es un ejemplo del uso de la sentencia if:

if saludo
disp ( ' hola ')
else
disp ( 'no te saludo ')
end

Cul es la salida si saludo=1?

En Octave, podemos usar


ocurrir con

endif (no
endfor, endfunction

J. Rafael Rodrguez Galvn (OSLUCA)

compatible Matlab!). Igual

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

63 / 78

Bucles
Ejemplo del uso de la sentencia for:

function primetest (n)


printf ( ' Numeros primos de 1 a %i\ n ',n)
for i =1: n
if isprime (i)
disp ( i)
endif
endfor
endfunction
Ejercicio:

Programar la funcin en el chero  primetest.m

Cul es la salida de esta subrutina si n=20?

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

64 / 78

Bucles iteradores

Recordad que secuencia == vector

>> for i =[1 ,3 ,2 ,4 ,3 ,4 ,5]


> disp ( i)
> end
1
3
2
4
3
4
5

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

65 / 78

Otras sentencias

while: Bucle controlado por condicin lgica


case: Control de casos cerrados
try: Sentencia de control para probar errores
break: Permite abandonar directamente el interior de
un bucle
continue: Se utiliza para saltar al nal de la actual
iteracin de un bucle
return: Devuelve el control al programa principal

Ejercicio Realizar distintos ejemplos con las sentencias


anteriores

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

66 / 78

Las funciones con algo ms de profundidad


Varios valores devueltos

function [m ,M] = minmax ( valores )


% Esta funci ' on toma como par ' ametro un vector y
% devuelve sus valores m ' inimo y m ' aximo
m = min ( valores );
M = max ( valores );
endfunction
help minmax
lista = 1./(1:10) ;
m = minmax ( lista );
Observaciones

Recordar que

endfunction

no es compatible con Matlab

Si la funcin est en un chero independiente, no es necesario

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

67 / 78

Funciones annimas.
Denicin

En Matlab, se utilza un tipo especial de funciones, (Function

Handles) para funciones sin necesidad de un archivo adicional6


Para ello, se utiliza un nombre especial:

>> testth = @(x ,y) exp ( -( x .^2+ y .^2) )


>> testfh (1 , i)
ans = 1
Utilidad: estas funciones pueden pasarse como argumento para otra funcin

>> f = @(x) x ^2;


>> integracion_numerica (f ,0 ,1) ;
6 Matlab no permite la denicin de funciones de forma interactiva (salvo

inline).

Octave s lo permite

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

68 / 78

Problemas arreglados por Octave

Declaracin de funciones directamente en consola:

>> function y= foo (x)


> y =3* x
> endfunction
>> foo (4)
y = 12
ans = 12

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

69 / 78

Problemas arreglados por Octave


Varias funciones en un mismo archivo.

2
3
4
5
6

2
3

biblioteca.m

function y= cuadrado (x)


y=x ^2;
end
function y= raiz (x)
y= sqrt (x);
end

Denimos el chero

Podemos acceder a las dos funciones:

>> source ( ' biblioteca .m ')


>> cuadrado ( raiz (2) )
ans = 2.0000

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

70 / 78

Problemas arreglados por Octave

Ejecucin de funciones compuestas

>> a= rand (3 ,3) (1 ,2)


a = 0.14272
Permite expresiones mucho ms compactas.

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

71 / 78

La biblioteca de funciones

Integracin numrica (quad, quadl, quad2dg...)

Interpolacin (interp1, interp2, polyt, t,...)

Estadstica descriptiva (mean, std, median,...)

Ejercicio: Localiza funciones de tu inters y prubalas!

Indicacin:

Echa un vistazo a la ayuda de Octave (HTML)


Utiliza la funcin

lookfor

(busca funciones relacionadas con

una palabra clave). Por ejemplo,

J. Rafael Rodrguez Galvn (OSLUCA)

lookfor fourier.

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

72 / 78

Toolkits en Octave

Tookits

ociales: Octave forge http://octave.sourceforge.net

Mirar en la web la lista de

toolkits

Muchos otros.

MPITB (Toolkit de Paralelizacin con MPI,


desarrollado por Javier F. Baldomero, Universidad de
Granada)7

Octaviz (VTK en Octave)


Octplot, etc

Problema: no hay garantas de compatibilidad con

Toolkits

de

Matlab

Independencia respecto a Octave y sus lneas estratgicas

7 http://atc.ugr.es/javier-bin/mpitb
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

73 / 78

Extensiones dinmicas de Octave


Fichero

MiFuncion.cpp:

# include < oct .h > // Acceso al codigo de Octave !


DEFUN_DLD ( MiFuncion , args , nargout , " Descripcion " )
{
// ... Codigo C ++ ...
return octave_value ()
}
Compilacin (con

mkoctfile,

un envoltorio del compilador C++)

$ mkoctfile MiFuncion . cpp


Obtenemos el chero

MiFuncion.oct,

que usaremos desde octave:

>> MiFuncion
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

74 / 78

Extensiones dinmicas de Octave: Hola Mundo!


Fichero

holamundo.cpp

# include < octave / oct .h >


DEFUN_DLD ( holamundo , args , nargs , `` Programa hola
mundo '')
{
std :: cout << `` Hola Mundo ! '' << std :: endl ;
return octave_value ()
}
Lo compilamos ($

mkoctfile holamundo.cpp)

y lo usamos desde

Octave:

>> holamundo
`` Hola Mundo ! ''
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

75 / 78

Extensiones dinmicas de Octave: f (x )


Fichero

= x2

xcuadrado.cpp:

# include < octave / oct .h >


DEFUN_DLD ( xcuadrado , args , , \
" Calcula el cuadrado de un real , x ' ')
{
if ( args . length () != 1) {
std :: cerr << " ERROR : Se necesita tomar un
valor " << std :: endl ;
return octave_value ()
}
const double x = args (0) . double_value () ;
octave_value y = x* x;
return y;
}
J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

76 / 78

Creacin de mdulos dinmicos C/C++ con SWIG

Qu es SWIG? Potente interfaz para generar envolturas

(wrappers ) que permiten acceder a funciones (o clases) C/C++


desde Octave, Python, Java, Perl,...

Cmo usar SWIG?

Tenemos varias funciones (o clases) C/C++ en un chero

Escribimos un chero de directivas  ejemplo.i, donde

A partir de l, SWIG genera un chero C/C++

Compilamos  ejemplo_wrap.cpp

 ejemplo.cpp

indicamos a qu funciones C/C++ deseamos acceder

 ejemplo_wrap.cpp

mkoctfile),

+  ejemplo.cpp

(mediante

obteniendo  ejemplo.oct

Desde Octave, ya podemos utilizar el mdulo o toolkit

 ejemplo

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

77 / 78

Bibliografa

Introduccin informal a Matlab y Octave:


http://iimyo.forja.rediris.es/

A. Quarteroni, F. Salieri Clculo cientco con Matlab y Octave.


Springer 2006.

Documentacin ocial:
http://www.gnu.org/software/octave/docs.html

Documentacin de Octave-Forge:
http://octave.sourceforge.net/docs.html

Incluye http://octave.sourceforge.net/coda/coda.pdf, manual


para extensiones dinmicas en C++.

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

i-MATH, Santiago 2010

78 / 78

También podría gustarte