You are on page 1of 31

Introducción a la

Informática

ITBA 1

Teoría 5

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.

1
Octave 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 tiene


intefaz gráfica .

Octave Características

Permite ejecutar procesos:


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

2
Octave Ejecución

z En linux desde la línea de comandos ingresar


el comando ´octave´.
z Luego del mensaje inicial, se puede ingresar
cualquier comando en el prompt
z Ingresar ‘quit’ o ‘exit’ para salir.
z Mediante a la función atexit se pueden
agregar acciones a realizar al momento de
salir
5

Octave Ayuda

z El comando ‘help’ sirve para ver la lista de


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

3
Tipos de datos
Octave numéricos
Los operadores que aplican a estos tipos de
número son + - / * ^

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

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

Octave Strings

z Cadenas de caracteres que permiten guardar


texto legible por los usuarios.
z Se delimitan con comillas dobles o simples
(preferiblemente dobles).
z Se puede operar sobre los strings mediante a
funciones especiales.

4
Octave Escapes

Escapes
\\ Barra invertida
\" Comillas dobles
\' Comillas simples
\n Nueva linea
\t Tab
\v Vertical tab
9

Octave Vectores

z Se define entre corchetes


z La coma (o espacios) separa elementos de una
fila.
z El punto y coma separa elementos de una
columna.
octave:1> [ 21, 35, 67]
ans = 21 35 67
octave:1> [ 21; 35; 67]
ans = 21
35
67
10

5
Octave Matrices

z Combinación de filas y columnas


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

z Se accede a los elemento utilizando ()

octave:1> [ 10, 5, 8 ; 3, 4, 1] (2, :) El “:” indica


ans = 3 4 1 toda la fila.
octave:1> [ 10, 5, 8 ; 3, 4, 1] (2, 2)
ans = 4
11

El operador :
Octave
¾ Genera un vector que contiene una secuencia de números
¾ El 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:8
ans = 1 2 3 4 5 6 7 8
octave:2> 4:6
ans = 4 5 6
octave:3> 2:0.25:3
ans = 2.00 2.25 2.50
2.75 3.00

12

6
Funciones para la
Octave construcción matrices
z ones(N) crea una matriz de NxN con todos sus
elementos igual a uno
z ones(F,C) crea una matriz de FxC con todos unos
z zeros(N) y zeros(F,C) crea una matriz de NxN o
FxC de ceros
z eye(N) y eye(F,C) crea una matriz identidad de
tamaño NxN o FxC
z rand(N) y rand(F,C) crea una matriz de tamaño
NxN o FxC con valores aletorios entre 0 y 1

13

Operaciones entre
Octave elementos
z Al aplicar los operadores se debe tener en
cuenta que la operación tenga sentido
matemático. Por ejemplo:
z Para que sea posible multiplicar dos matrices la
primera matriz debe tener tantas columnas como la
segunda filas.
z Para sumar matrices y/o vectores ambos operandos
deben tener la misma cantidad de elementos.
z Si los operandos son mixtos, la operación es
elemento a elemento.
14

7
Resumen de
Octave Operadores Aritméticos
a + b Suma y resta de escalares
a - b Suma y resta de matrices
a.+ b Suma y resta de matrices elemento a elemento
a.- b
a * b Producto y división de dos escalares
a / b Producto y división de dos matrices
a.* b Producto y división de matrices elemento a elemento
a./ b
a ^ b Potencia de un escalar o una matriz
a.^ b Potencia de los elementos de una matriz
15

Resumen de Operadores
Octave Relacionales
a == b Igualdad, la respuesta es 1 si a es igual a b, ó
0 en caso contrario
a ~= b Desigualdad, la respuesta es 1 si a es distinto
a <> b a b, ó 0 en caso contrario
a != b

a < b 1 si a es menor a b
a > b 1 si a es mayor a b
a <= b 1 si a es menor o igual a b
a >= b 1 si a es mayor o igual a b
16

8
Octave Resumen de Operadores
Lógicos
!x Not, 1 si x es 0 y
~x 0 si x es distinto de 0
a | b Or, 1 si a ó b es distinto de 0
a || b

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


a && b

17

Octave La matriz Transpuesta

Aplicando 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

18

9
Octave Variables

z Los nombres de variables responden a la expresión regular


