0% encontró este documento útil (0 votos)
104 vistas57 páginas

Introducción A Octave

GNU Octave es un programa libre para realizar cálculos numéricos que cuenta con herramientas para la resolución de problemas de cálculo numérico como álgebra lineal, integración numérica e integración de ecuaciones diferenciales. Octave permite declarar variables como enteros, reales, vectores, matrices y cadenas, y realizar operaciones básicas y con vectores y matrices. El programa también incluye funciones para entrada y salida de datos, condicionales y bucles.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
104 vistas57 páginas

Introducción A Octave

GNU Octave es un programa libre para realizar cálculos numéricos que cuenta con herramientas para la resolución de problemas de cálculo numérico como álgebra lineal, integración numérica e integración de ecuaciones diferenciales. Octave permite declarar variables como enteros, reales, vectores, matrices y cadenas, y realizar operaciones básicas y con vectores y matrices. El programa también incluye funciones para entrada y salida de datos, condicionales y bucles.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd

INTRODUCCIÓN A OCTAVE

MTIE ROBERTO DIAZ CUESTA


¿QUÉ ES GNU OCTAVE?

 El proyecto nace alrededor de 1988 con la finalidad de ser usado en


un curso de reactores químicos y en 1992 lo extienden para su uso
como el día de hoy.

 Octave o GNU Octave es un programa libre para realizar cálculos


numéricos. Como indica su nombre es parte del proyecto GNU.
Apoyado en una amplia comunidad de desarrolladores y usuarios,
Octave cuenta con herramientas para la resolución de problemas de
cálculo numérico lineales y no lineales: álgebra lineal, aproximación
de raíces de ecuaciones, integración numérica, integración de
ecuaciones diferenciales, etc., así como para la representación de
gráficos en dos y tres dimensiones. Es fácilmente extensible y
adaptable mediante funciones definidas por el usuario, bien
utilizando el propio lenguaje de Octave o bien mediante módulos
escritos en C++, C, Fortran u otros lenguajes.
INSTALACIÓN:

https://octave.org/download#ms-Windows
https://octave-online.net/
INTERFAZ GRÁFICA DE USUARIO (GUI)
FUNDAMENTOS DE PROGRAMACIÓN EN OCTAVE
CURSO GNU OCTAVE
PARA NO ROMPER LA TRADICIÓN: VARIABLES

Variables simples numéricas, entre Enteros. Contienen un valor entero.


estas: Reales. Contiene un valor real.

Variables múltiples numéricas, entre Vectores. Contiene un vector de valores.


estas: Matrices. Contiene una matriz de valores.

Cadenas de caracteres. Contiene una cadena de caracteres.

Registros.
DECLARACIÓN DE VARIABLES

• Enteros:
 int = 2; % Este crea una variable llamada 'int' con el valor 2

Reales:
 float = 1.5; % Este crea una variable llamada 'float' con el valor 1,5

Cadenas de caracteres, un tipo de cadena sería:
 cad = 'Hola mundo'; % Este crea una variable llamada 'cad' con la cadena de
caracteres 'Hola mundo'.
 Una variable se puede declarar con el ';' al final o sin él. La diferencia es que con el ';', la variable no es mostrada
en el terminal.
DECLARACIÓN DE VARIABLES

 Vectores
 Los vectores pueden distinguirse por:

Vector fila. Este tipo de vector es declarado mediante:
 V = [1 2 3]

Vector columna. Este otro tipo se declara:
 V = [1 ; 2 ; 3] 
DECLARACIÓN DE VARIABLES

 Matrices
 Como sabemos las matrices poseen filas y columnas, por lo que para ello se realiza una combinación de los dos
tipos de vectores:
 M = [1 2 ; 3 4 ; 5 6]
 Esto declarará un vector de tres filas y dos columnas.
ACCESO A ELEMENTOS DE VARIABLES MÚLTIPLES

 Acceso a elementos
El acceso a un elemento de un vector o matriz, se hace indicando su posición en el vector o matriz. Los vectores en este
caso pueden ser tratados como matrices, obligatoriamente los vectores columnas deben ser tratados como matrices 1XN.
En Octave la primera fila de un vector o matriz se identifica mediante 1 y la última posición se identifica mediante N.

