GNU OCTAVE Principales caracterı́sticas • lenguaje de alto nivel orientado al cálculo numérico • software libre distribuido bajo licencia GNU GPL • prácticamente compatible con Matlab • página principal http://www.gnu.org/software/octave/ • contribuciones adicionales en http://octave.sourceforge.net/ • entorno gráfico QtOctave: http://qtoctave.wordpress.com/ Algunas referencias de consulta • J. W. Eaton, D. Bateman, S. Hauberg; GNU Octave Manual. Editado por Network Theory Ltd http://www.network-theory.co.uk/octave/manual/ También incluido en formato pdf con el código • G. Borrell; Introducción informal a Matlab y Octave. Puede consultarse en http://iimyo.forja.rediris.es/ OCTAVE COMO CALCULADORA 0. Reglas de empleo y operaciones elementales • Variables matriciales con valores complejos (otros tipos de variables: cadenas de caracteres, estructuras y celdas) • Almacenamiento de variables octave:1> octave:2> octave:3> octave:4> A B C D = = = = [ [ [ [ 2 4.5; 7 89] 2 , 4.5; 7 , 89] 2 4.5 7 89] 2i 4.5-i; 7-3i 89] • Consulta y modificación de posiciones octave:5> D(1,2) = 4.5+i • Nombres admisibles para variables en Octave Preferentemente combinaciones de letras y números (también guión bajo) que han de comenzar con una letra A1, ABC, C89RT, ... Distingue entre mayúsculas y minúsculas A1, a1, ABC, AbC, ABc, C89RT, c89rT ... • Operaciones elementales + : suma (de matrices, vectores o escalares) − : diferencia (de matrices, vectores o escalares) ∗ : producto (de matrices, vectores o escalares) ˆ ó ∗∗ : potencia (de matrices o escalares) / : división a la derecha (A/B devuelve A B −1 ) \ : división a la izquierda (A\b devuelve A−1 b) ´ : trasposición (conjugada) de matrices • Operaciones elemento a elemento .∗ .ˆ .∗∗ .\ 2 ./ • Expresiones en Octave Alternativa 1: variable = expresión octave:6> E1 = B * D octave:7> E2 = E1 * D ; octave:8> E2 = E2+D^2 Alternativa 2: expresión octave:9> B * D octave:10> E1 * D ; octave:11> E2+D^2 • Notación : en Octave creación de tablas de puntos equiespaciados octave:12> x = 1:10 octave:13> y = 0:0.01:5 referencias a bloques de matrices octave:14> A = [ 1 2 3 4 5; 10 9 8 7 6; 11 12 13 14 15] octave:15> B = A(:,2) octave:16> C = A(2,:) octave:17> D = A(:,2:5) • Listados de variables y programas: who y whos • Borrado de variables y programas: clear • Variables permanentes: eps, pi, i, j, realmax, realmin, ... • Formatos de salida: format short y format long • Almacenamiento y lectura de variables: save y load • Instrucciones del sistema operativo: ls, cd, pwd ... otras instrucciones: system(’instruccion’) • Llamada a la ayuda desde intérprete: help, help -i y doc ayuda en formato .html en QtOctave 3 1. Algunas funciones básicas • Funciones para la creación de matrices especiales: Matrix Manipulation eye, zeros, ones, diag • Funciones escalares (elemento a elemento): Arithmetic sin, cos, tan, asin, acos, atan, sinh, cosh, tanh exp, log, log10, sqrt abs, arg, conj, real, imag rem, sign, round, floor, ceil ... • Funciones vectoriales (operaciones por columnas): Arithmetic y Statistics max, min, sort, sum, prod median, mean, std, cov • Funciones matriciales: Linear Algebra eig, inv, size, norm, det, cond, rank, trace expm, sqrtm, lu, qr, chol, schur 2. Biblioteca de métodos numéricos • Álgebra lineal numérica: Linear Algebra • Resolución de ecuaciones no lineales: Nonlinear Equations • Interpolación polinómica: Polynomial Manipulation e Interpolation • Integración numérica: Quadrature • Optimización: Optimization • Resolución de ecuaciones diferenciales: Differential Equations • Más contribuciones en: http://octave.sourceforge.net/ 4 OCTAVE COMO ENTORNO DE PROGRAMACIÓN 0. Caracterı́sticas generales • Lenguaje de programación interpretado (no compilado) • Las funciones intrı́nsecas de Octave sı́ están compiladas • Permite emplear llamadas a funciones compiladas (en C++) 1. Archivos de instrucciones • Almacenan secuencias de instrucciones de Octave (con control de flujo) • Se guardan en archivos con la extensión .m (para garantizar la compatibilidad con MATLAB) • Las instrucciones se procesan llamando al archivo desde el espacio de trabajo (tecleando el nombre del archivo) 2. Construcción de funciones • Crean nuevas funciones de Octave • Se guardan en archivos con la extensión .m • El nombre de la función ha de coincidir con el nombre del archivo donde se guarda • La primera lı́nea en el archivo define el modo de llamar a la función function [vs1,vs2,...,vsm]=nombre(ve1,ve2,...,ven) donde vs1,vs2,...,vsm representan los nombres (locales) de las variables de salida, nombre representa el nombre de la función (que ha de coincidir con el nombre del archivo donde se guarda) y ve1, ve2,...,ven representan los nombre (locales) de las variables de entrada • Puede (y debe) incluir comentarios que sirvan de ayuda al usuario 5 Ejemplo: escritura de una función para el cálculo de las raı́ces de una ecuación de segundo grado function [z1,z2]=raices(a,b,c) %RAICES Calcula raices de una ecuacion de segundo grado % [z1,z2]=raices(a,b,c) devuelve en z1 y z2 las raices % de la ecuacion a*x^2+b*x+c=0 d=sqrt(b*b-4*a*c); z1=(-b+d)/(2*a); z2=(-b-d)/(2*a); que puede ser llamada desde el espacio de trabajo octave:18> [r,s] = raices(1,0,-4) para guardar en r y s las raı́ces de la ecuación x2 − 4 = 0. Para consultar el uso de la nueva función: help raices 3. Control de flujo: programación de bucles • Repiten una operación un número definido (bucle incondicional) o condicionado (bucle condicional) de veces • Forma elemental de bucle incondicional for i=1:n lista de instrucciones end Ejemplo: octave:19> x = [ ]; octave:20> for i=1:5 > x = [ x , i^2 ] > end 6 • Los bucles pueden ser anidados octave:21> H = [ ]; octave:22> for i=1:3 > for j=1:4 > H(i,j) = 1/(i+j-1) > end > end • En la escritura de programas es habitual hacer un sangrado de las lı́neas correspondientes a la lista de instrucciones (hace más fácil la lectura) • Forma elemental de bucle condicional while condicion lista de instrucciones end • Escritura de condicion mediante operadores de relación < > == (menor que) (mayor que) (igual que) <= (menor o igual que) >= (mayor o igual que) ∼= ó ! = (distinto de) y operadores lógicos & (y lógico) | (o lógico) ∼ ó ! (no lógico) • Ejemplo: Encontrar el menor entero no negativo n tal que 2n ≥ 15 octave:23> n = 0; octave:24> while 2^n < 15 > n = n + 1 > end 7 3. Control de flujo: programación de condicionales • Llevan a cabo o no una lista de instrucciones dependiendo de la veracidad de una condición • A diferencia de los bucles condicionales, la lista de instrucciones sólo se lleva a cabo una vez • Forma elemental de la estructura condicional if condicion lista de instrucciones end • Forma completa de la estructura condicional if condicion lista A de instrucciones else lista B de instrucciones end • Las estructruras condicionales también pueden anidarse • Ejemplo (modificación de la función raices): if a == 0 z1=-c/b; z2=[]; else d=sqrt(b*b-4*a*c); z1=(-b+d)/(2*a); z2=(-b-d)/(2*a); end 8