[a-zA-Z_][a-zA-Z_0-9]*
z Los nombres de variables son case-sensitive
z Para asignarle un valor a una variable se utiliza el símbolo '='
z Para utilizar su valor basta con indicar su nombre
z Los comandos who y whos permiten ver las variables
definidas.

octave:1> respuesta = 3 + 5 * 2
respuesta = 13
octave:2>X = (3 + 5) * 2
X = 16
octave:3> Y = 3 * X + 4
Y = 52
19

Octave Variables predefinidas

z Hay algunas variables predefinidas que son utiles:

pi 3.1416
e 2.7183
inf Inf
true 1
false 0
Contiene la respuesta a la ultima
ans operación no asignada

20

10
Acceso a los elementos
Octave de una matriz con :

•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 2
octave:3> SM1 = M(1:2,:)
SM1 = 3 6 8
12 4 2

21

Octave Funciones de octave

z Octave ofrece una gran cantidad de funciones


sobre los distintos tipos de datos y además
permite que el usuario cree sus propias
funciones

22

11
Funciones
Octave Trigonométricas
z Los ángulos son expresados en radianes
z Para pasar de grados a radianes se multiplicar por pi/180

sin(x) cos(x) tan(x) Trigonométricas


asin(x) acos(x) atan(x) Inversas
senh(x) cosh(x) tanh(x) Hiperbólicas
asenh(x) acosh(x) Hiperbólicas inversas
atanh(x)

23

Octave Otras Funciones


ceil(x) Techo: mínimo número entero mayor que x
floor(x) Piso: máximo número entero menor que x
fix(x) Trunca: elimina la parte decimal de x
mod(x,y) Resto: el resto de la división x / y
round(x) Redondeo: el entero más cercano a x
sign(x) Signo: 1 si x>0, -1 si x<0 y 0 si x=0
exp(x) Exponencial ex
log(x) Logaritmo natural
log10(x) Logaritmo en base 10
log2(x) Logaritmo en base 2
sqrt(x) Raiz cuadrada
24

