octave
DESCRIPTION
programacionTRANSCRIPT
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
(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
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
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
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
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
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
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
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
qtOctave
J. Rafael Rodríguez Galván (OSLUCA) SMB: 2. Cálculo numérico con Octave i-MATH, Santiago 2010 10 / 78
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
½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
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
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
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
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
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
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
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
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
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
¾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
Á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
Á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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
�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
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
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
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
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
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