modulo octave

Upload: jjmartinez4356

Post on 30-Oct-2015

82 views

Category:

Documents


0 download

TRANSCRIPT

  • 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