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