0% encontró este documento útil (0 votos)
43 vistas38 páginas

GNU Octave

GNU Octave es un lenguaje de alto nivel para cálculos numéricos, compatible mayoritariamente con Matlab, y permite la personalización mediante funciones de usuario. Ofrece una interfaz de línea de comandos y es software libre bajo la Licencia Pública General GNU. El documento detalla operaciones básicas, lógicas, funciones, manejo de matrices y vectores, así como la creación de scripts y funciones, incluyendo ejemplos prácticos.
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 PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas38 páginas

GNU Octave

GNU Octave es un lenguaje de alto nivel para cálculos numéricos, compatible mayoritariamente con Matlab, y permite la personalización mediante funciones de usuario. Ofrece una interfaz de línea de comandos y es software libre bajo la Licencia Pública General GNU. El documento detalla operaciones básicas, lógicas, funciones, manejo de matrices y vectores, así como la creación de scripts y funciones, incluyendo ejemplos prácticos.
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 PDF, TXT o lee en línea desde Scribd

OCTAVE

LIC. PROF. MAXIMILIANO ALBA


¿QUÉ ES OCTAVE?

GNU Octave es un lenguaje de alto nivel, destinado principalmente a


cálculos numéricos. Proporciona una cómoda interfaz de línea de
comandos para resolver numéricamente problemas lineales y no
lineales, y para realizar otros experimentos numéricos utilizando un
lenguaje que es mayoritariamente compatible con Matlab. También
se puede utilizar como lenguaje orientado a lotes.
Es fácilmente extensible y personalizable mediante funciones
definidas por el usuario escritas en el propio lenguaje de Octave o
utilizando módulos cargados dinámicamente escritos en C++, C,
Fortran u otros lenguajes.
GNU Octave también es software libremente redistribuible. Puede
redistribuirlo y/o modificarlo según los términos de la Licencia
Pública General GNU (GPL) publicada por la Free Software
Foundation .
/
Descarga
Icono
Icono
Descripción generada automáticamente
Descripción generada automáticamente
Componentes de
la Interfaz
Directorio de trabajo

Comandos ingresados

Prompt

Scripts y funciones (archivos *.m)


Variables almacenadas
Variables almacenadas

Importante
Scripts y
funciones
(archivos *.m)

Se abren aquí

Comandos ingresados Prompt


Primeros
Pasos
1. Operaciones básicas
Empezaremos usando comandos: localiza en Octave / OctaveOnline
la ventana de comandos y en ella el prompt, allí deberás escribir.
Intentemos realizar algunas operaciones:
• 2+3 (y luego enter)
• 5*8
• 2/3
• 2^5 [El símbolo ^ se puede hacer con “alt gr + {“, seguido de
espacio u otra tecla para poder visualizarlo)]

Ahora ingresa los siguientes comandos:


• a = 2+3
• b = a-1
• a = 10 ¿Qué podemos decir sobre ans, a y b?
• b ¿Por qué crees que b no cambió su valor al modificar a?
¿Qué ocurrirá si ingreso a=a+1, es contradictorio?
2. Operaciones lógicas
Para trabajar con variables booleanas podemos usar true y false o 1 y
0 respectivamente, de forma indistinta.
Ingresa en la ventana de comandos:
a = true
b=0

Conjunción: a & b (El símbolo & se puede hacer con “shift+6”)


Disyunción: a | b (El símbolo |, en el teclado se encuentra a la
izquierda del 1)
Negación: ~a (El símbolo ~ se puede hacer con “alt+126”)

Prueba en la ventana de comandos:


• (a & b) | ~ a
• ~ false & 1
3. Operadores relacionales
Ingresa en la ventana de comandos:
• 2<3
• 3>=3
• 3>3
Interpreta la salida.

A diferencia de =, que asigna a una variable un valor, el operador ==


verifica el valor de verdad de una igualdad.
Prueba lo siguiente:
• 6/2*3 == 6/(2*3)
• 2*3 ~= 4 (~= se lee como “distinto”)

¿Qué tipo de salidas dan las operaciones de esta diapo?


4. Algunas funciones
De igual manera que en matemática tenemos funciones, aquí también, las
funciones tomarán por entrada parámetros y me devolverán una salida.

Siendo a=-2.3294, podemos calcular su:


• Valor absoluto: abs(a)
• Raíz cuadrada: sqrt(a) (sí, octave puede operar con complejos)
• Valor por redondeo: round(a) (redondea al entero más próximo)
• Valor sin su parte decimal: fix(a) (no confundir con la función parte
entera)

