80

Modulo Octave

Embed Size (px)

DESCRIPTION

Octave_modulo

Citation preview

Page 1: Modulo Octave

SMB: 2. Cálculo numérico con Octave

J. Rafael Rodríguez Galván

OSLUCA (O�cina de Software Libre de la Universidad de Cádiz)

III Curso intensivo i-MATH de software libre orientado a ciencias eingeniería: Software Matemático Básico (SMB)

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 1 / 78

Page 2: Modulo Octave

(c) Rafael Rodríguez Galván, Guillém Borrell. Se autoriza la utilización de este documento según la licencia GFDL,sin secciones invariantes, texto de portada ni de respaldo.

http://ciencialibre.forja.rediris.es

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 2 / 78

Page 3: Modulo Octave

Sección 1. Toma de contacto con Octave

1 Toma de contacto con OctaveIntroducción a OctavePrimeros pasos con qtOctave

2 Matrices y álgebra matricial

3 Representación de grá�cosGrá�cos 2DGrá�cos en 3D

4 Programación con Octave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 3 / 78

Page 4: Modulo Octave

Sección 1.1Toma de contacto con Octave: Introducción a Octave

1 Toma de contacto con OctaveIntroducción a OctavePrimeros pasos con qtOctave

2 Matrices y álgebra matricial

3 Representación de grá�cosGrá�cos 2DGrá�cos en 3D

4 Programación con Octave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 4 / 78

Page 5: Modulo Octave

Qué es Octave

• Lenguaje interpretado de alto nivel, orientado al cálculo matricial

• Intérprete para este lenguaje• Licencia libre (GPL)

