Top Banner
1 1 Introducción a la Informática ITBA Teoría 5 2 Octave Lenguaje de programación de alto nivel orientado al procesamiento numérico. Permite resolver problemas de álgebra lineal, integrar funciones numéricamente, manipular polinomios, operar con matrices, etc.
31

Teoria05 Octave

Jun 23, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Teoria05 Octave

1

1

Introducción a la Informática

ITBATeoría 5

2

OctaveLenguaje de programación de alto nivelorientado al procesamiento numérico. Permite resolver problemas de álgebra lineal, integrar funciones numéricamente, manipularpolinomios, operar con matrices, etc.

Page 2: Teoria05 Octave

2

3

Características

• Dirección www.octave.org.

• Parte del proyecto GNU con licencia GPL.

• Versiones para Windows, Mac y Linux.

• Es un programa de consola o sea no tieneintefaz gráfica .

Octave

4

Características

Permite ejecutar procesos:Dentro del programa mediante al ingreso de comandos por teclados.A través de archivos con funciones (definidos con extensión “<nombre de archivo>.m”)Mediante a scripts de bash

Octave

Page 3: Teoria05 Octave

3

5

Ejecución

En linux desde la línea de comandos ingresar el comando ´octave´.Luego del mensaje inicial, se puede ingresar cualquier comando en el promptIngresar ‘quit’ o ‘exit’ para salir.Mediante a la función atexit se pueden agregar acciones a realizar al momento de salir

Octave

6

Ayuda

El comando ‘help’ sirve para ver la lista de operandos, comandos y funciones.‘help <nombre>' muestra la ayuda del comando (o función) con ese nombre. Ejemplo: ‘help help’ comenta como se usa el comando helpEl manual completo se encuentra online en: http://www.gnu.org/software/octave/doc/interpreter/index.html

Octave

Page 4: Teoria05 Octave

4

7

Números naturales 12Números reales 3.4 Notación exponencial 4.37E-8Números complejos 2 + 8i 1 - 3i

Tipos de datos numéricosOctave

No poner espacios entre la i y el numero que la precede

Los operadores que aplican a estos tipos de número son + - / * ^

8

Strings

Cadenas de caracteres que permiten guardar texto legible por los usuarios.Se delimitan con comillas dobles o simples (preferiblemente dobles).Se puede operar sobre los strings mediante a funciones especiales.

Octave

Page 5: Teoria05 Octave

5

9

EscapesOctave

Vertical tab\v

Tab\t

Nueva linea\n

Comillas simples\'

Comillas dobles\"

Barra invertida\\

Escapes

10

Se define entre corchetesLa coma (o espacios) separa elementos de una fila.El punto y coma separa elementos de una columna.

VectoresOctave

octave:1> [ 21, 35, 67]ans = 21 35 67

octave:1> [ 21; 35; 67]ans = 21

3567

Page 6: Teoria05 Octave

6

11

Matrices

Combinación de filas y columnas

Octave

octave:1> [ 10, 5, 8 ; 3, 4, 1]ans = 10 5 8

3 4 1

Se accede a los elemento utilizando ()

octave:1> [ 10, 5, 8 ; 3, 4, 1] (2, :)ans = 3 4 1

octave:1> [ 10, 5, 8 ; 3, 4, 1] (2, 2)ans = 4

El “:” indica toda la fila.

12

El operador :Genera un vector que contiene una secuencia de númerosEl comando a:b crea el vector

[a a+1 a+2 ... b] El comando a:c:b crea el vector

[a a+c a+2*c a+3*c ... b]

octave:1> 1:8ans = 1 2 3 4 5 6 7 8octave:2> 4:6ans = 4 5 6 octave:3> 2:0.25:3ans = 2.00 2.25 2.50 2.75 3.00

Octave

Page 7: Teoria05 Octave

7

13

Funciones para la construcción matrices

ones(N) crea una matriz de NxN con todos sus elementos igual a unoones(F,C) crea una matriz de FxC con todos unoszeros(N) y zeros(F,C) crea una matriz de NxN o FxC de ceroseye(N) y eye(F,C) crea una matriz identidad de tamaño NxN o FxCrand(N) y rand(F,C) crea una matriz de tamaño NxN o FxC con valores aletorios entre 0 y 1

Octave

14

Operaciones entre elementos