Otras funciones que aplican a reales son: ceil(x), floor(x), sin(x), cos(x),
tan(x), asin(x), acos(x), atan(x), sinh(x), cosh(x), tanh(x), log(x), log10(x),
exp(x).
Donde log sería nuestro ln, para base 10 tenemos log10.
Observación: pi y e pueden usarse como constantes.
5. Trabajando con vectores y matrices
Ingresa:
a = [1 2 3]
b = [1 2.5 3]
c = [1 2,5 3]
d = [1 2;5 3]

Revisa en las variables el orden de esas matrices.


¿Qué ocurre al usar espacio, coma, punto y, punto y coma?

Ingresa una matriz llamada H de 2 filas y 3 columnas


Luego ingresa H(2,3), ¿qué devuelve?

Ingresa H(2,3)=112358, ¿qué ocurre?


Ingresa H(2,:) y H(:,3), ¿qué devuelven?
Ingresa [i, j]=size(H), ¿qué ocurre con i y j?
5. Trabajando con vectores y matrices
Ingresa la matriz:
1 3 −5
𝐴= 0 2 1
4 −1 −2
• Halla su transpuesta con A' (la comilla simple se encuentra en la
tecla a la derecha del 0)
• Halla su inversa con inv(A), guardala en una variable B.
• Calcula A*B, ¿qué se obtuvo? ¿por qué crees que uno de esos
elementos vale -0.000?

También puedes realizar la adición y sustracción con + y –, crea dos


matrices A y B de orden 2x2, y calcula A+B y A-B.
5. Trabajando con vectores y matrices
Prueba las siguientes funciones:

Matriz de ceros B=zeros(3,4)


Matriz aleatoria B=rand(3,4) (los valores aleatorios son entre 0 y 1)
Matriz identidad B=eye(5)

Siendo A una matriz fila, se puede hallar una matriz cuadrada que
tome por diagonal los elementos de A: B=diag(A)

Aquí define una matriz A de orden 4x5, y revisa lo que sucede:


Matriz triangular inferior: B=tril(A)
Matriz triangular superior: B=triu(A)