• Concebido en 1988 por John W. Eaton• Amplia comunidad de usuarios (http://www.octave.org)• Código fuente C++

• Potente biblioteca de cálculo matricial (GPL)• Fácilmente extensible en C++

• Disponible para numerosos sistemas y arquitecturas

• Octave no está especializado en cálculo simbólico

• Para ello, existen numerosas herramientas libres como Maxima,Axiom, Pari/GP o Ginac

• Existen muchos otros entornos de cálculo numérico libres:• Scilab, Euler, Freemat, Python/Scipy...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 5 / 78

Page 6: Modulo Octave

Potencialidad de Octave

• Curva de acceso poco empinada• Incluye �de serie�:

• Operaciones matriciales• Resolución de (sistemas de) ecuaciones lineales y no lineales• Cálculo de autovalores y autovectores• Cálculo de raíces de ecuaciones no lineales• Aproximación numérica de funciones y datos (interpolación,FFT, funciones spline,...)

• Cálculo numérico de derivadas e integrales• Resolución numérica de ecuaciones diferenciales• Representación de grá�cas 2D y 3D (a través de Gnuplot)• ...

• Compatibilidad con Matlab...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 6 / 78

Page 7: Modulo Octave

Octave y Matlab

• Alta compatibilidad con el � lenguaje Matlab�• ventajas

• fácil migración desde Matlab• hereda puntos fuertes

• inconvenientes• freno a la innovación propia• hereda puntos débiles

• ¾Dónde se pierde la compatibilidad?• Extensiones al lenguaje Matlab• �Toolkits�

• Filosofía propia: � lenguaje de scripting cientí�co�• Se complementa con otras herramientas libres

• Parte de una �navaja suíza�• Concentrarse en cumplir sus objetivos• Filosofía unix y �losofía software libre

• No se identi�ca con un entorno grá�co concreto

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 7 / 78

Page 8: Modulo Octave

Lenguajes interpretados en cálculo cientí�co

• Lenguajes interpretados:• Reducción del ciclo de desarrollo (relación esfuerzo/resultado)• Polivalencia, acceso a herramientas de alto nivel• Concentrarse en las di�cultades del problema (no en las dellenguaje)

• Lenguajes compilados: Potencia de cálculo• Lenguajes interpretado como lenguajes �pegamento�: lo mejor dedos mundos• 90% del código: lenguaje interpertado• 10% restante (zonas críticas en potencia de calculo): lenguajecompilado

• Para tareas cientí�cas:• Octave

• Python• Lisp, scilab, Ruby,...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 8 / 78

Page 9: Modulo Octave

Sección 1.2Toma de contacto con Octave: Primeros pasos con qtOctave

1 Toma de contacto con OctaveIntroducción a OctavePrimeros pasos con qtOctave

2 Matrices y álgebra matricial

3 Representación de grá�cosGrá�cos 2DGrá�cos en 3D

4 Programación con Octave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 9 / 78

Page 10: Modulo Octave

qtOctave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 10 / 78

Page 11: Modulo Octave

qtOctave

• Entorno grá�co para Octave, desarrollado con librerías QT

• Desarrollador principal: Pedro L. Lucas

• Orígen: Proyecto presentado al I Concurso Uninversitario deSoftware Libre (2007)

• Apoyo de la OSLUCA (Alejandro Álvarez Ayllón).• Dónde conseguirlo:

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

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

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 11 / 78

Page 12: Modulo Octave

Instalación

• Windows: utilizar el instalador disponible

• MacOsX: Compilar el código fuente• GNU/Linux:

• Instalar la versión disponible para tu distribución favorita• O bien descargar �QtOctave portable�• O bien compilar código fuente

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 12 / 78

Page 13: Modulo Octave

Primera sesión con qtOctave

Arrancamos qtOctave...• Distintas secciones

1 Consola de Octave: usando Octave como una calculadora2 Edición de matrices: para amantes del �point and click�3 Editor de �cheros de Octave4 Lista de variables, Directorio actual

• Otras utilidades:• Acceso a la ayuda de Octave 1

• Entorno mejorado para la representación de grá�cos (Easy Plot)• ...

1http://www.gnu.org/software/octave/doc/interpreter/index.html

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 13 / 78

Page 14: Modulo Octave

Primera sesión con qtOctave

Arrancamos qtOctave...• Distintas secciones

1 Consola de Octave: usando Octave como una calculadora2 Edición de matrices: para amantes del �point and click�3 Editor de �cheros de Octave4 Lista de variables, Directorio actual

• Otras utilidades:• Acceso a la ayuda de Octave 1

• Entorno mejorado para la representación de grá�cos (Easy Plot)• ...

1http://www.gnu.org/software/octave/doc/interpreter/index.html

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 13 / 78

Page 15: Modulo Octave

Primera sesión con qtOctave

Arrancamos qtOctave...• Distintas secciones

1 Consola de Octave: usando Octave como una calculadora2 Edición de matrices: para amantes del �point and click�3 Editor de �cheros de Octave4 Lista de variables, Directorio actual

• Otras utilidades:• Acceso a la ayuda de Octave 1

• Entorno mejorado para la representación de grá�cos (Easy Plot)• ...

1http://www.gnu.org/software/octave/doc/interpreter/index.html

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 13 / 78

Page 16: Modulo Octave

Octave como una calculadora (I)

• Operadores numéricos habituales:+, -, *, /, ^

• Paréntesis para modi�car la preferencia

• El resultado se almacena en la variable ans

• Re-editar órdenes: ↑, ↓, (Mayúsculas +) →, ←

1 >> 1+3*1.5

2 ans = 5.5000

3 >> (2+3) ^10

4 ans = 9765625

5 >> ans /5^7

6 ans = 125

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 14 / 78

Page 17: Modulo Octave

Octave como una calculadora (II)

Estilo Matlab...

• Comillas simples para introducir una cadena de texto

• Porcentaje para comentarios

• Tres puntos para continuación de línea

• Punto y coma para un retorno de carro sin salida

1 >> 'Esto es una cadena de texto'

2 ans = Esto es una cadena de texto

3 >> 20000000 + 3100020500 +...

4 > 13

5 ans = 3.1200e+09

6 >> 2+2; % No se muestra el resultado

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 15 / 78

Page 18: Modulo Octave

Octave como una calculadora (II)

Estilo Octave (no compatible!)...

• Comillas dobles para introducir una cadena de texto

• Almohadilla (#) para comentarios

• Barra invertida (\) para continuación de línea

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

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

2 ans = Esto es una cadena de texto

3 >> 20000000 + 3100020500 +\

4 > 13

5 ans = 3.1200e+09

6 >> 2+2; # No se muestra el resultado

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 16 / 78

Page 19: Modulo Octave

Más madera...

1 >> 1/7 % Aritmetica punto fijo

2 ans = 0.14286

3 >> format long % Mostrar doble precisi 'on

4 >> 1/7

5 ans = 0.142857142857143

6 >> format % O bien 'format short '

7 >> sin(pi) % sen(pi) = 0 ?

8 ans = 1.2246e-16

9 >> eps % El "cero" de la maquina

10 ans = 2.2204e-16

11 >> x=1+2*i; y=2+3*i; % Asignacion , complejos

12 >> x*y

13 ans = -4 + 7i

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 17 / 78

Page 20: Modulo Octave

Variables

Órdenes:

• who: listado de variables

• whos: listado detallado

• clear x y ...: borrar variables x, y,...

• clear all: borrarlas todas

• help orden: información 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

2Octave puede grabar en numerosos formatos. Véase la ayudaJ. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 18 / 78

Page 21: Modulo Octave

Ejercicios

1 De�nir las variables:• x = eπ−1

• y =1

1+ 1x+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, porejemplo, hdf5

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 19 / 78

Page 22: Modulo Octave

Sección 2. Matrices y álgebra matricial

1 Toma de contacto con OctaveIntroducción a OctavePrimeros pasos con qtOctave

2 Matrices y álgebra matricial

3 Representación de grá�cosGrá�cos 2DGrá�cos en 3D

4 Programación con Octave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 20 / 78

Page 23: Modulo Octave

Secuencias

• Son argumentos dedicados a contar.

• Uso:

• contador en bucles• de�nir rangos de valores• crear vectores �la.

Ejemplo:

1 >> 1:5

2 ans =

3 1 2 3 4 5

4 >> 0:2:10

5 ans =

6 0 2 4 6 8 10

7 >> 0:-3:-10

8 ans =

9 0 -3 -6 -9J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 21 / 78

Page 24: Modulo Octave

Nuestro primer script desde qtOctave

• Editar y grabar en disco un �chero llamado �tablavalores.m� conel siguiente contenido:

1 x= -1:0.1:1;

2 y=1./(1+x.*x);

• Los operadores .* y ./ multiplican y dividen elemento aelemento.

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

1 >> tablavalores

2 >> x

3 (... valores de x...)

4 >> y

5 (... valores de y...)

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 22 / 78

Page 25: Modulo Octave

Tipos numéricos

• Por omisión, Octave (al igual que Matlab) emplea un único tiponumérico.

(arrays n-dimensionales de)reales de doble precisión

• Cualquier otro tipo tendrá que asignarse explícitamente:

int8, int16, int32, int64uint8, uint16, uint32, uint64

single, double

• Ejemplo: i=int8(32)

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 23 / 78

Page 26: Modulo Octave

Para escribir matrices

Notación:

• 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

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

2 A =

3 1 2

4 3 4

Ejercicio: Escribir de dos formas distintas la matriz:

M =

(11 12 1321 22 23

)J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 24 / 78

Page 27: Modulo Octave

Subíndices

Los arrays son indexables del modo usual

1 >> M(1,2)

2 ans = 12

3 >> M(end ,end)

4 ans = 23

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 25 / 78

Page 28: Modulo Octave

El lenguaje de Matlab/Octave es muuuy �exible

1 >> a = pi

2 a = 3.1416

3 >> a(1)

4 ans = 3.1416

5 >> a(1,1)

6 ans = 3.1416

7 >> a(1,1,1)

8 ans = 3.1416

• Lo anterior devolvería un error en cualquier otro lenguaje deprogramación.

• ¾Esto es bueno o es malo?

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 26 / 78

Page 29: Modulo Octave

Por lo menos hay Boundary Checking

1 >> a=rand (3,3)

2 a =

3

4 0.583220 0.285967 0.010804

5 0.336715 0.530313 0.860391

6 0.060404 0.999098 0.501339

7

8 >> a(3,4)

9 error: invalid column index = 4

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 27 / 78

Page 30: Modulo Octave

½Pero no para la asignación!

1 >> nuevo (4)=1

2 nuevo =

3

4 0 0 0 1

5

6 >> nuevo (4,3)=2

7 nuevo =

8

9 0 0 0 1

10 0 0 0 0

11 0 0 0 0

12 0 0 2 0

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 28 / 78

Page 31: Modulo Octave

Submatrices

Supongamos que de la matriz M queremos extraer una matriz Sformada por las 3 últimas �las y columnas:

M =

11 12 13 14 1521 22 23 24 2531 32 33 34 3541 42 43 44 4551 52 53 54 55

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 29 / 78

Page 32: Modulo Octave

Submatrices

Los subíndices se seleccionan mediante secuencias. Si• i de 3 a 5• j de 3 a 5

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

2 33 34 35

3 43 44 45

4 53 54 55

Si deseamos tos los elementos de una �la o columna, podemosabreviar usando ':'. Por ejemplo:

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

2 31 32 33 34 35

3 41 42 43 44 45

4 51 52 53 54 55

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 30 / 78

Page 33: Modulo Octave

Submatrices

Ejercicio: La orden pascal(N) devuelve una matriz cuadrada deorden N formada a partir del respectivo triángulo 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 Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 31 / 78

Page 34: Modulo Octave

Submatrices

Solución: La matriz formada por las

• �las 1 a 3 y...

• columnas 2 y 5

se obtiene de la siguiente forma:

1 >> P = pascal (6)

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

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 32 / 78

Page 35: Modulo Octave

Submatrices

Ejercicio: Ahora queremos extraer la matriz formada por lascolumnas 1, 3 y 5.

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 33 / 78

Page 36: Modulo Octave

Submatrices

Ejercicio: Ahora queremos extraer la matriz formada por lascolumnas 1, 3 y 5.

Solución: La matriz formada por las columnas 1, 3 y 5 es...

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

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 34 / 78

Page 37: Modulo Octave

Operadores

Operadores matriciales: + , - , * , / , ^

Operadores escalares: .* , ./ , .^

Operadores lógicos: &, | , !

Operadores de comparación: < , > , == , >= , <= , !=

Operadores matriciales o de conjuntos: && , ||

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 35 / 78

Page 38: Modulo Octave

Diferencias entre & y &&

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

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

3 >> a&b

4 ans =

5

6 1 0

7 0 1

8

9 >> a&&b

10 ans = 0

• && se utiliza para las sentencias condicionales.• && es un �operador de cortocircuito�• Ejercicio: ¾Cuándo es A && A verdadero? La ordenfalse && 1/0 ¾devuelve un error (división por cero)?

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 36 / 78

Page 39: Modulo Octave

Operadores II

Operadores matriciales y escalares pueden confundirse fácilmente:

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

2 >> a*b

3 ans =

4 1.0297 0.9105 0.3293

5 0.9663 0.8267 0.4211

6 0.5355 0.4318 0.3279

7 >> a.*b

8 ans =

9 0.1824 0.3253 0.0563

10 0.5500 0.6003 0.1897

11 0.0458 0.0017 0.1822

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 37 / 78

Page 40: Modulo Octave

¾Cuál es la solución �correcta�?

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

2 >> a.^pi

3 ans =

4 1.0000 8.8250 31.5443

5 77.8802 156.9925 278.3776

6 451.8079 687.2913 995.0416

7 >> a^pi

8 ans =

9 1.0e+03 *

10 0.6943 -0.0004i 0.8540 -0.0001i 1.0136+0.0002i

11 1.5743 -0.0000i 1.9344 -0.0000i 2.2946+0.0000i

12 2.4543+0.0003i 3.0149+0.0001i 3.5756 -0.0002i

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 38 / 78

Page 41: Modulo Octave

Á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 números pseudoaleatorios.

meshgrid: Matrices equiespaciadas de dos dimensiones

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 39 / 78

Page 42: Modulo Octave

Álgebra

Manipulación de matrices

reshape: Cambia la forma de la matriz conservando el número deelementos

transpose: Traspuesta. Equivale a .'

ctranspose: Matriz conjugada. Equivale a '

rot90: Gira la matriz 90 grados en sentido antihorario.

Tamaño de una matriz

size Devuelve el número de �las y columnas

length Devuelve el número de elementos de un vector3

3En realidad, length(A)=max(size(A))J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 40 / 78

Page 43: Modulo Octave

Resolución de sistemas lineales

Para resolver sistemas de eucuaciones lineales contamos con unoperador universal:

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

2 >> x=A\y

3 x =

4 2

5 0

• A bajo nivel se usan las (excelentes) bibliotecas ATLAS yLAPACK

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 41 / 78

Page 44: Modulo Octave

Sección 3. Representación de grá�cos

1 Toma de contacto con OctaveIntroducción a OctavePrimeros pasos con qtOctave

2 Matrices y álgebra matricial

3 Representación de grá�cosGrá�cos 2DGrá�cos en 3D

4 Programación con Octave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 42 / 78

Page 45: Modulo Octave

Sección 3.1Representación de grá�cos: Grá�cos 2D

1 Toma de contacto con OctaveIntroducción a OctavePrimeros pasos con qtOctave

2 Matrices y álgebra matricial

3 Representación de grá�cosGrá�cos 2DGrá�cos en 3D

4 Programación con Octave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 43 / 78

Page 46: Modulo Octave

Representación grá�ca

• Repesentar datos grá�camente en Octave es sencillo e intuitivo

• Se utiliza, a bajo nivel, el programa Gnulot4, a través de unconjunto de funciones compatibles con Matlab,

• Estas funciones son pocas porque no hay necesidades avanzadas(de tipo, por ejemplo, VTK)

4También es posible utilizar otros sistemas grá�cos distintos a Gnuplot, porejemplo EasyPlot (entorno grá�co disponible en qtOctave y que puede activarsemediante el menú Config), octplot, plplot,...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 44 / 78

Page 47: Modulo Octave

Plot 2D

La manera más sencilla de representar datos es mediante la funciónplot

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

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

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

3 >> plot(x,y);

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 45 / 78

Page 48: Modulo Octave

Plot 2D (II)

El resultado (similar a)...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 46 / 78

Page 49: Modulo Octave

Plot 2D (III)

Los atributos de las grá�cas se introducen con la ventana activa

Ejemplo:1 >> title('Una funcion cualquiera ')

2 >> xlabel('Tiempo ')

3 >> ylabel('Amplitud ')

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 47 / 78

Page 50: Modulo Octave

Plot IV

El resultado...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 48 / 78

Page 51: Modulo Octave

Plot V

Podemos poner varias curvas con distintos estilos:

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

2 >> plot (x,exp(x/10).*sin(x),':' ,...

3 x,exp(x/10).*cos(x),'-^');

Añadir una leyenda a posteriori...

1 >> legend('exp(x/10)*sin(x)','exp(x/10)*cos(x)');

2 >> replot; % Volver a pintar la gr'afica

Y exportar a un �chero

1 print -deps dibujo.eps

En la ayuda de print está la lista de dispositivos (-d)

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 49 / 78

Page 52: Modulo Octave

Plot 2D (VI)

El resultado...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 50 / 78

Page 53: Modulo Octave

Sección 3.2Representación de grá�cos: Grá�cos en 3D

1 Toma de contacto con OctaveIntroducción a OctavePrimeros pasos con qtOctave

2 Matrices y álgebra matricial

3 Representación de grá�cosGrá�cos 2DGrá�cos en 3D

4 Programación con Octave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 51 / 78

Page 54: Modulo Octave

Curvas 3D

Las grá�cas 3D más sencillas5 son curvas trazadas mediante lafunción plot3

Ejemplo: Representar una curva en el espacio a partir de tresvectores de datos, x, y, z.

1 >> t=0:0.1:10* pi;

2 >> x=(1+ sin(t)).*cos(t);

3 >> y=(1+ sin(t)).*sin(t);

4 >> z=t;

5 >> plot3(x,y,z);

5Aunque plot3 tiene otras posibilidades, por ejemplo representar familias decurvas (cuando x, y, z son matrices). Véase la ayuda.

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 52 / 78

Page 55: Modulo Octave

Curvas 3D: El resultado...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 53 / 78

Page 56: Modulo Octave

Super�cies 3D: Generación de mallas

La función [x,y]=meshgrid(xmin:hx:xmax, ymin:hy:ymax)

genera dos matrices x e y:• Filas de x: copias del vector xmin:hx:xmax• Columnas de y: vector (ymin:hy:ymax)'

Ejemplo

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

2 x =

3 0 1 2

4 0 1 2

5

6 y =

7 0 0 0

8 1 1 1

Los (x[i],y[j]) son un mallado de [xmin,xmax]×[ymin,ymax]J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 54 / 78

Page 57: Modulo Octave

Dibujo de super�cies 3D

La orden mesh(x,y,z) representa una super�cie 3D, siendo• x, y dos matrices que representan una malla• z otra matriz que representa los valores f (x , y)

Ejemplo: grá�ca de la función f (x , y) = sin(x) ∗ cos(y)

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

2 >> z=sin(x).*sin(y);

3 >> mesh(x,y,z);

Podemos cambiar el punto de vista con la función view(a,e), donde• a es el azimut (ángulo de rotación en el plano xy)• e es la elevación vertical

1 >> view (30 ,60);

2 >> colorbar('East'); % Pintar una barra vertical

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 55 / 78

Page 58: Modulo Octave

Super�cies 3D: El resultado...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 56 / 78

Page 59: Modulo Octave

Curvas de nivel

• La orden contour(x,y,z) representa curvas de nivel

• x, y y z tienen el mismo signi�cado que en la orden mesh

• Acepta un cuarto parámetro, n (número de curvas)

• La variante contourf dibuja un degradado de colores

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

2 >> z=sin(x).*sin(y);

3 >> contourf(x,y,z);

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 57 / 78

Page 60: Modulo Octave

Curvas de nivel: El resultado...

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 58 / 78

Page 61: Modulo Octave

Mallas estructuradas 3D con VTK

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

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

2 A=rand(nx,ny,nz); % array aleatorio nx*ny*nz

3 save -hdf5 "malla_estruc.h5" A;

2 Convertimos el �chero hdf5 en formato vtk

1 $ h5tovtk -d /A/value malla_estruc.h5

• Se ha usado el programa h5tovtk (en Ubuntu, paquete h5utils).• La opción �-d� indica la ruta hacia el �dataset�, dentro del �chero

(ésta se puede localizar con el programa h5dump o h5ls -r)

3 Visualizamos el �chero resultante (malla_estruc.vtk) conmayavi2 o con paraview (�ltro �Treshold�)

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 59 / 78

Page 62: Modulo Octave

Resultado (generado con paraview)

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 60 / 78

Page 63: Modulo Octave

Sección 4. Programación con Octave

1 Toma de contacto con OctaveIntroducción a OctavePrimeros pasos con qtOctave

2 Matrices y álgebra matricial

3 Representación de grá�cosGrá�cos 2DGrá�cos en 3D

4 Programación con Octave

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 61 / 78

Page 64: Modulo Octave

Control de �ujo

• No hay diferencias con otros lenguajes de programacióninterpretados

• En estos lenguajes un bucle es en realidad un iterador

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 62 / 78

Page 65: Modulo Octave

Condicionales

Este es un ejemplo del uso de la sentencia if:

1 if saludo

2 disp('hola')

3 else

4 disp('no te saludo ')

5 end

• ¾Cuál es la salida si saludo=1?

• En Octave, podemos usar endif (no compatible Matlab!). Igualocurrirá con endfor, endfunction

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 63 / 78

Page 66: Modulo Octave

Bucles

Ejemplo del uso de la sentencia for:

1 function primetest(n)

2 printf('Numeros primos de 1 a %i\n',n)

3 for i=1:n

4 if isprime(i)

5 disp(i)

6 endif

7 endfor

8 endfunction

Ejercicio:

• Programar la función en el �chero �primetest.m�

• ¾Cuál es la salida de esta subrutina si n=20?

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 64 / 78

Page 67: Modulo Octave

Bucles iteradores

Recordad que secuencia == vector

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

2 > disp(i)

3 > end

4 1

5 3

6 2

7 4

8 3

9 4

10 5

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 65 / 78

Page 68: Modulo Octave

Otras sentencias

while: Bucle controlado por condición lógicacase: Control de casos cerradostry: Sentencia de control para probar errores

break: Permite abandonar directamente el interior deun bucle

continue: Se utiliza para saltar al �nal de la actualiteración de un bucle

return: Devuelve el control al programa principalEjercicio Realizar distintos ejemplos con las sentenciasanteriores

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 66 / 78

Page 69: Modulo Octave

Las funciones con algo más de profundidad

Varios valores devueltos

1 function [m,M] = minmax(valores)

2 % Esta funci 'on toma como par 'ametro un vector y

3 % devuelve sus valores m'inimo y m'aximo

4 m = min(valores);

5 M = max(valores);

6 endfunction

7

8 help minmax

9 lista = 1./(1:10);

10 m = minmax(lista);

Observaciones

• Recordar que endfunction no es compatible con Matlab• Si la función está en un �chero independiente, no es necesario

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 67 / 78

Page 70: Modulo Octave

Funciones anónimas.

De�nición

• En Matlab, se utilza un tipo especial de funciones, (FunctionHandles) para funciones sin necesidad de un archivo adicional6

• Para ello, se utiliza un �nombre especial�: @

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

2 >> testfh(1,i)

3 ans = 1

Utilidad: estas funciones pueden pasarse como argumento para otra función

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

2 >> integracion_numerica(f,0,1);

6Matlab no permite la de�nición de funciones de forma interactiva (salvoinline). Octave sí lo permite

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 68 / 78

Page 71: Modulo Octave

Problemas arreglados por Octave

Declaración de funciones directamente en consola:

1 >> function y=foo(x)

2 > y=3*x

3 > endfunction

4 >> foo(4)

5 y = 12

6 ans = 12

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 69 / 78

Page 72: Modulo Octave

Problemas arreglados por Octave

Varias funciones en un mismo archivo.• De�nimos el �chero biblioteca.m

1 function y=cuadrado(x)

2 y=x^2;

3 end

4 function y=raiz(x)

5 y=sqrt(x);

6 end

• Podemos acceder a las dos funciones:

1 >> source('biblioteca.m')

2 >> cuadrado(raiz (2))

3 ans = 2.0000

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 70 / 78

Page 73: Modulo Octave

Problemas arreglados por Octave

Ejecución de �funciones compuestas�

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

2 a = 0.14272

Permite expresiones mucho más compactas.

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 71 / 78

Page 74: Modulo Octave

La biblioteca de funciones

• Integración numérica (quad, quadl, quad2dg...)

• Interpolación (interp1, interp2, poly�t, �t,...)

• Estadística descriptiva (mean, std, median,...)

Ejercicio: Localiza funciones de tu interés y pruébalas!• Indicación:

• Echa un vistazo a la ayuda de Octave (HTML)• Utiliza la función lookfor (busca funciones relacionadas conuna palabra clave). Por ejemplo, lookfor fourier.

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 72 / 78

Page 75: Modulo Octave

�Toolkits� en Octave

• Tookits �o�ciales�: Octave forge http://octave.sourceforge.net• Mirar en la web la lista de toolkits

• Muchos otros.• MPITB (Toolkit de Paralelización con MPI,

desarrollado por Javier F. Baldomero, Universidad de

Granada)7

• Octaviz (VTK en Octave)• Octplot, etc

• Problema: no hay garantías de compatibilidad con Toolkits deMatlab• Independencia respecto a Octave y sus líneas estratégicas

7http://atc.ugr.es/javier-bin/mpitbJ. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 73 / 78

Page 76: Modulo Octave

Extensiones dinámicas de OctaveFichero MiFuncion.cpp:

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

2 DEFUN_DLD(MiFuncion , args , nargout , "Descripcion")

3 {

4 // ... Codigo C++ ...

5 return octave_value ()

6 }

Compilación (con mkoctfile, un envoltorio del compilador C++)

1 $ mkoctfile MiFuncion.cpp

Obtenemos el �chero MiFuncion.oct, que usaremos desde octave:

1 >> MiFuncion

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 74 / 78

Page 77: Modulo Octave

Extensiones dinámicas de Octave: Hola Mundo!

Fichero holamundo.cpp

1 #include <octave/oct.h>

2 DEFUN_DLD(holamundo , args , nargs , ``Programa hola

mundo '')

3 {

4 std::cout << ``Hola Mundo!'' << std::endl;

5 return octave_value ()

6 }

Lo compilamos ($ mkoctfile holamundo.cpp) y lo usamos desdeOctave:

1 >> holamundo

2 ``Hola Mundo!''

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 75 / 78

Page 78: Modulo Octave

Extensiones dinámicas de Octave: f (x) = x2

Fichero xcuadrado.cpp:

1 #include <octave/oct.h>

2 DEFUN_DLD(xcuadrado , args , , \

3 "Calcula el cuadrado de un real , x'')

4 {

5 if(args.length () != 1) {

6 std::cerr << "ERROR: Se necesita tomar un

valor" << std::endl;

7 return octave_value ()

8 }

9 const double x = args (0).double_value ();

10 octave_value y = x*x;

11 return y;

12 }

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 76 / 78

Page 79: Modulo Octave

Creación de módulos dinámicos 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,...

• ¾Cómo usar SWIG?

1 Tenemos varias funciones (o clases) C/C++ en un �chero�ejemplo.cpp�

2 Escribimos un �chero de directivas �ejemplo.i�, dondeindicamos a qué funciones C/C++ deseamos acceder

3 A partir de él, SWIG genera un �chero C/C++�ejemplo_wrap.cpp�

4 Compilamos �ejemplo_wrap.cpp� + �ejemplo.cpp� (mediantemkoctfile), obteniendo �ejemplo.oct�

5 Desde Octave, ya podemos utilizar el módulo o toolkit

�ejemplo�

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 77 / 78

Page 80: Modulo Octave

Bibliografía

• Introducción informal a Matlab y Octave:http://iimyo.forja.rediris.es/

• A. Quarteroni, F. Salieri Cálculo cientí�co con Matlab y Octave.Springer 2006.

• Documentación �o�cial�:http://www.gnu.org/software/octave/docs.html

• Documentación de Octave-Forge:http://octave.sourceforge.net/docs.html• Incluye http://octave.sourceforge.net/coda/coda.pdf, manualpara extensiones dinámicas en C++.

J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 78 / 78