Al aplicar los operadores se debe tener en cuenta que la operación tenga sentido matemático. Por ejemplo:

Para que sea posible multiplicar dos matrices la primera matriz debe tener tantas columnas como la segunda filas.Para sumar matrices y/o vectores ambos operandosdeben tener la misma cantidad de elementos.

Si los operandos son mixtos, la operación es elemento a elemento.

Octave

Page 8: Teoria05 Octave

8

15

Resumen de Operadores AritméticosOctave

Suma y resta de escalares Suma y resta de matrices

a + b a - b

Potencia de los elementos de una matriza.^ b

Potencia de un escalar o una matriza ^ b

Producto y división de matrices elemento a elementoa.* b a./ b

Producto y división de dos escalares Producto y división de dos matrices

a * b a / b

Suma y resta de matrices elemento a elementoa.+ b a.- b

16

Resumen de Operadores RelacionalesOctave

1 si a es mayor o igual a ba >= b

1 si a es menor o igual a ba <= b

1 si a es mayor a ba > b

1 si a es menor a ba < b

Desigualdad, la respuesta es 1 si a es distinto a b, ó 0 en caso contrario

a ~= b a <> b a != b

Igualdad, la respuesta es 1 si a es igual a b, ó0 en caso contrario

a == b

Page 9: Teoria05 Octave

9

17

Resumen de Operadores Lógicos

Octave

And, 1 si a y b son distintos de 0a & b

a && b

Or, 1 si a ó b es distinto de 0a | b

a || b

Not, 1 si x es 0 y 0 si x es distinto de 0

!x

~x

18

La matriz TranspuestaOctaveAplicando el operador ' a una matriz se obtiene la matriz traspuesta

octave:1> [ 1 2 3; 4 5 6]

ans = 1 2 3 4 5 6

octave:2> [ 1 2 3; 4 5 6] '

ans = 1 4 2 5 3 6

Page 10: Teoria05 Octave

10

19

Variables

Los nombres de variables responden a la expresión regular [a-zA-Z_][a-zA-Z_0-9]*Los nombres de variables son case-sensitivePara asignarle un valor a una variable se utiliza el símbolo '='Para utilizar su valor basta con indicar su nombre Los comandos who y whos permiten ver las variables

definidas.

Octave

octave:1> respuesta = 3 + 5 * 2respuesta = 13

octave:2>X = (3 + 5) * 2X = 16

octave:3> Y = 3 * X + 4Y = 52

20

Variables predefinidas

Hay algunas variables predefinidas que son utiles:

Octave

Contiene la respuesta a la ultimaoperación no asignadaans

0false

1true

Infinf

2.7183e

3.1416pi

Page 11: Teoria05 Octave

11

21

Acceso a los elementos de una matriz con :Octave

•X(a:b,c:d) devolverá una matriz con los elementos de X que estén entre las filas a y b, y las columnas c y d

octave:1> M = [3 6 8; 12 4 2; 1 10 2; 4 8 9];octave:2> SM = M(1:2,2:3)SM = 6 8

4 2octave:3> SM1 = M(1:2,:)SM1 = 3 6 8

12 4 2

22

Funciones de octave

Octave ofrece una gran cantidad de funciones sobre los distintos tipos de datos y además permite que el usuario cree sus propias funciones

Octave

Page 12: Teoria05 Octave

12

23

Funciones Trigonométricas

Los ángulos son expresados en radianesPara pasar de grados a radianes se multiplicar por pi/180

Octave

Trigonométricassin(x) cos(x) tan(x)

Hiperbólicas inversasasenh(x) acosh(x) atanh(x)

Hiperbólicassenh(x) cosh(x) tanh(x)

Inversasasin(x) acos(x) atan(x)

24

Otras FuncionesOctave

Exponencial exexp(x)

Logaritmo naturallog(x)

Logaritmo en base 10log10(x)

Logaritmo en base 2log2(x)

Raiz cuadradasqrt(x)

Redondeo: el entero más cercano a xround(x)

Resto: el resto de la división x / ymod(x,y)

Techo: mínimo número entero mayor que xceil(x)

Signo: 1 si x>0, -1 si x<0 y 0 si x=0sign(x)

Trunca: elimina la parte decimal de xfix(x)

Piso: máximo número entero menor que xfloor(x)

Page 13: Teoria05 Octave

13

25

