82

Modulo Octave

Embed Size (px)

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)

II 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 SMB, 2009 1 / 79

Page 2: Modulo Octave

(c) Guillem Borrell, Rafael Rodríguez Galván. 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 SMB, 2009 2 / 79

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 SMB, 2009 3 / 79

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 SMB, 2009 4 / 79

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 SMB, 2009 5 / 79

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 SMB, 2009 6 / 79

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 SMB, 2009 7 / 79

Page 8: Modulo Octave

Lenguajes interpretados en cálculo cientí�co

• Lenguajes interpretados:• Reducción del ciclo de desarrollo (relación esfuerzo/resultado)• Polivalencia y la disposición de herramientas adicionales• Facilidades para abordar problemas cientí�cos complejos

• 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 SMB, 2009 8 / 79

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 SMB, 2009 9 / 79

Page 10: Modulo Octave

qtOctave

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

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 SMB, 2009 11 / 79

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 SMB, 2009 12 / 79

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 SMB, 2009 13 / 79

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 SMB, 2009 13 / 79

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 SMB, 2009 13 / 79

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 SMB, 2009 14 / 79

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 SMB, 2009 15 / 79

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 SMB, 2009 16 / 79

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 SMB, 2009 17 / 79

Page 20: Modulo Octave

Variables

Órdenes:

• who: listado de variables

• whos: listado detallado

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

• clear all: Borrarlas todas

• 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 graba en numerosos formatos. Véase la ayudaJ. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH SMB, 2009 18 / 79

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 SMB, 2009 19 / 79

Page 22: Modulo Octave

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

Page 23: 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 SMB, 2009 21 / 79

Page 24: Modulo Octave

Secuencias

• Son argumentos dedicados a contar.

• Uso: contador en bucles, intervalos.

• Son un atajo para 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 -9

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

Page 25: 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 SMB, 2009 23 / 79

Page 26: Modulo Octave

Un único tipo numérico

Por omisión, Octave (al igual que Matlab) emplea un único tiponumérico. Cualquier otro tipo tendrá que asignarse explícitamente

Arrays n-dimensionales de reales de

doble precisión

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

Page 27: Modulo Octave

Para escribir matrices

Notación:

• El espacio en blanco o la coma separan elementos de la misma�la

• El retorno de carro o el punto y coma separan �las

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 SMB, 2009 25 / 79

Page 28: Modulo Octave

Subíndices

Los arrays son indexables del modo usual

1 >> M(1,1)

2 ans = 11

3 >> M(end ,end)

4 ans = 23

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

Page 29: 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

• Esto 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 SMB, 2009 27 / 79

Page 30: 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 SMB, 2009 28 / 79

Page 31: 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 SMB, 2009 29 / 79

Page 32: 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 SMB, 2009 30 / 79

Page 33: 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 SMB, 2009 31 / 79

Page 34: 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 SMB, 2009 32 / 79

Page 35: 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 SMB, 2009 33 / 79

Page 36: 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 SMB, 2009 34 / 79

Page 37: 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 SMB, 2009 35 / 79

Page 38: Modulo Octave

Operadores

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

Operadores escalares: .* , ./ , .^

Operadores lógicos: &, | , !

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

Operadores de conjuntos: && , ||

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

Page 39: 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.

• Ejercicio: ¾Es a && a verdadero?

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

Page 40: 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 SMB, 2009 38 / 79

Page 41: 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 SMB, 2009 39 / 79

Page 42: 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 SMB, 2009 40 / 79

Page 43: 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 SMB, 2009 41 / 79

Page 44: 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 SMB, 2009 42 / 79

Page 45: 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 SMB, 2009 43 / 79

Page 46: 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 SMB, 2009 44 / 79

Page 47: 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 SMB, 2009 45 / 79

Page 48: 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 SMB, 2009 46 / 79

Page 49: 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 SMB, 2009 47 / 79

Page 50: 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 SMB, 2009 48 / 79

Page 51: Modulo Octave

Plot IV