Vector fila. Si se quiere acceder a la posición N de un vector usaríamos: V(N).


Vector Columna. Si se quiere acceder a la posición N de un vector columna: V(1,N).

Matrices: Para acceder a la posición N,M de una matriz, usaremos: M(N,M)


Esto nos puede permitir editar una determinada posición de un vector o matriz.
OPERACIONES BÁSICAS

Suma. Esta operación se realiza mediante el uso del símbolo '+'. Por lo que para realizar una suma tan solo tendremos que poner los valores a sumar:
suma = 1 + 2
Resta. Esta operación se realiza mediante el uso del símbolo '-'. Por lo que para realizar una resta tan solo tendremos que poner los valores a restar:
resta = 1 - 2
Multiplicación. Esta operación se realiza mediante el uso del símbolo '*'. Por lo que para realizar una multiplicación tan solo tendremos que poner los valores a multiplicar:
multiplicación=1*2

División. Esta operación se realiza mediante el uso del símbolo '/'. Por lo que para realizar una división tan solo tendremos que poner los valores a dividir:
división = 1 / 2

Raíz cuadrada. Esta operación se realiza mediante la función sqrt(). Por lo que para calcular la raiz cuadrada de un número N, usamos:
sqrt(N)

Exponenciales. Para calcular el exponencial de un número se utiliza el símbolo '^'. Para calcular 2 elevado a 3, se usa:
2 ^ 3.
OPERACIONES CON VECTORES Y MATRICES

En Octave podemos realizar también operaciones con matrices y vectores, como pueden ser:

Transposición.

Aritmética escalar.

Aplicación de funciones sobre matrices.

Suma y resta.

Producto escalar.

Multiplicación.

Determinantes.

Matriz inversa.

    Estas operaciones se puede realizar mediante el uso de funciones definidas por Octave, por lo que las veremos en el tema de funciones.
ENTRADA Y SALIDA

 Entrada de datos por teclado


 Para que nuestro programa en Octave sea interactivo, debemos
dar al usuario la posibilidad de hacer selección de opciones e
introducir datos por teclado cuando sea necesario. Para realizar
esta tarea, llamada de "entrada de datos", usaremos la
función input. Por ejemplo, vamos a pedir al usuario la base y la
altura de un triángulo:
 base = input('Introduce la longitud de la base: ');
 altura = input('Introduce la altura: ');
 De esta manera, cuando nuestro programa se ejecute, mostrará
al usuario el primer mensaje y quedará la espera de que el
usuario introduzca un valor numérico y pulse la tecla Intro,
almacenando el valor introducido en la variable 'base'. Después
mostrará el siguiente mensaje para recoger el valor de la altura.
ENTRADA Y SALIDA

 Cada vez que queremos mostrar en pantalla un


resultado al usuario, debemos hacer uso de las
llamadas funciones de "salida". La función más
popular de Octave para realizar dicha tarea se
llama disp. Por ejemplo, el siguiente código mostrará
el resultado de sumar dos variables:
 a = 3.14/2;
 b = sin(a);
 c = a+b;
 disp(c);
EJERCICIOS PRACTICA

• Ejercicio 1: Escribe un programa en Octave que muestre en pantalla "¡Hola, Octave!".


• Ejercicio 2: Crea un script en Octave que solicite al usuario su nombre y luego lo imprima en pantalla junto con
un saludo personalizado.
RELACIONES LÓGICAS Y OPERADORES LÓGICOS

 Operadores de comparación

x < y. Verdadero si x es menor que y.

x <= y. Verdadero si x es menor igual que y.

x == y. Verdadero si x es igual que y.

x >= y. Verdadero si x es mayor igual que y.

x > y. Verdadero si x es mayor que y.

x != y Verdadero si x es distinto que y.


RELACIONES LÓGICAS Y OPERADORES LÓGICOS

 Operadores lógicos

condicion1 && condicion2. Indica que los elementos que son unidos por este operador tienen que ser verdaderos
para que sea verdadero.