Funciones para vectores y matricesOctave

Si x es un vector retorna el producto de todos sus elementosSi x es una matriz retorna un vector con el producto de los elementos de cada columna

prod(x)

Si x es un vector devuelve su longitud.Si x es una matriz devuelve la cantidad de filas o columnas, el valor que sea mayor

length(x)

Si x es un vector retorna la suma de sus elementosSi x es una matriz retorna un vector con la suma de los elementos de cada columna

sum(x)

Devuelve un vector de dos elementos con la cantidad de filas y de columnas de x

size(x)

26

Funciones para vectores y matricesOctave

Construye una matriz cuya diagonal es el vector x o bien devuelve un vector con los elementos de la diagonal de la matriz x

diag(x)

Calcula el rango de la matriz xrank(x)

Calcula la inversa de la matriz xinv(x)

Calcula el determinante de la matriz xdet(x)

Si x es un vector max asigna a m el mayor elemento de x

m = max(x)

Si x es un vector max asigna a m el mayor elemento de x y le asigna a i la posición de dicho elemento

[m i] = max(x)

Page 14: Teoria05 Octave

14

27

Ejemplos de uso de funciones sobre vectores y matrices

Octavex = [1, 2, 3, 4, 1];y = [5; 3; 2];z = [1, 3, 4, 2; 2, 3, 5, 1];length(x) => 5length(y) => 3length(z) => 4length(z’) => 4sum(x) => 11max(y) => 5sum(z) => 3 6 9 3prod(z) => 2 9 20 2

28

Funciones para StringsOctave

Devuelve true si todos los caracteres son letrasisalpha (s) Devuelve true si el string representa a un numeroisdigit (s) Pasa todos los caracteres a mayusculastoupper (s) Pasa todos los caracteres a minusculastolower (s) Corta el string s desde la posición beg y len carasubstr (s, beg, len) Reemplaza en s las ocurrecias de x por el string ystrrep (s, x, y) Indica si los strings son igualesstrcmp (s1, s2)

Divide el string s en n partes usando t como separador

split (s, t, n) Devuelve la ultima posición de t en srindex (s, t) Devuelve la primera posición de t en sindex (s, t)

Devuelve un vector con las ocurrencias de t en soverlap indica si las respuestas pueden sobreponerse

findstr (s, t, overlap)

Quita los espacios al final de un stringdeblank (s)

Page 15: Teoria05 Octave

15

29

Funciones para StringsOctavefindstr ("ababab", "a") => [ 1, 3, 5 ] index ("Teststring", "t") => 4 rindex ("Teststring", "t") => 6 split ("Test string", "t") => "Tes " " s " "ring" split ("Test string", "t", 2) => "Tes " " string" strrep ("This is a test string", "is", "&%$") => "Th&%$ &%$ a test string" substr ("This is a test string", 6, 9) => "is a test" isalpha ("!Q@WERT^Y&") => [ 0, 1, 0, 1, 1, 1, 1, 0, 1, 0 ] Isdigit(“f2/0231a9?”) => [ 0, 1, 0, 1, 1, 1, 1, 0, 1, 0 ] olower ("MiXeD cAsE 123") => "mixed case 123" toupper ("MiXeD cAsE 123") => "MIXED CASE 123"

30

Entrada y SalidaOctave

octave:1> disp ("The value of pi is:"), disp (pi)the value of pi is: 3.1416

El comando ‘disp(x)’ permite escribir en la pantalla el contenido del parametro x. Siempre agrega un carácter de nueva linea al terminar.

octave:1> input ("Pick a number, any number! ")

El comando ‘input(x)’ imprime el mensaje x y espera que el usuario ingrese una expresión que evalua y resuelve

Page 16: Teoria05 Octave

16

31

Gráficos

Octave no cuenta con una interfase gráfica. Para generargráficos se basa en la aplicación gnuPlot.

Octave

32

Gráficos en dos dimensiones

• Se utiliza el comando plot.

• En su versión más simple el comando plot(x) grafica los elementos del vector x.octave:1> X = sin(0:0.1:2*pi);octave:2> plot(X)

Octave

Page 17: Teoria05 Octave

17

33

Gráficos en dos dimensiones

Agregando un segundo parámetro, plot(x,y)realiza un gráfico del vector y, en función del vector x.Los vectores x e y deben ser del mismo tamaño.Cada punto n de la curva tiene las coordenadas (x(n), y(n))