12
Funciones para
Octave vectores y matrices
length(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
size(x) Devuelve un vector de dos elementos con la cantidad de
filas y de columnas de x
sum(x) Si x es un vector retorna la suma de sus elementos
Si x es una matriz retorna un vector con la suma de los
elementos de cada columna
prod(x) Si x es un vector retorna el producto de todos sus
elementos
Si x es una matriz retorna un vector con el producto de
los elementos de cada columna
25

Funciones para
Octave vectores y matrices
m = max(x) Si x es un vector max asigna a m el mayor
elemento de x
[m i] = 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
diag(x) Construye una matriz cuya diagonal es el vector
x o bien devuelve un vector con los elementos de
la diagonal de la matriz x
det(x) Calcula el determinante de la matriz x
inv(x) Calcula la inversa de la matriz x
rank(x) Calcula el rango de la matriz x
26

13
Octave Ejemplos de uso de funciones
sobre vectores y matrices

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

27

Octave Funciones para Strings


deblank (s) Quita los espacios al final de un string
findstr (s, t, overlap) Devuelve un vector con las ocurrencias de t en s
overlap indica si las respuestas pueden sobreponerse
index (s, t) Devuelve la primera posición de t en s
rindex (s, t) Devuelve la ultima posición de t en s
split (s, t, n) Divide el string s en n partes usando t como
separador
strcmp (s1, s2) Indica si los strings son iguales
strrep (s, x, y) Reemplaza en s las ocurrecias de x por el string y
substr (s, beg, len) Corta el string s desde la posición beg y len cara
tolower (s) Pasa todos los caracteres a minusculas
toupper (s) Pasa todos los caracteres a mayusculas
isdigit (s) Devuelve true si el string representa a un numero
isalpha (s) Devuelve true si todos los caracteres son letras 28

14
Octave Funciones para Strings

findstr ("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"

29

Octave Entrada y Salida


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> disp ("The value of pi is:"), disp (pi)
the value of pi is:
3.1416

El comando ‘input(x)’ imprime el mensaje x y espera que


el usuario ingrese una expresión que evalua y resuelve
octave:1> input ("Pick a number, any number! ")

30

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

31

Gráficos en dos
Octave 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)

32

16
Gráficos en dos
Octave dimensiones

z Agregando un segundo parámetro, plot(x,y)


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

33

Gráficos en dos
Octave dimensiones
octave:1> X = 0:0.1:2*pi;
octave:2> plot(X,sin(X))

34

17
Formato de gráficos en dos
Octave dimensiones

z 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
z 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 Título de la serie
asterisco (encerrado entre ; )
Los puntos son
de color verde
(green) 35

Formato de gráficos en dos


Octave dimensiones
z 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

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

18
Formato de gráficos en dos
Octave dimensiones
octave:1> X = 0:0.1:2*pi;
octave:2> plot(X,sin(X), "*g;seno de X;")

37

Formato de gráficos en dos


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

38

19
Octave Gráfico de más de una curva

z El comando plot permite graficar más de una curva repitiendo


el grupo de parámetros.

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

Una curva Otra curva Más curvas

39

Octave 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;")

40

20
Octave Gráficos divididos

z 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.

z El indice i debe ser mayor o igual a 1 y menor o igual a


(f*c).

41

Octave Gráficos divididos


octave: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;");

42

21
Archivos: Almacenamiento y
Octave recupero de datos

z 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” var


almacena en el archivo filename el contenido de la variable
var

43

Archivos: Almacenamiento
Octave y recupero de datos

octave:1> five = ones(5).* 5;


octave:2> save "five.txt" five

En otra sesión ...


octave:1> load "five.txt"
octave:2> five
five =
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
44

22
Ejemplo de exportación
Octave
Versión Deprecated 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

USAR
PRINT(“archivo.png”)
45

Octave Formato png

octave:1> __gnuplot_set__ terminal png large color

Opciones de configuración disponibles:


¾ [small | medium | large]

¾ [monochrome | gray | color]

46

23
Octave Ejemplos:
__gnuplot_set__ terminal png small color

47

Octave Scripts en octave

z Es posible escribir una secuencia de comandos de


Octave en un archivo de texto y solicitarle a
Octave que ejecute dicha secuencia
Abre el archivo cuyo
nombre es "comandos"
source("comandos"); y ejecuta en secuencia
los comandos que
contiene en cada línea.

48

24
Archivo PAshow.txt
Octave load “PArterial.txt”
time = PArterial(:,1);
Ejemplo de pressure = PArterial(:,2);
script deltaP = PArterial(:,3);
plot(time,pressure+deltaP);

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

49

Octave Funciones
z Octave permite que el usuario escriba sus propias
funciones.
z A diferencia de los scripts, pueden recibir parámetros y/o
retornar valores
z Cada función se escribe en un archivo
z El archivo debe llamarse igual que la función con
extensión ".m“
z Ejemplo de invocación con pasaje de parámetro:
z Ejecutar : Octave
z Dentro del contexto de octave ejecutar :
z CalcularRaiz (8)

50

25
Declaración de
Octave funciones
function ans = MiFuncion(parm1, param2)
ans = param1 + param2;

z El archivo se debe llamar MiFuncion.m


z Esta función recibe dos parámetros parm1 y parm2
z Al finalizar la ejecución la función devuelve el valor de la variable
ans

51

Octave Comentarios
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

Documentación para el comando help 52

26
Octave El condicional if
if( 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
53

Octave Más ejemplos de if


function 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

54

27
El condicional
Octave switch
switch variable
case etiqueta1
% comandos para etiqueta1
case { etiqueta2, etiqueta3 }
% comandos para etiqueta2

otherwise
% comandos para valores imprevistos
end

55

Ejemplo de
Octave 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
else
str=“error”;
end
56

28
Octave Ciclo for
for variable = expresion
% comandos del ciclo
end

La variable toma en cada ciclo cada uno de


los valores de la expresión.

% impresión de potencias
for a = 0:9
disp(a^2);
end

57

Octave Más ejemplos de for


function 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 matriz
sum = 0; % inicializa en 0

%suma acumulada
for val = x
sum = sum + val;
end
else
% si es una matriz
sum = 0;
end 58

29
Octave Ciclo while
while( condicion )
% comandos del ciclo
end

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
59

Octave Ejemplo de while


function 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 variables


n=1;
acum = n; % suma acumulada

%suma acumulada
while(acum < x)
n = n + 1;
acum = acum + n;
end
else
% si no es un escalar
n = 0;
end
60

30
Consejos de programación
z Documentar
z Nombres relacionados al contenido de las
variables y las funciones
z Funciones cortas y claras
z Validar los parámetros de entrada
z Mensajes de error claros

61

31

You might also like