condicion1 || condicion2. Indica que al menos un elemento de los cuales son unidos por este operador tiene que ser
verdadero para que sea verdadero.
CONDICIONALES

 as sentencias condicionales se utilizan para ejecutar


líneas de código de forma opcional, para ello existen
distintas sencias condicionales entre las que podemos
encontrar:

if

elseif

else

switch
SENTENCIA IF

 La sentencia if, evalúa una condición. Si la condición es verdadera ejercutará su cuerpo, en caso contrario no lo hará, su estructura es la
siguiente:
 if condicion

    cuerpo

end
 Para entenderlo mejor vamos a ver un ejemplo donde queremos comprobar que un número sea mayor que diez, para
conseguir esto el código a introducir debería ser el siguiente:
 if n > 10

    disp("El número es mayor que diez")

end
SENTENCIA ELSEIF

 La sentencia elseif, va junto a la sentencia if. En primer lugar evalua la sentencia if y si su condición else es cierta, evalúa la condición de la sentencia elseif. Pasa exactamente igual que con la sentencia if, si la
condición es verdadera ejecuta el cuerpo, mientras que si es falsa no lo hace. Su estructura es:
 if condicionIf

    cuerpoIf

elseif conficionElseif

    cuerpoElseif

end
 Vamos a continuar con el ejemplo anterior en el que comprobamos si un número era mayor que diez, ahora queremos que también podamos saber si dicho número es menor que diez,
por ello el código sería: 
 if n > 10

    disp("El número es mayor que diez")

elseif n < 10

    disp("El número es menor que diez")

end
SENTENCIA ELSE

 La sentencia else, irá junto con con la sentencia if, también puede ir la sentencia elseif. En este caso si ninguna de las condiciones anteriores es cierta, se ejecutará el else. Su estructura es la siguiente:
 if condicionIf

    cuerpoIf

elseif conficionElseif

    cuerpoElseif

else

    cuerpoElse

end
 Finalmente si en el ejemplo anterior queremos también que compruebe si dicho número es igual a diez, tendríamos que poner:
 if n > 10

    disp("El número es mayor que diez")

elseif n < 10

    disp("El número es menor que diez")

else

    disp("El número es diez")

end
SENTENCIA SWITCH

 Si lo que buscamos es tener varios if juntos, podemos usar la sentencia switch la cual simplifica esta operación. La sentencia switch, se compara el valor de una variable o el resultado de evaluar una
expresión, con un conjunto de valores valor1, valor2, ..., cuando coinciden se ejecuta el bloque de sentencias que están asociadas. Si el compilador no encuentra coincidencia, se ejecuta la
sentencia otherwise, si es que está presente en el código. Su estructura es la siguiente:
 switch expresion

    case valor 1

        sentencias_1

    case valor 2

        sentencias_2

    case valor 3

        sentencias_3

    otherwise

        sentencias_otherwise

end
CICLO FOR

 El bucle for hace que sea más conveniente para contar las iteraciones de un bucle. La forma general para declarar un for es:
 for variable = expresion

    cuerpo

end
 Donde el cuerpo significa cualquier declaración o lista de instrucciones, expresión cualquier expresión válida, y variable puede tomar
varias formas. Por lo general, se trata de un nombre de variable simple o una variable indexada. Si el valor de la expresión es una
estructura, variable también puede ser un vector de dos elementos. 
 La expresión de asignación en el comando for, funciona de forma diferente a lo normal. En lugar de asignar el resultado completo de
la expresión, se asigna cada columna de la expresión a su vez a variable. Si la expresión es un rango, un vector fila, o un escalar, el valor
de variable será un escalar cada vez que se ejecuta el cuerpo del bucle. Si variable es un vector columna o una matriz, variable será un
vector columna cada vez que e ejecuta el cuerpo del bucle.
EJEMPLO FOR

 Para entender bien el funcionamiento de un bucle for, vamos a poner un ejemplo. Supongamos que tenemos un vector