Octave

34

Gráficos en dos dimensiones

octave:1> X = 0:0.1:2*pi;octave:2> plot(X,sin(X))

Octave

Page 18: Teoria05 Octave

18

35

Formato de gráficos en dos dimensiones

Agregando un tercer parámetro, plot(x,y,fmt) realiza un gráfico del vector y, en función del vector x con el formato especificado en fmt

El formato es una cadena de caracteres que especifica, el tipo de punto, su color y el nombre de la serie.

”*g;Coseno de X;”Los puntos se indican con un

asteriscoLos puntos son de color verde

(green)

Título de la serie(encerrado entre ; )

Octave

36

Formato de gráficos en dos dimensiones

Formato del punto:“-” grafica una línea que une los puntos“.” grafica puntos“+” grafica los puntos con forma de +“*” grafica los puntos con forma de *“o” grafica los puntos con forma de o“^” grafica impulsos

Color:“r” rojo “g” verde“b” azul “m” magenta“c” cyan “w” blanco

Octave

Page 19: Teoria05 Octave

19

37

Formato de gráficos en dos dimensiones

octave:1> X = 0:0.1:2*pi;octave:2> plot(X,sin(X), "*g;seno de X;")

Octave

38

Formato de gráficos en dos dimensiones

octave:1> X = 0:0.1:2*pi;octave:2> plot(X,sin(X), "^m;Evaluación de unafunción en un punto;")

Octave

Page 20: Teoria05 Octave

20

39

Gráfico de más de una curva

El comando plot permite graficar más de una curva repitiendo el grupo de parámetros.

Una curva

plot(x1, y1, fmt1, x2, y2, fmt2, ... )

Otra curva Más curvas

Octave

40

Gráfico de más de una curva

octave:1> X = 0:0.1:2*pi;octave:2> plot(X,sin(X),"g;Seno;", X, cos(X),"b;Coseno;")

Octave

Page 21: Teoria05 Octave

21

41

Gráficos divididos

El comando subplot(f,c,i) divide el espacio a graficar en f filas y c columnas. El próximo comando plot que se ejecute se graficará en el espacio i.

El indice i debe ser mayor o igual a 1 y menor o igual a (f*c).

Octave

42

Gráficos divididosoctave:1> X = 0:0.1:2*pi;octave:2> subplot(2,1,1);octave:3> plot(X,sin(X),";Seno;");octave:4> subplot(2,1,2);octave:5> plot(X,cos(X),";Coseno;");

Octave

Page 22: Teoria05 Octave

22

43

Archivos: Almacenamiento y recupero de datos

Octave ofrece acceso a archivos en forma muy sencilla

load “filename”Crea una variable con nombre filename a la que le asigna el

contenido del archivo

save “filename” varalmacena en el archivo filename el contenido de la variable var

Octave

44

Archivos: Almacenamiento y recupero de datos

octave:1> five = ones(5).* 5;octave:2> save "five.txt" five

octave:1> load "five.txt"octave:2> fivefive =

5 5 5 5 55 5 5 5 55 5 5 5 55 5 5 5 55 5 5 5 5

En otra sesión ...

Octave

Page 23: Teoria05 Octave

23

45

Ejemplo de exportación de un gráfico

octave:1> __gnuplot_set__ output “plot.png”

octave:2> __gnuplot_set__ terminal png

octave:3> replot

octave:4> __gnuplot_set__ output

octave:5> __gnuplot_set__ terminal x11

Define a la salida como el archivo"plot.png" y con formato png

Restaura la salida hacia la terminal gráfica

Octave

USARPRINT(“archivo.png”)

Versión Deprecated

46

Formato png

Opciones de configuración disponibles:[small | medium | large] [monochrome | gray | color]

octave:1> __gnuplot_set__ terminal png large color

Octave

Page 24: Teoria05 Octave

24

47

Ejemplos:

__gnuplot_set__ terminal png small color

Octave

48

Scripts en octave

Es posible escribir una secuencia de comandos de Octave en un archivo de texto y solicitarle a Octave que ejecute dicha secuencia

source("comandos");

Abre el archivo cuyonombre es "comandos" y ejecuta en secuencialos comandos quecontiene en cada línea.

Octave

Page 25: Teoria05 Octave

25

