Download - Modulo Octave
-
SMB: 2. Clculo numrico con Octave
J. Rafael Rodrguez Galvn
OSLUCA (Ocina de Software Libre de la Universidad de Cdiz)
II Curso intensivo i-MATH de software libre orientado a ciencias e
ingeniera: Software Matemtico Bsico (SMB)
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 1 / 79
-
(c) Guillem Borrell, Rafael Rodrguez Galvn. Se autoriza la utilizacin de este documento segn la licencia GFDL,
sin secciones invariantes, texto de portada ni de respaldo.
http://ciencialibre.forja.rediris.es
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 2 / 79
-
Seccin 1. Toma de contacto con Octave
1 Toma de contacto con Octave
Introduccin a Octave
Primeros pasos con qtOctave
2 Matrices y lgebra matricial
3 Representacin de grcos
Grcos 2D
Grcos en 3D
4 Programacin con Octave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 3 / 79
-
Seccin 1.1
Toma de contacto con Octave: Introduccin a Octave
1 Toma de contacto con Octave
Introduccin a Octave
Primeros pasos con qtOctave
2 Matrices y lgebra matricial
3 Representacin de grcos
Grcos 2D
Grcos en 3D
4 Programacin con Octave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 4 / 79
-
Qu es Octave
Lenguaje interpretado de alto nivel, orientado al clculo matricial
Intrprete para este lenguaje
Licencia libre (GPL)
Concebido en 1988 por John W. Eaton
Amplia comunidad de usuarios (http://www.octave.org)
Cdigo fuente C++
Potente biblioteca de clculo matricial (GPL)
Fcilmente extensible en C++
Disponible para numerosos sistemas y arquitecturas
Octave no est especializado en clculo simblico
Para ello, existen numerosas herramientas libres como Maxima,
Axiom, Pari/GP o Ginac
Existen muchos otros entornos de clculo numrico libres:
Scilab, Euler, Freemat, Python/Scipy...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 5 / 79
-
Potencialidad de Octave
Curva de acceso poco empinada
Incluye de serie:
Operaciones matriciales
Resolucin de (sistemas de) ecuaciones lineales y no lineales
Clculo de autovalores y autovectores
Clculo de races de ecuaciones no lineales
Aproximacin numrica de funciones y datos (interpolacin,
FFT, funciones spline,...)
Clculo numrico de derivadas e integrales
Resolucin numrica de ecuaciones diferenciales
Representacin de grcas 2D y 3D (a travs de Gnuplot)
...
Compatibilidad con Matlab...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 6 / 79
-
Octave y Matlab
Alta compatibilidad con el lenguaje Matlab
ventajas
fcil migracin desde Matlab
hereda puntos fuertes
inconvenientes
freno a la innovacin propia
hereda puntos dbiles
Dnde se pierde la compatibilidad?
Extensiones al lenguaje Matlab
Toolkits
Filosofa propia: lenguaje de scripting cientco
Se complementa con otras herramientas libres
Parte de una navaja suza
Concentrarse en cumplir sus objetivos
Filosofa unix y losofa software libre
No se identica con un entorno grco concreto
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 7 / 79
-
Lenguajes interpretados en clculo cientco
Lenguajes interpretados:
Reduccin del ciclo de desarrollo (relacin esfuerzo/resultado)
Polivalencia y la disposicin de herramientas adicionales
Facilidades para abordar problemas cientcos complejos
Lenguajes compilados: Potencia de clculo
Lenguajes interpretado como lenguajes pegamento: lo mejor de
dos mundos
90% del cdigo: lenguaje interpertado
10% restante (zonas crticas en potencia de calculo): lenguaje
compilado
Para tareas cientcas:
Octave
Python
Lisp, scilab, Ruby,...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 8 / 79
-
Seccin 1.2
Toma de contacto con Octave: Primeros pasos con qtOctave
1 Toma de contacto con Octave
Introduccin a Octave
Primeros pasos con qtOctave
2 Matrices y lgebra matricial
3 Representacin de grcos
Grcos 2D
Grcos en 3D
4 Programacin con Octave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 9 / 79
-
qtOctave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 10 / 79
-
qtOctave
Entorno grco para Octave, desarrollado con libreras QT
Desarrollador principal: Pedro L. Lucas
Orgen: Proyecto presentado al I Concurso Uninversitario de
Software Libre (2007)
Apoyo de la OSLUCA (Alejandro lvarez Aylln).
Dnde conseguirlo:
Blog:
http://qtoctave.wordpress.com/
Forja de RedIris:
https://forja.rediris.es/projects/csl-qtoctave/
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 11 / 79
-
Instalacin
Windows: utilizar el instalador disponible
MacOsX: Compilar el cdigo fuente
GNU/Linux:
Instalar la versin disponible para tu distribucin favorita
O bien descargar QtOctave portable
O bien compilar cdigo fuente
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 12 / 79
-
Primera sesin con qtOctave
Arrancamos qtOctave...
Distintas secciones
1 Consola de Octave: usando Octave como una calculadora
2 Edicin de matrices: para amantes del point and click
3 Editor de cheros de Octave
4 Lista de variables, Directorio actual
Otras utilidades:
Acceso a la ayuda de Octave
1
Entorno mejorado para la representacin de grcos (Easy Plot)
...
1
http://www.gnu.org/software/octave/doc/interpreter/index.html
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 13 / 79
-
Primera sesin con qtOctave
Arrancamos qtOctave...
Distintas secciones
1 Consola de Octave: usando Octave como una calculadora
2 Edicin de matrices: para amantes del point and click
3 Editor de cheros de Octave
4 Lista de variables, Directorio actual
Otras utilidades:
Acceso a la ayuda de Octave
1
Entorno mejorado para la representacin de grcos (Easy Plot)
...
1
http://www.gnu.org/software/octave/doc/interpreter/index.html
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 13 / 79
-
Primera sesin con qtOctave
Arrancamos qtOctave...
Distintas secciones
1 Consola de Octave: usando Octave como una calculadora
2 Edicin de matrices: para amantes del point and click
3 Editor de cheros de Octave
4 Lista de variables, Directorio actual
Otras utilidades:
Acceso a la ayuda de Octave
1
Entorno mejorado para la representacin de grcos (Easy Plot)
...
1
http://www.gnu.org/software/octave/doc/interpreter/index.html
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 13 / 79
-
Octave como una calculadora (I)
Operadores numricos habituales:
+, -, *, /, ^
Parntesis para modicar la preferencia
El resultado se almacena en la variable ans
Re-editar rdenes: , , (Maysculas +) ,
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 14 / 79
-
Octave como una calculadora (II)
Estilo Matlab...
Comillas simples para introducir una cadena de texto
Porcentaje para comentarios
Tres puntos para continuacin de lnea
Punto y coma para un retorno de carro sin salida
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 15 / 79
-
Octave como una calculadora (II)
Estilo Octave (no compatible!)...
Comillas dobles para introducir una cadena de texto
Almohadilla (#) para comentarios
Barra invertida (\) para continuacin de lnea
Sabor a otros lenguajes de scripting: perl, python...
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 16 / 79
-
Ms 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 17 / 79
-
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
2
Octave graba en numerosos formatos. Vase la ayuda
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 18 / 79
-
Ejercicios
1 Denir las variables:
x = epi1
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, por
ejemplo, hdf5
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 19 / 79
-
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 20 / 79
-
Seccin 2. Matrices y lgebra matricial
1 Toma de contacto con Octave
Introduccin a Octave
Primeros pasos con qtOctave
2 Matrices y lgebra matricial
3 Representacin de grcos
Grcos 2D
Grcos en 3D
4 Programacin con Octave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 21 / 79
-
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 22 / 79
-
Nuestro primer script desde qtOctave
Editar y grabar en disco un chero llamado tablavalores.m con
el siguiente contenido:
1 x= -1:0.1:1;
2 y=1./(1+x.*x);
Los operadores .* y ./ multiplican y dividen elemento a
elemento.
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 23 / 79
-
Un nico tipo numrico
Por omisin, Octave (al igual que Matlab) emplea un nico tipo
numrico. Cualquier otro tipo tendr que asignarse explcitamente
Arrays n-dimensionales de reales de
doble precisin
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 24 / 79
-
Para escribir matrices
Notacin:
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 13
21 22 23
)
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 25 / 79
-
Subndices
Los arrays son indexables del modo usual
1 >> M(1,1)
2 ans = 11
3 >> M(end ,end)
4 ans = 23
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 26 / 79
-
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 devolvera un error en cualquier otro lenguaje de
programacin.
Esto es bueno o es malo?
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 27 / 79
-
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 28 / 79
-
Pero no para la asignacin!
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 29 / 79
-
Submatrices
Supongamos que de la matriz M queremos extraer una matriz S
formada por las 3 ltimas las y columnas:
M =
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 30 / 79
-
Submatrices
Los subndices 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, podemos
abreviar 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 31 / 79
-
Submatrices
Ejercicio: La orden pascal(N) devuelve una matriz cuadrada de
orden N formada a partir del respectivo tringulo de Pascal.
Calcular la matriz de Pascal P de orden 6.
Extraer la matriz T formada por:
Las las 1 a 3 y...
Las columnas 2 y 5
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 32 / 79
-
Submatrices
Solucin: 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 33 / 79
-
Submatrices
Ejercicio: Ahora queremos extraer la matriz formada por las
columnas 1, 3 y 5.
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 34 / 79
-
Submatrices
Ejercicio: Ahora queremos extraer la matriz formada por las
columnas 1, 3 y 5.
Solucin: La matriz formada por las columnas 1, 3 y 5 es...
1 >> P(: ,1:2:5)
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 35 / 79
-
Operadores
Operadores matriciales: + , - , * , / , ^
Operadores escalares: .* , ./ , .^
Operadores lgicos: &, | , !
Operadores de comparacin: < , > , == , >= ,
-
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 37 / 79
-
Operadores II
Operadores matriciales y escalares pueden confundirse fcilmente:
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 38 / 79
-
Cul es la solucin 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 39 / 79
-
lgebra
Con estas funciones se puede crear casi cualquier matriz
eye: Matriz de ceros con unos en la diagonal
linspace: Vector de elementos equiespaciados
logspace: Vector de elementos espaciados exponencialmente
ones: Matriz de unos
diag: Matriz con la diagonal que decidamos
zeros: Matriz de ceros
rand: Matriz de nmeros pseudoaleatorios.
meshgrid: Matrices equiespaciadas de dos dimensiones
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 40 / 79
-
lgebra
Manipulacin de matrices
reshape: Cambia la forma de la matriz conservando el nmero de
elementos
transpose: Traspuesta. Equivale a .'
ctranspose: Matriz conjugada. Equivale a '
rot90: Gira la matriz 90 grados en sentido antihorario.
Tamao de una matriz
size Devuelve el nmero de las y columnas
length Devuelve el nmero de elementos de un vector
3
3
En realidad, length(A)=max(size(A))
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 41 / 79
-
Resolucin de sistemas lineales
Para resolver sistemas de eucuaciones lineales contamos con un
operador 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 y
LAPACK
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 42 / 79
-
Seccin 3. Representacin de grcos
1 Toma de contacto con Octave
Introduccin a Octave
Primeros pasos con qtOctave
2 Matrices y lgebra matricial
3 Representacin de grcos
Grcos 2D
Grcos en 3D
4 Programacin con Octave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 43 / 79
-
Seccin 3.1
Representacin de grcos: Grcos 2D
1 Toma de contacto con Octave
Introduccin a Octave
Primeros pasos con qtOctave
2 Matrices y lgebra matricial
3 Representacin de grcos
Grcos 2D
Grcos en 3D
4 Programacin con Octave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 44 / 79
-
Representacin grca
Repesentar datos grcamente en Octave es sencillo e intuitivo
Se utiliza, a bajo nivel, el programa Gnulot
4
, a travs de un
conjunto de funciones compatibles con Matlab,
Estas funciones son pocas porque no hay necesidades avanzadas
(de tipo, por ejemplo, VTK)
4
Tambin es posible utilizar otros sistemas grcos distintos a Gnuplot, por
ejemplo EasyPlot (entorno grco disponible en qtOctave y que puede activarse
mediante el men Config), octplot, plplot,...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 45 / 79
-
Plot 2D
La manera ms sencilla de representar datos es mediante la funcin
plot
Ejemplo: Representar una curva en el plano a partir de dos series
de datos:
1 >> x=linspace (0 ,20 ,100);
2 >> y=exp(-x./100) .*sin(x);
3 >> plot(x,y);
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 46 / 79
-
Plot 2D (II)
El resultado (similar a)...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 47 / 79
-
Plot 2D (III)
Los atributos de las grcas se introducen con la ventana activa
Ejemplo:
1 >> title('Una funcion cualquiera ')
2 >> xlabel('Tiempo ')
3 >> ylabel('Amplitud ')
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 48 / 79
-
Plot IV
El resultado...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 49 / 79
-
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),'-^');
Aadir 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 50 / 79
-
Plot 2D (VI)
El resultado...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 51 / 79
-
Seccin 3.2
Representacin de grcos: Grcos en 3D
1 Toma de contacto con Octave
Introduccin a Octave
Primeros pasos con qtOctave
2 Matrices y lgebra matricial
3 Representacin de grcos
Grcos 2D
Grcos en 3D
4 Programacin con Octave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 52 / 79
-
Curvas 3D
Las grcas 3D ms sencillas son curvas trazadas mediante la funcin
plot3
Ejemplo: Representar una curva en el espacio a partir de tres
series 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 53 / 79
-
Curvas 3D: El resultado...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 54 / 79
-
Supercies 3D: Generacin de mallas
La funcin [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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 55 / 79
-
Dibujo de supercies 3D
La orden mesh(x,y,z) representa una supercie 3D, siendo
x, y dos matrices que representan una malla
z otra matriz que representa los valores f (x , y)
Ejemplo: grca de la funcin f (x , y) = sin(x) cos(y)
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 funcin view(a,e), donde
a es el azimut (ngulo de rotacin en el plano xy)
e es la elevacin vertical
1 >> view (30 ,60);
2 >> colorbar('East'); % Pintar una barra vertical
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 56 / 79
-
Supercies 3D: El resultado...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 57 / 79
-
Curvas de nivel
La orden contour(x,y,z) representa curvas de nivel
x, y y z tienen el mismo signicado que en la orden mesh
Acepta un cuarto parmetro, n (nmero 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 58 / 79
-
Curvas de nivel: El resultado...
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 59 / 79
-
Mallas estructuradas con VTK
Denimos una funcin write_vtk_sg(filename,x,y,z,f):
Imprime en un chero vtk los valores de una funcin que toma
valores sobre los puntos de una malla estructurada 3D
Parmetros:
x,y,z: vectores que denen la malla
f: array de valores f(x,y,z) sobre la malla
Observacin Para denir f, puede ser til usar la funcin
reshape(data,Nx,Ny,Nz)
Cdigo de la funcin....
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 60 / 79
-
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 61 / 79
-
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 61 / 79
-
Resultado (generado con paraview)
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 62 / 79
-
Seccin 4. Programacin con Octave
1 Toma de contacto con Octave
Introduccin a Octave
Primeros pasos con qtOctave
2 Matrices y lgebra matricial
3 Representacin de grcos
Grcos 2D
Grcos en 3D
4 Programacin con Octave
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 63 / 79
-
Control de ujo
No hay diferencias con otros lenguajes de programacin
interpretados
En estos lenguajes un bucle es en realidad un iterador
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 64 / 79
-
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
Cul es la salida si saludo=1?
En Octave, podemos usar endif (no compatible Matlab!). Igual
ocurrir con endfor, endfunction
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 65 / 79
-
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 funcin en el chero primetest.m
Cul es la salida de esta subrutina si n=20?
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 66 / 79
-
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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 67 / 79
-
Otras sentencias
while: Bucle controlado por condicin lgica
case: Control de casos cerrados
try: Sentencia de control para probar errores
break: Permite abandonar directamente el interior de
un bucle
continue: Se utiliza para saltar al nal de la actual
iteracin de un bucle
return: Devuelve el control al programa principal
Ejercicio Realizar distintos ejemplos con las sentencias
anteriores
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 68 / 79
-
Las funciones con algo ms 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 funcin est en un chero independiente, no es necesario
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 69 / 79
-
Funciones annimas.
Denicin
En Matlab, se utilza un tipo especial de funciones, (Function
Handles) para funciones sin necesidad de un archivo adicional
5
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 funcin
1 >> f = @(x) x^2;
2 >> integracion_numerica(f,0,1);
5
Matlab no permite la denicin de funciones de forma interactiva (salvo
inline). Octave s lo permite
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 70 / 79
-
Problemas arreglados por Octave
Declaracin 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 71 / 79
-
Problemas arreglados por Octave
Varias funciones en un mismo archivo.
Denimos 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 Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 72 / 79
-
Problemas arreglados por Octave
Ejecucin de funciones compuestas
1 >> a=rand (3,3)(1,2)
2 a = 0.14272
Permite expresiones mucho ms compactas.
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 73 / 79
-
La biblioteca de funciones
Integracin numrica (quad, quadl, quad2dg...)
Interpolacin (interp1, interp2, polyt, t,...)
Estadstica descriptiva (mean, std, median,...)
Ejercicio: Localiza funciones de tu inters y prubalas!
Indicacin:
Echa un vistazo a la ayuda de Octave (HTML)
Utiliza la funcin lookfor (busca funciones relacionadas con
una palabra clave). Por ejemplo, lookfor fourier.
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 74 / 79
-
Toolkits en Octave
Tookits ociales: Octave forge http://octave.sourceforge.net
Mirar en la web la lista de toolkits
Muchos otros.
MPITB (Toolkit de Paralelizacin con MPI,
desarrollado por Javier F. Baldomero, Universidad de
Granada)
6
Octaviz (VTK en Octave)
Octplot, etc
Problema: no hay garantas de compatibilidad con Toolkits de
Matlab
Independencia respecto a Octave y sus lneas estratgicas
6
http://atc.ugr.es/javier-bin/mpitb
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 75 / 79
-
Extensiones dinmicas de Octave
Fichero MiFuncion.cpp:
1 #include // Acceso al codigo de Octave!
2 DEFUN_DLD(MiFuncion , args , nargout , "Descripcion")
3 {
4 // ... Codigo C++ ...
5 return octave_value ()
6 }
Compilacin (con mkoctfile, un envoltorio del compilador C++)
1 $ mkoctfile MiFuncion.cpp
Obtenemos el chero MiFuncion.oct, que usaremos desde octave:
1 >> MiFuncion
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 76 / 79
-
Extensiones dinmicas de Octave: Hola Mundo!
Fichero holamundo.cpp
1 #include
2 DEFUN_DLD(holamundo , args , nargs , ``Programa hola
mundo '')
3 {
4 std::cout holamundo
2 ``Hola Mundo!''
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 77 / 79
-
Extensiones dinmicas de Octave: f (x) = x2
Fichero xcuadrado.cpp:
1 #include
2 DEFUN_DLD(xcuadrado , args , , \
3 "Calcula el cuadrado de un real , x'')
4 {
5 if(args.length () != 1) {
6 std::cerr
-
Bibliografa
Introduccin informal a Matlab y Octave:
http://iimyo.forja.rediris.es/
A. Quarteroni, F. Salieri Clculo cientco con Matlab y Octave.
Springer 2006.
Documentacin ocial:
http://www.gnu.org/software/octave/docs.html
Documentacin de Octave-Forge:
http://octave.sourceforge.net/docs.html
Incluye http://octave.sourceforge.net/coda/coda.pdf, manual
para extensiones dinmicas en C++.
J. Rafael Rodrguez Galvn (OSLUCA) SMB: 2. Clculo numrico con Octave i-MATH SMB, 2009 79 / 79
Toma de contacto con OctaveIntroduccin a Octave
Qu es OctavePotencialidad de OctaveOctave y MatlabOctave y MatlabPrimeros pasos con qtOctave
qtOctaveInstalacinPrimera sesin con qtOctaveMatrices y lgebra matricial
SecuenciasTipos numricosPara diferenciar filas y columnas
SubndicesPero no para la asignacin!SubmatricesOperadoresOperadores IIOperadores IIIManipulacin de matricesRepresentacin de grficosGrficos 2D
Plot 2D (IV)Plot 2D (V)Grficos en 3DProgramacin con Octave
Control de flujoCondicionalesBuclesBucles iteradoresOtras sentenciasFuncionesFunciones annimas.La biblioteca de funciones``Toolkits'' en Octave