columna, y queremos que se muestren cada uno de los elementos de este vector, por ello el código a usar será el siguiente: 
 V = [1 ; 2 ; 3 ; 4] % Vector que tenemos

[f,c] = size(V) % La función size devuelve dos valores, el primero indica el numero
de filas, el segundo el numero de columnas, por lo que se almacenan en las
variables f y c

for i = 1:f % i tomara los valores de 1 a f

    V(i,1) % mostrara los elementos del vector uno a uno

end
CICLO WHILE

 Este tipo de bucle realiza una operación mientras su condición es válida, la estructura de este tipo de bucle es la
siguiente:
  while condicion do

    cuerpo

end
 En este tipo de bucles la condición se evalúa antes de que el cuerpo se ejecute por primera vez. Si la condición es
verdadera, se entra en el cuerpo del bucle, se evaluará y ejecutará el cuerpo hasta que la condición sea falsa.
EJEMPLO WHILE

 Para entenderlo mejor vamos a ver un ejemplo, en el que vamos a tener un número que empieza en 0, y va a entrar
en un bucle while que se evaluará mientras este número sea menor que 10 y dentro del bucle iremos
incrementando en uno este número, por ello el número finalmente valdrá 10.
 n = 0

while n < 10

    n = n + 1; % El valor de dicha variable incrementa en 1 unidad

end
EJERCICIOS PRACTICA

Reto 1 Sección 1
SECCIÓN 2
FUNCIONES

 Las funciones son estructuras de código que poseen una entrada, con la cual trabaja dicha función generando una
salida.

Generalmente nosotros trabajamos con funciones del tipo y=f(x) donde f(x) es una expresión matemática en
términos de la variable x. Se calcula un valor de y (salida) cuando se proporciona un valor de x (entrada) en la
expresión.
CREANDO FUNCIONES

 Nosotros podemos crear nuestras propias funciones guardándolas en un fichero, con el fin de usarlas como las funciones predefinidas en Octave. Estas se pueden crear en:

Línea de comandos.

Fichero, estos deben tener una extensión '.m' y debe encontrarse en el directorio donde estamos ejecutando.        

 Deben presentar la siguiente estructura:   


 function variable_salida = nombre_funcion (argumentos_entrada)

    cuerpo

end
 Un ejemplo para crear una función, sería crear una función que nos de el seno de un número:
 function s = sind(x)

    s = sin(x*pi/180);

end
 A esta función se le llama por medio de la sentencia 'sind(n)', donde 'n' es el número al que queremos obtener su seno.
MATRICES

 Es fácil definir valores de matrices en Octave. El tamaño de la matriz se determina automáticamente.


 Ejemplo:

a = [1, 2; 3, 4]

Resulta en la matriz:
/ \
|1 2|
a = | |
|3 4|
\ /
MATRICES

 Los elementos de la matriz pueden ser elementos arbitrarios, como resultado las dimensiones tienen sentido
cuando combinas varias partes.
 Ejemplo:
[ a, a ]

 La expresión produce la siguiente matriz:

ans =

1 2 1 2
3 4 3 4
RANGOS Y MATRICES

Definir series de datos equiespaciados a base


de rangos es aplicable a la definición de matrices.

Habrá que tener la precaución de que las filas deben


ser todas con el mismo número de columnas:
A = [1:10; 11:20] % El resultado será la matriz A= [1 2 3...9 10 ; 11 12 ... 19
20]
LECTURA DE LAS COMPONENTES DE UNA MATRIZ

 Para leer el valor de una componente de una matriz se pone el nombre de la variable que guarda la matriz y a continuación,
entre paréntesis, la fila y la columna de la componente buscada. La primera fila y la primera columna tienen el índice 1, y
también aquí podemos referirnos abreviadamente al índice de la última fila o columna de la matriz utilizando la claúsula end:

 A = [1,2; 3, 4]
 A(1,1)
 % El resultado será: ans = 1
 A(1,end)
 % El resultado será: ans = 2
 A(end,end)
 % El resultado será: ans = 4
LECTURA DE LAS COMPONENTES DE UNA MATRIZ

  Podemos utilizar rangos para extraer una serie de valores de la matriz. En este caso el resultado será una