El resultado...

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

Page 52: 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 SMB, 2009 50 / 79

Page 53: Modulo Octave

Plot 2D (VI)

El resultado...

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

Page 54: 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 SMB, 2009 52 / 79

Page 55: Modulo Octave

Curvas 3D

Las grá�cas 3D más sencillas son curvas trazadas mediante la funciónplot3

Ejemplo: Representar una curva en el espacio a partir de tresseries de datos:

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

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

Page 56: Modulo Octave

Curvas 3D: El resultado...

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

Page 57: 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 SMB, 2009 55 / 79

Page 58: 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 SMB, 2009 56 / 79

Page 59: Modulo Octave

Super�cies 3D: El resultado...

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

Page 60: 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 SMB, 2009 58 / 79

Page 61: Modulo Octave

Curvas de nivel: El resultado...

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

Page 62: Modulo Octave

Mallas estructuradas con VTK

De�nimos una función write_vtk_sg(filename,x,y,z,f):

• Imprime en un �chero vtk los valores de una función que tomavalores sobre los puntos de una malla estructurada 3D

• Parámetros:• x,y,z: vectores que de�nen la malla• f: array de valores f(x,y,z) sobre la malla

• Observación Para de�nir f, puede ser útil usar la funciónreshape(data,Nx,Ny,Nz)

Código de la función....

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

Page 63: Modulo Octave

1 function write_vtk_sg(filename ,x,y,z,f)

2 f = fopen (filename ,"w");

3 fprintf(f,"# vtk DataFile Version 2.0");

4 fprintf(f,"\nSample rectilinear grid");

5 fprintf(f,"\nASCII\nDATASET RECTILINEAR_GRID");

6 fprintf(f,"\nDIMENSIONS %i %i %i" ,...

7 length(x),length(y),length(z));

8 fprintf(f,"\nX_COORDINATES %i float\n",length(x));

9 fprintf(f," %f ",x);

10 fprintf(f,"\nY_COORDINATES %i float\n",length(y));

11 fprintf(f," %f ",y);

12 fprintf(f,"\nZ_COORDINATES %i float\n",length(z));

13 fprintf(f," %f ",z);

14 fprintf(f,"\nPOINT_DATA %i",length(x)*length(y)*

length(z));

15 fprintf(f,"\nSCALARS scalars float\nLOOKUP_TABLE

default\n");

16 fprintf(f," %f ", f); fclose(f);

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

Page 64: Modulo Octave

Generado datos sobre una malla VTK

1 Nx=2;Ny=2;Nz=2;

2 x=1:Nx; y=1:Ny; z=1:Nz;

3

4 Ndata = Nx*Ny*Nz;

5 data =1: Ndata;

6

7 reshape(data ,Nx,Ny,Nz);

8 write_vtk_sg("datos.vtk",x,y,z,data);

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

Page 65: Modulo Octave

Resultado (generado con paraview)

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

Page 66: 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 SMB, 2009 63 / 79

Page 67: 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 SMB, 2009 64 / 79

Page 68: 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 SMB, 2009 65 / 79

Page 69: 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 SMB, 2009 66 / 79

Page 70: 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 SMB, 2009 67 / 79

Page 71: 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 SMB, 2009 68 / 79

Page 72: 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 SMB, 2009 69 / 79

Page 73: 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 adicional5

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

5Matlab 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 SMB, 2009 70 / 79

Page 74: 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 SMB, 2009 71 / 79

Page 75: 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 SMB, 2009 72 / 79

Page 76: 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 SMB, 2009 73 / 79

Page 77: 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 SMB, 2009 74 / 79

Page 78: 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)6

• 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

6http://atc.ugr.es/javier-bin/mpitbJ. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH SMB, 2009 75 / 79

Page 79: 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 SMB, 2009 76 / 79

Page 80: 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 SMB, 2009 77 / 79

Page 81: 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 y = x*x;

12 return y;

13 }

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

Page 82: 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 SMB, 2009 79 / 79