Aunque A no sea cuadrada, triu tomará los elementos i,j donde i>j y
los convertirá en 0. Análogamente ocurre con tril con i<j.
5. Trabajando con vectores y matrices
Ingresa:
a = [1 2 3;4 5 6]
b = zeros(2,2)
c = eye(3)
d = [a b;c a']

Explica qué sucede con la matriz d.

Reasignemos c con c=eye(2) y vuelve a ingresar d = [a b;c a']


¿Qué sucedió?
6. Visualización en la consola
Para borrar todo lo escrito (esto no elimina las variables definidas) usa el
comando clc.

Ingresa:
• 2/7 (como podrás ver se visualizan sólo 4 decimales)
• format long
• 2/7 (de ahora en adelante podrás visualizar 15 decimales)
Más información sobre format:
[Link]

Puedes mostrar un cierto texto como salida, ingresa lo siguiente:


• disp(30)
• disp('Hola!')

(también puedes usar comillas dobles, en lugar de las simples)


Podemos combinar datos que guardamos en variables con texto,
prueba lo siguiente:
• cartas = 50
• disp(['La baraja española con comodines tiene ',num2str(cartas),'
cartas.'])

¿Cómo funciona?
• [] es una matriz fila (en lugar de comas pueden usarse espacios,
pero suele usarse para que sea más visible)
• num2str() es una función que convierte un número en una cadena
de texto.
• Las componentes de ese vector serán cadenas.
• disp() muestra el contenido del vector.
Otra función para imprimir: printf

Ingresa:
printf("La baraja española con comodines tiene %d cartas.\n",cartas)

La función tiene como ingreso una cadena, y luego parámetros


separados por comas. En la cadena aparece un %d, este indica que
aquí irá una variable numérica con signo (+/-). Al finalizar hay una
coma y sigue cartas, el valor de cartas aparecerá en lugar de %d en
la visualización. Al final de la cadena figura /n esto ingresa un salto de
línea, para evitar que el texto se “pegue” a una próxima salida.

Ingresa:
a=30
b=5
printf("El resultado de %d + %d es %d\n" ,a,b,a+b)
Veamos que ocurre con la función:
printf("El resultado de %d + %d es %d\n" ,a,b,a+b)

Aquí en el primer %d irá a, en el segundo b, y en el tercero a+b. Es en


el orden de los parámetros.

No solamente se puede utilizar %d, sino que en caso de querer


mostrar el contenido de otro tipo de variable debemos poner otro %,
para más información consulta aquí:

[Link]
7. Scripts .m
Imagina que tienes una rutina de comandos a realizar, por ejemplo:
Dados los números a y b, te interesa calcular su suma, indicar dicho
valor con una amistosa frase, calcular su producto e indicar su valor
con otra frase.

Harías algo como esto:


• a=5
• b=10
• s=a+b
• disp(['La suma de a y b es: ',num2str(s)])
• p=a*b
• disp(['El producto de a y b es: ',num2str(p)])
7. Scripts .m
Tener que hacerlo todo el tiempo, sería repetitivo, puedes entonces
crear un script, y dejar guardados esos comandos en un archivo de
extensión .m para llamarlo cuando quieras.
Para crearlo,
• En Octave: Archivo>Nuevo>Nuevo guion(script)
• En OctaveOnline: Archivos>

Crea un archivo llamado sumaproducto.m, con esto en su interior:


• a=5
• b=10
• s=a+b
• disp(['La suma de a y b es: ',num2str(s)])
• p=a*b
• disp(['El producto de a y b es: ',num2str(p)])
Recordá guardar los cambios.
7. Scripts .m
Ahora en la ventana de comandos ingresa:
sumaproducto ¿Qué ha ocurrido?

Ahora no queremos ver las lineas que dicen a, b, s , p, así que


modificaremos el código así:
• a=5;
• b=10;
• s=a+b;
• disp(['La suma de a y b es: ',num2str(s)])
• p=a*b;
• disp(['El producto de a y b es: ',num2str(p)])

Guarda los cambios y vuelve a ejecutar sumaproducto.


7. Scripts .m
Haremos otra modificación:

• a=input('Ingresa el valor de a: ');


• b=input('Ingresa el valor de b: ');
• s=a+b;
• disp(['La suma de a y b es: ',num2str(s)])
• p=a*b;
• disp(['El producto de a y b es: ',num2str(p)])

Guarda los cambios y vuelve a ejecutar sumaproducto.


¿Qué hace el comando input?
8. Funciones .m
Los scripts sirven para ejecutar comandos secuencialmente, no
aceptan parámetros de entrada desde la ventana de comandos. Esto
último será posible definiendo funciones.

Vamos a crear una función llamada arearectangulo, que tome por


entrada la base y la altura, y devuelva su área.

Para ello creamos un archivo .m llamado arearectangulo.m.


• En Octave: Archivo>Nuevo>Nueva función…
• En OctaveOnline: Archivos>
Si lo haces desde Octave, borra todo el texto que autogenera.
8. Funciones .m
Ingresa el siguiente código en el archivo y guárdalo:

function retval = arearectangulo (base, altura)


retval = base*altura;
endfunction

Ahora ve a la ventana de comandos e ingresa


arearectangulo(3,10)
¿Qué devuelve?

Nota: Solamente puede haber una sola función por archivo .m.

En la siguiente diapo veremos su funcionamiento.


8. Funciones .m
1° línea: “function retval = arearectangulo (base, altura)”
• retval puede llamarse con el nombre que quieras, pero será el
valor de retorno de la función.
• arearectangulo es el nombre de la función, debe coincidir con el
nombre del archivo .m
• base y altura serán los parámetros que ingresarán. Los
utilizaremos en el cuerpo de la función.

2° línea: “retval = base*altura;”


• Define a retval como base*altura, dado que retval era el valor
definido como retorno, esto será lo que devuelva nuestra función.

3° línea: “endfunction”
• Indica que aquí finaliza la función.
9. Funciones anónimas
Veamos la sintaxis correspondiente a una función anónima:

cuadrado = @(x) x^2;

Su nombre es cuadrado, el parámetro que ingresa es x, y devuelve x^2.

Las funciones anónimas se pueden definir tanto en la ventana de


comandos, como en archivos .m (scripts y funciones).

Prueba ingresarla en la ventana de comandos, y luego llámala en la misma


ventana usando cuadrado(5).

Más información:
[Link]
[Link]
10. Comentarios
Para entender nuestro código y el de otros, podemos ingresar
comentarios. Para ello debemos escribir # o % seguido de lo que
vayamos a comentar. Todo lo comentado no se ejecuta, así que
puede ser una buena opción para comentar código que no queremos
borrarlo, pero no queremos que se ejecute. Pensando en esto último
puede ser útil saber cómo comentar varias líneas, se empieza con %{
y se termina con %}

Ejemplos (lo verde no se ejecuta):


s=2+3
#Esto es un comentario %{s=1
s=2+3 #aquí s devolverá 5 s=5
s=500 %}
s=s+1
I. Actividades (Parte I)
S. Scripts
1. Crea y ejecuta un script, que pida ingresar un número, y devuelva
la frase “Su doble es …”
2. Crea un script, en el que defina una matriz cuadrada A de
elementos aleatorios de orden 10, y calcule su determinante.
Deben mostrarse ambas.

F. Funciones
1. Crea una función que obtenga la mantisa de un número.
2. Crea una función que redondee un número ‘n’ a ‘d’ decimales.
3. Crea una función que calcule el valor de verdad de:
𝑝 ∧ (𝑞 ∨ 𝑝 ⇒ 𝑞 )
Tomando como parámetros a p y q.
11. Control de flujo de ejecución
Hasta ahora habíamos trabajado con scripts y funciones que son una
secuencia de comandos que se ejecutan linealmente.
Es posible saltar ciertas lineas o repetir algunas según se cumplan o
no condiciones que indiquemos.

Veremos las siguientes estructuras:

• IF
• FOR
• WHILE

(también hay estructuras SWITCH y DO, pero trabajaremos primero


las básicas)
11.1. IF
IF permite ejecutar ciertas lineas si se cumple una condición y en
caso contrario permite ejecutar otras lineas con la instrucción ELSE

Su estructura es:
if (condición)
comandos a realizar si la condición es verdadera
endif

O también:
if (condición)
comandos a realizar si la condición es verdadera
else
comandos a realizar si la condición es falsa
endif
11.1. IF
Ejemplo: (en un archivo .m ingresa lo siguiente)

a=5;
if (a>3) #la condición debe ser un valor booleano
disp('a es mayor que 3')
else
disp('a no es mayor que 3')
endif

Ejecútalo y observa lo que sucede, luego cambia la primera línea por a=-4;
y vuelve a ejecutar.

Observaciones:
• Si no se necesita el caso contrario puede no usarse else.
• Si bien el espacio delante de disp no es necesario, es una práctica
llamada identar, para hacer más legible el código.
11.2. FOR
FOR permite repetir un código n veces.
Su estructura es:
for variable=expresión
bloque a repetir
endfor
Ejemplo concreto (pruébalo en un script):
for i=1:10
disp(i)
endfor
Aquí i empezará tomando el valor 1, se ejecutará el cuerpo del for que en
este caso es un display así que mostrará 1, se le sumará 1, como i es
menor o igual que 10 volverá a ejecutarse el bloque así que esta vez
mostrará 2, luego se le sumará 1 y volverá a ejecutarse mostrando 3…
hasta llegar a i=11 donde no repetirá más el bloque puesto que 11>10.
11.2. FOR
Otro ejemplo (pruébalo en un script):
for i=[Link]
disp(i)
endfor

A diferencia del anterior aparece entre el 1 y el 10 un 2, 2 será un


“valor de paso” (por defecto el valor de paso es 1)
Ahora al ejecutarse mostrará los números 1 3 5 7 9, seguiría 9+2=11
pero 11>10 entonces no se ejecuta.
11.2. FOR
Ejemplo para ejecutar y pensar…
Crea una función llamada sumauno.m, con el siguiente código:

function retval=sumauno(matriz)
[filas,columnas]=size(matriz);
retval = zeros(filas,columnas);
for i=1:filas
for j=1:columnas
retval(i,j)=matriz(i,j)+1;
endfor
endfor
endfunction

• Ejecuta: sumauno([1 -1 5; 2 3 0]).


• ¿Qué relación encuentras entre la matriz de salida y la de entrada?
• Describe el funcionamiento del código.
11.3. WHILE
Similar al FOR, el comando WHILE permite ejecutar repetitivamente
un bloque de código mientras se cumpla una condición.

Su estructura es:
while (condición)
bloque a repetir
endwhile

En condición puede ir cualquier expresión que devuelva un valor


booleano.

Observación: si en condición pongo simplemente true, creo un bucle


infinito. También puedo generar un bucle infinito sin buscarlo por
accidente, para detener la ejecución en tal caso presiona “ctrl+c”.
11.3. WHILE
Ejemplo:
(crea un script y ejecútalo)
Mientras b es mayor que 0 se ejecuta la
repetición del cuerpo del while.
b=10;
while (b>0) ¿Qué sucede aquí?
disp(b) • (empieza el script)
a=b/2+1; • b=10
b=b-a; • (ingresa while)
• muestra el valor de b, y se calculan
endwhile a=6, b=4
disp('Finalizado.’) • (repite ya que 4>0)
• muestra el valor de b, y se calculan
Verás que su salida es: a=3, b=1
• (repite ya que 1>0)
10 • muestra el valor de b, y se calculan
4 a=1.5, b=-0.5
1 • (sale del while, ya que b=-0,5 no es >0)
Finalizado. • Muestra el texto de finalizado
II. Actividades (Parte II)
Crea una función que tome por parámetro…

1. …un número entero y muestre “Es par” o “Es impar”.


Nota: Para calcular restos puedes usar la función mod(a,b), que
devuelve el resto de dividir a por b (a módulo b).

2. …un número natural y muestre “es primo”, “es compuesto”, “es 1”.

3. …un número natural y devuelva sus cifras en orden invertido. Por


ejemplo, si ingresa 10303456 deberá devolver 65430301.

También podría gustarte