matriz (submatriz) con el numero de filas y columnas acorde a los rangos solicitados:
 A = [1,2,3,4; 5,6,7,8; 9,10,11,12; 13,14,15,16]
 A(2:3, 2:3)
 % El resultado será la matriz [6, 7; 10, 11]
 A([2 4],[2 4])
 % El resultado será la matriz [6, 8; 14, 16]
LECTURA DE LAS COMPONENTES DE UNA MATRIZ

 En el caso de las matrices existe una construcción especial para referirse a todos los elementos de una fila
o columna y es utilizando los dos puntos ‘:’ como índice:
 A = [1,2,3,4; 5,6,7,8; 9,10,11,12; 13,14,15,16]
 A(:,3)
 % El resultado será la columna 3
 A(2,:)
 % El resultado será la fila 2
MATRICES PREDEFINIDAS

 Hay varias funciones utilitarias que permiten construir matrices de tipos particulares:
• eye(n) Forma la matriz identidad cuadrada de dimensión n
• zeros(n) Forma una matriz de ceros cuadrada de dimensión n
• zeros(m,n) Forma una matriz de ceros de m filas y n columnas
• ones(n) Forma una matriz de unos cuadrada de dimensión n
• ones(m,n) Forma una matriz de unos de m filas y n columnas
LA FUNCIÓN SIZE()

 La función size(), recibe como parámetro una matriz y nos devuelve un vector de dos componentes con el número de filas y el número de
columnas de la matriz. La forma de la función es:

 [ nfilas, ncols] = size(A)

 Ejemplo:
 A=[123;456;789]
 dims=size(A)

 La función size() admite un segundo parámetro que si vale 1 nos devolverá el número de filas y si vale 2 nos devolverá el número de
columnas:
 Ejemplo: numfilas=size(A,1)
INVERSA, DETERMINANTE Y TRAZA DE UNA MATRIZ

 Existen funciones específicas para calcular la inversa, el determinante y la traza de una matriz cuadrada:
• inv()
• det()
• trace()
 Si la matriz es singular se producirá un error que será indicado por Octave
APLICACIÓN DE FUNCIONES A MATRICES

 En general, cuando pasemos una matriz o un vector como argumento de una función, nos devolvera una
matriz o vector de las mismas dimensiones con la función aplicada elemento a elemento. Por ejemplo:
 v=[-pi:pi/4:pi]
 sin(v)
APLICACIÓN DE OPERADORES LÓGICOS A MATRICES

 Los operadores lógicos (&, |, xor()) o relacionales (<, >, <=, >=, ==, ~=) se pueden utilizar cuando uno o los dos
operandos son matrices.
 Cuando aplicamos un operador lógico o relacional a una matriz, el operador se aplicará elemento a elemento,
obteniendo como resultado una matriz de las mismas dimensiones y cuyas componentes son valores logical,
resultado de aplicar la operación al elemento.
 A = [1, 2; 3, 4];
 B = [1, 0, 3, 0];
 C =A&B
 % El resultado será: C = [1 0; 1 0]
 D=A>2
 % El resultado será: D = [0 0; 1 1]
FUNCIONES UTILITARIAS PARA MATRICES

• repmat(A,m,n) Devuelve una matriz resultado de copiar la matriz A en m filas y n columnas. Si A es un


escalar, el resultado será una matriz mxn con valor A en todos los elementos
• diag(A) Siendo A una matriz, devuelve un vector columna con los elementos de la diagonal de A
• diag(v) Siendo v un vector, devuelve una matriz diagonal con los elementos de v ocupando la diagonal.
• blkdiag(A,B) Crea una matriz diagonal de submatrices (por bloques) a partir de las matrices A y AB
EJERCICIOS PRACTICA 2

 La variable result = '11X121XX1X21X1' contiene los resultados de los catorce partidos de futbol de la
