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...


SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 5 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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

fcil migracin desde Matlab hereda puntos fuertes

inconvenientes
freno a la innovacin propia hereda puntos dbiles

Dnde se pierde la compatibilidad?

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


SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 7 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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,...


SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 8 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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
1

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
1

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
1

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 listado detallado borrar variables

whos:

clear x y ...: clear all: help orden:

x, y,...

borrarlas todas informacin sobre una orden de octave

save fichero x y ...2 load fichero x y ...


Variables reservadas:

load fichero

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

realmax, bitmax, varargin, varargout


SMB: 2. Clculo numrico con Octave

2 Octave puede grabar en numerosos formatos. Vase la ayuda


J. Rafael Rodrguez Galvn (OSLUCA) 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 )

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:


Ejemplo:

contador en bucles denir rangos de valores crear vectores la.

>> 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 Galvn (OSLUCA) 0 -3 -6 -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:

1 2

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



Los operadores elemento. En la consola, ejecutar el script y pedir los valores de x e y

.*

./

multiplican y dividen elemento a

1 2 3 4 5

>> tablavalores >> x (... valores de x ...) >> y (... valores de y ...)
SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 22 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

Tipos numricos

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

reales de doble precisin

Cualquier otro tipo tendr que asignarse explcitamente:

(arrays n-dimensionales de)

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:

11 21

12 22

13 23
i-MATH, Santiago 2010 24 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

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 0 0 1

>> nuevo (4 ,3) =2 nuevo = 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0

J. Rafael Rodrguez Galvn (OSLUCA)

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:

11 21 31 41 51

12 22 32 42 52

13 23 33 43 53

14 24 34 44 54

15 25 35 45 55

J. Rafael Rodrguez Galvn (OSLUCA)

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
i-MATH, Santiago 2010 30 / 78

SMB: 2. Clculo numrico con Octave

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

Operadores matriciales: Operadores Operadores Operadores Operadores

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

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 >> a && b ans = 0
&& se utiliza para las sentencias condicionales. && es un operador de cortocircuito Ejercicio: Cundo es A && A verdadero? La

0 1

orden

false && 1/0

devuelve un error (divisin por cero)?


SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 36 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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))
SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 40 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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 mediante el men

EasyPlot (entorno grco disponible en qtOctave y que puede activarse Config), octplot, plplot,...
SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 44 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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)


SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 49 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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 funcin plot3

5 son curvas trazadas mediante la

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

x, y, z.

1 2 3 4 5

>> >> >> >> >>

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

5 Aunque

curvas (cuando

plot3 tiene otras posibilidades, por ejemplo x, y, z son matrices). Vase la ayuda.
SMB: 2. Clculo numrico con Octave

representar familias de
i-MATH, Santiago 2010 52 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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


La funcin

genera dos matrices

[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)'
>> [x ,y ]= meshgrid (0:2 ,0:1) x = 0 1 2 0 1 2

Ejemplo

y = 0 1
Los

0 1

0 1
son un mallado de

(x[i],y[j])

[xmin,xmax][ymin,ymax]
i-MATH, Santiago 2010 54 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

Dibujo de supercies 3D
La orden

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 )

mesh(x,y,z)

representa una supercie 3D, siendo

= 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 y

contour(x,y,z)

representa curvas de nivel

x, y

tienen el mismo signicado que en la orden

mesh

Acepta un cuarto parmetro, La variante

(nmero de curvas)

contourf

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

hdf5

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

en formato

vtk

$ h5tovtk -d /A/ value malla_estruc . h5



La opcin  -d indica la ruta hacia el dataset, dentro del chero (sta se puede localizar con el programa Se ha usado el programa

h5tovtk

(en Ubuntu, paquete h5utils).

h5dump

h5ls -r)

3 Visualizamos el chero resultante (malla_estruc.vtk) con

mayavi2

o con

paraview

(ltro  Treshold)
i-MATH, Santiago 2010 59 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

SMB: 2. Clculo numrico con Octave

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

compatible Matlab!). Igual

J. Rafael Rodrguez Galvn (OSLUCA)

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


SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 67 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

Funciones annimas.
Denicin

Handles) para funciones sin necesidad de un archivo adicional6


Para ello, se utiliza un nombre especial:

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

>> 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) ;


inline).
6 Matlab no permite la denicin de funciones de forma interactiva (salvo
Octave s lo permite
SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 68 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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.

1 2 3 4 5 6

Denimos el chero

biblioteca.m

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

Podemos acceder a las dos funciones:

1 2 3

>> source ( ' biblioteca .m ') >> cuadrado ( raiz (2) ) ans = 2.0000
SMB: 2. Clculo numrico con Octave i-MATH, Santiago 2010 70 / 78

J. Rafael Rodrguez Galvn (OSLUCA)

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,

lookfor fourier.

J. Rafael Rodrguez Galvn (OSLUCA)

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 Matlab

Toolkits

de

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 ($ Octave:

mkoctfile holamundo.cpp)

y lo usamos desde

>> 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?

1 2 3 4 5

Tenemos varias funciones (o clases) C/C++ en un chero  ejemplo.cpp Escribimos un chero de directivas  ejemplo.i, donde indicamos a qu funciones C/C++ deseamos acceder A partir de l, SWIG genera un chero C/C++  ejemplo_wrap.cpp Compilamos  ejemplo_wrap.cpp

mkoctfile),

obteniendo  ejemplo.oct

+  ejemplo.cpp

(mediante

 ejemplo

Desde Octave, ya podemos utilizar el mdulo o toolkit

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