49

Ejemplo de script

load “PArterial.txt”time = PArterial(:,1);pressure = PArterial(:,2);deltaP = PArterial(:,3);plot(time,pressure+deltaP);

Archivo PAshow.txt

octave:1> source("PAshow.txt");

Octave

50

Funciones

Octave permite que el usuario escriba sus propias funciones. A diferencia de los scripts, pueden recibir parámetros y/o retornar valoresCada función se escribe en un archivoEl archivo debe llamarse igual que la función con extensión ".m“Ejemplo de invocación con pasaje de parámetro:

Ejecutar : OctaveDentro del contexto de octave ejecutar :

CalcularRaiz (8)

Octave

Page 26: Teoria05 Octave

26

51

Declaración de funciones

function ans = MiFuncion(parm1, param2)ans = param1 + param2;

El archivo se debe llamar MiFuncion.mEsta función recibe dos parámetros parm1 y parm2Al finalizar la ejecución la función devuelve el valor de la variable ans

Octave

52

Comentarios

Documentación para el comando help

function ans = sigma(x)

% Función que calcula el valor de sigma de x.

% si x es un vector o una matriz calcula el

% valor de sigma para cada uno de sus

% elementos.

den = 1+exp(-x); % Calcula el denominador

ans = 1./den; % Usa ./ para que funcione % si den es una matriz

Octave

Page 27: Teoria05 Octave

27

53

El condicional ifif( condicion ),

% Comandos a ejecutar si la% condicion es cierta

else

% Comandos a ejecutar si la% condicion es falsa

end

% validación de la edad

if( edad > 18 & edad < 20 ),

% entonces tiene 19

disp(“usted tiene 19 años”);

end

Octave

54

Más ejemplos de iffunction ans = escalon(x);

% función escalón

% Devuelve 0 para todo x menor a 0

% 1 en caso contrario

if( x < 0 ),

% si x es negativo vale 0

ans = 0;

else

% 1 si es 0 o positivo

ans = 1;

end

Octave

Page 28: Teoria05 Octave

28

55

El condicional switch

switch variable

case etiqueta1

% comandos para etiqueta1

case { etiqueta2, etiqueta3 }

% comandos para etiqueta2

otherwise

% comandos para valores imprevistos

end

Octave

56

Ejemplo de switch

function str=comentarNota(nota)% retorna un string con un comentario de la nota% si es un vector retorna “error”if(length(nota)==1), %verifica que nota sea escalar

switch(nota)case 10

str=“excelente”;case { 9, 8, 7 }

str=“bien”;case { 6, 5, 4 }

str=“regular”;case { 3, 2, 1 }

str=“mal”;otherwise

str=“entrada invalida”;end

elsestr=“error”;

end

Octave

Page 29: Teoria05 Octave

29

57

Ciclo forfor variable = expresion

% comandos del ciclo

end

% impresión de potencias

for a = 0:9

disp(a^2);

end

La variable toma en cada ciclo cada uno de los valores de la expresión.

Octave

58

Más ejemplos de forfunction sum = miSuma(x)% miSuma(x) suma todos los elementos de x% Si x es una matriz devuelve 0

if(rows(x)==1 || columns(x)==1) % valida% si no es una matrizsum = 0; % inicializa en 0

%suma acumuladafor val = x

sum = sum + val;end

else% si es una matrizsum = 0;

end

Octave

Page 30: Teoria05 Octave

30

59

Ciclo whilewhile( condicion )

% comandos del cicloend

Mientras la condición sea verdadera se ejecutan los comandos del ciclo

% impresión de potencias

a = 0;

while (a < 10)

disp(a^2);

a = a + 1;

end

Octave

60

Ejemplo de whilefunction n = buscarSuma(x)% n=buscarSuma(x) retorna el cuantos números se deben sumar% para alcanzar el valor x, x=(1+2+3+…+n)

if(length(x)==1), % valida que x sea un escalar

% inicializa las variablesn=1;acum = n; % suma acumulada

%suma acumuladawhile(acum < x)

n = n + 1;acum = acum + n;

endelse

% si no es un escalarn = 0;

end

Octave

Page 31: Teoria05 Octave

31

61

Consejos de programación

DocumentarNombres relacionados al contenido de las variables y las funcionesFunciones cortas y clarasValidar los parámetros de entradaMensajes de error claros