quiniela de una jornada. La variable apuesta = '112X211X12X1XX' tiene los resultados apostados en una
determinada quiniela. Se pide: (a) Calcule en una sola expresión cuantos resultados hay acertados. (b)
Cuales son los numeros de orden de los partidos que se han acertado. (C) Cuáles son los resultados
acertados.
 Desarrolle una función llamada dado() que devuelva un número aleatorio entre uno y seis, todos ellos con
la misma probabilidad de ocurrencia.
 Modifique la función dado() del ejercicio anterior de manera que en caso de recibir un número n como
argumento devuelva un vector de n componentes cada una de ellas con el resultado de una tirada de
dado. Si no recibe argumentos seguirá devolviendo un único número entre 1 y 6. Si el parámetro n
recibido como argumento no es entero, se redondeará al entero más proximo.
EJERCICIOS

 Reto 2 Sección 2
SECCIÓN 3
VECTORIZACIÓN

 Los ciclos For pueden ser reemplazados o simplificados usando sintaxis de vectores. Los operadores * , / y ^ todos
soportan operaciones “sabias” escribiendo un punto . antes de los operadores.

 i = 1:2:100; # create an array with 50-elements


 x = i.^2; # each element is squared
 y = x + 9; # add 9 to each element
 z = y./i; # divide each element in y by the corresponding value in i
 w = sin (i / 10); # take the sine of each element divided by 10
VECTORIZACIÓN

 Una primera aproximación al objetivo de la vectorización es la de escribir código que evite los ciclos y use opresiones del tipo “whole-array”, un
ejemplo trivial seria:
 for i = 1:n
 for j = 1:m
 c(i,j) = a(i,j) + b(i,j);
 endfor
 Endfor

 Comparado con el más simple:

 c=a + b
VECTORIZACIÓN
 Muchas de las funciones en OCTAVE fueron escritas con argumentos de arreglos y vectores en mente, si te
encuentras escribiendo un ciclo con una operación muy simple, tal vez ya hay una función que hace lo que
necesitas. Las siguientes funciones son ejemplo:

Manipulación de Repetición Aritmética Forma de arreglos


indices vectorizada de grandes
dimensiones

find repmat sum reshape


sub2ind repelems prod resize
ind2sub cumsum permute
sort cumprod squeeze
unique sumsq deal
lookup diff
ifelse / merge dot
cummax
cummin
GRÁFICOS DE LÍNEAS (2D)

 Función plot()
 Esta función produce graficas en 2 dimensiones a
partir de diferentes combinaciones de argumentos:
 Ejemplos:
 plot (i / 10, w);
 title ('w = sin (i / 10)');
 xlabel ('i / 10');
 ylabel ('w');
ARGUMENTOS:

 linestyle
 ‘-’ Use solid lines (default).
 ‘--’ Use dashed lines.
 ‘:’ Use dotted lines.
 ‘-.’ Use dash-dotted lines.
ARGUMENTOS:

‘+’ crosshair
‘o’ circle
‘*’ star
‘.’ point
‘x’ cross
‘s’ square
‘d’ diamond
‘^’ upward-facing triangle
‘v’ downward-facing triangle
‘>’ right-facing triangle
‘<’ left-facing triangle
‘p’ pentagram
‘h’ hexagram
ARGUMENTOS

 color
 ‘k’ blacK
 ‘r’ Red
 ‘g’ Green
 ‘b’ Blue
 ‘y’ Yellow
 ‘m’ Magenta
 ‘c’ Cyan
 ‘w’ White
EJEMPLO
x = 1:5; y = 1:5;
plot (x,y,"g");
title ("plot() de línea verde a 45 grados");

x = 1:5; y = 1:5;
plot (x,y,"g*");
title ("plot() de estrella verde a 45 grados");

x1 = 1:5; y1 = 1:5;
x2 = 5:9; y2 = 5:-1:1;
plot (x1,y1,"bo-", x2,y2,"rs-");
axis ("tight");
title ({"plot() of circulos azules ascendiendo y cuadrados rojos descendiendo";
“conectando el dibujo de las lineas"});

https://octave.sourceforge.io/octave/function/plot.html
PLOT 3D
PLOT 3D
EJERCICIOS PRACTICA 3
GRACIAS

También podría gustarte