Curso Octave 2013

Transcripción

Curso Octave 2013
30 de abril de 2013
Introducción a GNU Octave
Primera parte
Laboratorio Abierto de Electrónica - Ciclo de seminarios introductorios
1
Curso Octave 2013 - Primera parte
LABI Cursos
Índice
1. Introducción
3
2. Entorno de trabajo
2.1. Intérprete e ingreso de datos
2.2. Comentarios en Octave . . .
2.3. Algunos comandos generales
El comando lookfor . . . . .
El comando help . . . . . .
El comando clc . . . . . . .
El comando exit . . . . . . .
Otros comandos típicos . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3. Operaciones lógicas
6
4. Manejo de variables
4.1. Los comandos who, whos y clear . . .
4.2. Números especiales y comportamiento
El número e . . . . . . . . . . . . . .
El número pi . . . . . . . . . . . . .
Unidad imaginaria . . . . . . . . . .
5. Matrices y vectores
5.1. Declaraciones .
Explícitas . . .
Implícitas . . .
Dinámicas . . .
5.2. Dimensiones .
5.3. Índices . . . . .
3
3
4
4
4
4
5
5
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
6
7
7
7
7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
8
9
10
11
12
6. Operaciones matemáticas
6.1. Operaciones con vectores y matrices .
Operaciones elementales con matrices
Polinomios como vectores . . . . . .
La función find() . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
13
13
15
16
7. Salida de datos con formato
7.1. La función disp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2. La función printf() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
16
17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Página 2
Curso Octave 2013 - Primera parte
1.
LABI Cursos
Introducción
Octave es un programa de cálculo numérico basado en un lenguaje de scripting, que se presenta como
alternativa libre al programa privativo Matlab.
Sus aplicaciones se extienden a una gran cantidad de ramas de la ciencia, dado que, a través de la simulación, permite modelar básicamente distintos fenómenos físicos. Esto es muy útil particularmente en diversas
áreas de la Ingeniería, permitiendo determinar el comportamiento de sistemas de control, comunicaciones
y computacionales, entre otros.
Las matrices son el elemento básico para el procesamiento de la información en Octave, considerando
a los vectores y a los escalares como casos particulares de las mismas.
Por otra parte, para llevar a cabo las diferentes operaciones disponibles, se hace uso de un lenguaje
propio del programa. El mismo está optimizado para resolver cálculos numéricos en forma eficiente.
2.
Entorno de trabajo
2.1.
Intérprete e ingreso de datos
Dadas sus características, principalmente refiriéndonos al lenguaje en el que está basado, existen básicamente dos alternativas para el ingreso de datos o la forma de procesamiento de los mismos. Una alternativa
es escribir código fuente en un archivo de texto, como se trabajaría al programar en cualquier lenguaje
estándar, y luego correr el intérprete ejecutando en una terminal o consola:
$ octave
>> nombre_de_archivo
Donde primero se ejecuta el programa y desde el mismo el script y el nombre del archivo debe escribirse
sin la correspondiente extensión, de la cual hablaremos más adelante.
Cabe aclarar que para que esto funcione, es necesario encontrarse en el directorio donde está el archivo
que se desa ejecutar.
Otro modo de ejecución posible es el siguiente:
$ octave nombre_de_archivo.m
Donde el script se ejecuta desde la consola directamente y el nombre del archivo debe escribirse con la
extensión correspondiente.
En este caso no es necesario encontrarse en el directorio donde está el archivo que se desa ejecutar. En
cambio, puede ejecutarse el script especificando la ruta del mismo del siguiente modo:
$ octave ruta/nombre_de_archivo.m
Al ejecutar:
$ octave
Lo que se está haciendo en realidad es abrir el intérprete del programa, mediante el cual uno puede
interactuar con el mismo, ejecutando diferentes comandos en secuencia. Por ejemplo, si quisiéramos sumar
dos números enteros, el intérprete mostraría lo siguiente:
$ octave
>> 1 + 2
ans = 3
Página 3
Curso Octave 2013 - Primera parte
LABI Cursos
También podríamos querer realizar otras operaciones básicas como las que resuelve una calculadora
ordinaria:
>> ans*4 + (1 - 6)
ans = 7
De esta forma se pueden hacer tantas operaciones como se desee, pero todas se ejecutarán secuencialmente. Por ejemplo:
$ octave
>> 2*6^(-3)+0.45e-6*(39+2.5)/sqrt(2)
ans = 0.0092725
Otra particularidad en la forma en la que Octave muestra los resultados de sus operaciones, tiene que ver
con el uso (o no uso) del carácter “;”. Si este carácter es puesto al final de una línea a ejecutar, el resultado
de la operación no se muestra en pantalla, mientras que no terminar la línea con este carácter, le indica al
intérprete que quiero mostrar el resultado. Esto resulta de gran utilidad, cuando se hacen cálculos auxiliares
cuyo resultado no es de nuestro interés, sino del de alguna función o comando que se ejecutará luego.
Para quienes aún no se sientan preparados para utilizar un programa sin su respectivo entorno gráfico,
existe el QtOctave. La contra de este, es que no se encuentran las ultimas versiones disponibles para el
mismo.
2.2.
Comentarios en Octave
Todos los lenguajes de programación proveen alguna clase de símbolo o conjunto de símbolos que,
cuando se escriben con la sintaxis apropiada para cada caso, cumplen la función de decirle al intérprete o
compilador que esa porción de código debe ser ignorada pues no es parte del programa sino una referencia
para el programador, o algún tipo de indicación para quien lea ese código.
En Octave esos símbolos son # y %. Y son mono línea, es decir, solo comentan una línea de código
hasta la primera aparición de un salto de línea. Con lo cual, si se desea comentar un párrafo completo, debe
anteponerse alguno de estos símbolos al inicio de cada línea nueva.
2.3.
Algunos comandos generales
El comando lookfor
El comando lookfor es otro modificador, el cual busca y lista las funciones relacionadas con el patrón
que se pone a continuación en la invocación. En el siguiente ejemplo se ve un uso del mismo:
>> lookfor help
get_first_help_sentence
help
Return the first sentence of a function help text.
Display the help text for NAME.
El comando help
help es un modificador, que anteponiéndolo al nombre de cualquier otro comando o función, describe
su uso en detalle. A continuación puede verse un ejemplo de su uso:
Página 4
Curso Octave 2013 - Primera parte
LABI Cursos
>> help imagesc
‘imagesc’ is a function from the file /usr/share/octave/3.2.4/m/
image/imagesc.m
------
Function File: imagesc (A)
Function File: imagesc (X, Y, A)
Function File: imagesc (..., LIMITS)
Function File: imagesc (H, ...)
Function File: H = imagesc (...)
Display a scaled version of the matrix A as a color image. The
colormap is scaled so that the entries of the matrix occupy the
entire colormap. If LIMITS = [LO, HI] are given, then that range
is set to the ’clim’ of the current axes.
The axis values corresponding to the matrix elements are specified
in X and Y, either as pairs giving the minimum and maximum values
for the respective axes, or as values for each row and column of
the matrix A.
See also: image, imshow, caxis
El comando clc
El comando clc limpia la consola y mueve el cursor a la esquina superior izquierda.
El comando exit
exit como su nombre indica, es el comando que debemos ejecutar en el intérprete para cerrar el programa.
Otros comandos típicos
A su vez comandos típicos como cd para cambiar de directorio o ls (dir en windows), para ver el
contenido del directorio actual, funcionan dentro del intérprete.
Existen otros comandos útiles que hacen al uso del intérprete pero no son específicos de Octave, mencionamos algunos de los más comunes:
La letra Q, que nos permite ir hasta el final de una serie de datos cuando los mismos se están mostrando
en pantalla, pero su largo excede el tamaño de la ventana en la que se los está viendo. La combinación de
teclas “Ctrl-C y “Ctrl-L”, la primera finaliza la ejecución de un script que hayamos puesto a correr, y que
deseamos detener antes de que finalice la corrida completa, mientras que la segunda realiza la misma acción
que el comando clc. Por último el comando pwd muestra la ruta o path en la que nos encontramos ejecutando
Octave. Es decir, si estamos en Linux y estamos ejecutando el intérprete en el escritorio, tendremos:
>> pwd
ans = /home/usuario/Escritorio
Página 5
Curso Octave 2013 - Primera parte
3.
LABI Cursos
Operaciones lógicas
Además de los operadores aritméticos básicos, Octave dispone de operadores lógicos. A continuación
se muestran algunos ejemplos de uso:
>> 1 == 2
ans = 0
1 != 2
ans = 1
1 && 0
ans = 0
1 || 0
ans = 1
xor(1,1)
ans = 0
4.
# Condicion de igualdad
# Condicion de desigualdad (1~=2 y 1!=2 hacen lo mismo)
# AND lógico
# OR lógico
# XOR lógico
Manejo de variables
Hasta acá trabajamos con números, sin asignar tales valores a ninguna entidad. En Octave las variables
no se declaran especificando un tipo, sino que sencillamente toman el tipo del elemento que se le asigna.
Podemos por ejemplo, tener una variable que contenga indistintamente un número, un vector, una matriz o
una cadena de caracteres:
>> a = 2
a = 2
>> b = ones(1,3)
b = [1 1 1]
>> c = ’hola mundo’
c = hola mundo
También pueden definirse variables como el resultado de operaciones implícitas:
>> resultado = (2==1)
resultado = 0
Las variables en Octave pueden contener números como parte del nombre, pero no pueden comenzar
con números. Además, las mismas son case sensitive, por lo cual “a” y “A” representarán dos variables
distintas.
4.1.
Los comandos who, whos y clear
Los comandos who y whos nos permiten verificar qué variables están en memoria, y su valor, en el scope
actual. Es decir, las variables del entorno en el que estemos ubicados. Por otro lado, el comando clear, si
se lo usa sin parámetros, borra todas las variables que se encuentran cargadas en memoria al momento de
la ejecución. Inmediatamente después de su ejecución, los comandos who y whos no devolverán nada. Al
comando clear se le pueden pasar también variables específicas para que el borrado sea parcial.
Página 6
Curso Octave 2013 - Primera parte
4.2.
LABI Cursos
Números especiales y comportamiento
El número e
En el último ejemplo de la sección Intérprete e ingreso de datos, aparece la letra “e” utilizada dentro de
la expresión como exponente de notación científica. Sin embargo, dependiendo de cómo se escriba la línea a
ejecutar, “e” puede comportarse como notación exponencial, o bien, como el conocido número matemático.
Si se antepone a la letra un número cualquiera, sin otros símbolos, se tiene como resultado el número
en notación científica. En caso contrario, el intérprete devuelve el valor del número. Es decir:
>> 0.5e0
ans = 0.5
>> 0.5*e
ans = 1.3291
El número pi
A diferencia de lo que ocurre con el número de Euler (e), el número“pi” no tiene múltiples comportamientos. Sin embargo, su correcto uso es equivalente al de cualquier otro número. Esto es, resulta inválido
si el o los operadores que lo involucran, son puestos en forma implícita. Esto puede verse mejor con algunos
ejemplos:
>> pi
ans = 3.1416
>> 2*pi
ans = 6.2832
>> 6pi
parse error:
syntax error
>>> 6pi
^
Unidad imaginaria
El programa define automáticamente “i” y “j” como las unidades de números imaginarios y resulta
indistinto el uso de cualquiera de las dos. Lo que debe considerarse necesariamente es que su uso resulta
válido sin el operador multiplicación, únicamente si se las coloca a la derecha de la parte imaginaria del
número complejo. Además, tanto “i” como “j” pueden redefinirse si se lo desea. Veamos algunos ejemplos
que ilustran lo detallado:
>> i
ans = 0 + 1i
>> j
ans = 0 + 1i
>> i = 2/3
Página 7
Curso Octave 2013 - Primera parte
LABI Cursos
ans = 0.66667
>> 4.5 + 1/2i
ans = 4.5000 + 0.5000i
>> 4.5 + i1/2
error: ‘i1’ undefined near line 1 column 7
5.
Matrices y vectores
Octave es un programa que basa todo su funcionamiento en el manejo de matrices y vectores como casos
particulares de matrices. Por este motivo provee una gran cantidad de herramientas dedicadas a operar con
estos elementos.
5.1.
Declaraciones
Explícitas
Los vectores se declaran entre corchetes, y los valores pueden estar separados tanto por coma decimal,
como simplemente por espacios. Esta forma de declaración define vectores fila. Si en cambio se separan los
valores en el vector, con el carácter “;” se crea un vector columna. Entonces se tiene:
>> X = [5 6 7 9]
X =
5
6
7
9
>> X = [5, 6, 7, 9]
X =
5
6
7
9
>> Y = [1; 2; 3; 4]
Y =
1
2
3
4
>> Z = [1 2 3 4; 4 5 6 8]
Z =
1
2
3
4
4
5
6
8
Otra forma de definir matrices o vectores, es concatenando elementos ya existentes como si se estuviese
definiendo un vector tradicional, pero en donde cada componente es un vector fila o columna en sí mismo.
>> W = [X; Z]
W =
5
6
7
9
1
2
3
4
# X y Z fueron definidos en el ejemplo anterior
Página 8
Curso Octave 2013 - Primera parte
4
5
6
LABI Cursos
8
>> Q = [W [12 ; 30 ; 10]]
Q =
5
6
7
9
12
1
2
3
4
30
4
5
6
8
10
Implícitas
Existen varias funciones que permiten definir vectores y matrices de características específicas en forma implícita. Algunas funciones generan matrices o vectores con una propiedad determinada a partir de
las dimensiones que se desea obtener, mientras que otras están dedicadas a realizar transformaciones que
resultan útiles en muchas ocasiones. Algunos ejemplos de lo mencionado se ven a continuación:
>> ones(2,3)
ans =
1
1
1
1
1
1
>> zeros(8,6)
ans =
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
# Genera una matriz de unos de 2x3.
# Genera una matriz de ceros de 8x6.
0
0
0
0
0
0
0
0
>> eye(5)
ans =
Diagonal Matrix
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
# Genera una matrix identidad de 5x5.
0
0
0
0
1
>> rand(3)
ans =
0.59430
0.90898
0.23421
0.45760
0.56880
0.37455
>> diag([1 2 3], 0)
ans =
# Genera una matrix de numeros aleatorios U(0,1).
0.73868
0.72136
0.16052
# Genera una matriz con [1 2 3] en la diagonal 0.
Diagonal Matrix
Página 9
Curso Octave 2013 - Primera parte
1
0
0
0
2
0
LABI Cursos
0
0
3
Además, pueden definirse vectores que tengan una cantidad N de elementos espaciados linealmente,
mediante la función linspace(BASE,LIMIT,N), que recibe un valor de inicio, un valor de fin, y el número de
elementos del vector.
>> linspace(1,10,5)
ans =
1.0000
3.2500
5.5000
7.7500
10.0000
O bien, vectores con un paso definido manualmente, que puede ser creciente o decreciente, con la
sintaxis: BASE:STEP:LIMIT.
>> X = 1:2:11
ans =
1
3
5
7
9
11
Dinámicas
En Octave los vectores también pueden definirse en forma dinámica, es decir, sin declarar explícita, ni
implícitamente una cantidad fija de elementos. Para esto se debe ejecutar:
>> vec(1) = 1
ans = 1
>> vec(2) = 5
vec =
0
5
No obstante, cabe destacar que en general, si se va a trabajar con vectores de gran tamaño y se puede
conocer de antemano el largo final que tendrá el mismo, es conveniente declararlo con un ancho fijo y
luego ir asignando a cada posición el valor correspondiente. Esto es porque al completar cada posición
dinámicamente, Octave reasigna memoria haciendo, en general, una copia de todo el vector desde una
posición de memoria a otra por cada nuevo valor que agrega al mismo. Esto es lento y hace que toda la
ejecución de nuestro programa demore más tiempo.
Otras funciones, redimensionan matrices ya existentes, forzando su dimensión a la fijada mediante los
argumentos. Esto podrá hacerse siempre y cuando la nueva dimensión sea consistente con la cantidad de
elementos original. Utilizando nuevamente la matriz Q de ejemplos anteriores, vemos dos ejemplos del
comando reshape():
>> reshape(Q,5,3)
ans =
# Genera una matrix de 5x3 a partir de la matriz Q.
Página 10
Curso Octave 2013 - Primera parte
5
1
4
6
2
5
7
3
6
9
4
8
12
30
10
>> reshape(Q,1,15)
ans =
5
30
1
10
LABI Cursos
4
# Genera una matrix de 1x15 a partir de la matriz Q.
6
2
5
7
3
6
9
4
8
12
Existe un caso particular de reshape, en el cual la matriz se expresa en forma de vector. Para este caso
especial, existe el siguiente comando:
>> Q(:)
ans =
# Genera vector a partir de la matriz Q.
5
1
4
6
2
5
7
3
6
9
4
8
12
30
10
Nótese que el comando mencionado anteriormente, realiza la misma acción que reshape con los argumentos adecuados. En este caso, reshape(Q,15,1).
Estas funciones puede ser útiles en algunos casos en los que la información viene dada en forma de
matriz por conveniencia, pero en donde los datos deben ser extraídos de la matriz. Es decir, pensemos en el
caso en el que se quiere procesar una serie de imágenes y las mismas se preprocesaron y guardaron en una
única matriz que con tiene tantas columnas como imágenes, y tantas filas como píxeles posee cada imagen.
Concretamente si se tiene una matriz de 25x3, la misma estaría conteniendo tres imágenes cada una de 25
píxeles lo que podemos interpretar como una imagen de 5 por 5.
5.2.
Dimensiones
Existen distintas funciones que nos permiten conocer las dimensiones de los elementos con los que
trabajamos. Las funciones size() y length() devuelven distintos resultados dependiendo de qué argumentos
reciban. Reutilizando la matriz Q de nuestro ejemplo previo:
Página 11
Curso Octave 2013 - Primera parte
LABI Cursos
>> size(Q,1)
ans = 3
# Numero de filas
>> size(Q,2)
ans = 5
# Numero de columnas
>> length(Q)
ans = 5
# Valor de la dimension mas grande
5.3.
Índices
Una vez definido un vector o una matriz, para acceder a los diferentes elementos de la misma, puede
indexarse el valor pasando argumentos entre paréntesis a la matriz evaluada:
>> Q(1,2)
ans = 6
#Segundo elemento de la primer fila
>> Q(1,:)
ans =
#Todos los elementos de la primer fila
5
6
>> Q(:,4)
ans =
7
9
12
#Todos los elementos de la cuarta columna
9
4
8
Es importante notar que en Octave el primer elemento del vector tiene índice 1 y no 0, a diferencia de
otros lenguajes de programación.
6.
Operaciones matemáticas
Octave provee una serie de funciones para el manejo matemático básico, similares a las de cualquier
calculadora. Sin embargo no trabaja con elementos simbólicos (es decir, no asume que la variable que recibe
está definida ∀n R), sino que opera con variables cuyos posibles valores están definidos para una cantidad
finita de puntos.
A continuación, se ven ejemplos de comandos y funciones matemáticos típicos:
>> 2^6
ans = 64
# Potenciación
>> log(e)
ans = 1
# Logaritmo natural
>> log2(8)
ans = 3
# Logaritmo en base 2
Página 12
Curso Octave 2013 - Primera parte
>> log10(10)
ans = 1
LABI Cursos
# Logaritmo en base 10
>> e^(-2*pi)
# Exponencial
ans = 0.0018674
>> sqrt(9)
ans = 3
# Raíz cuadrada
>> abs(3+6j)
ans = 6.7082
# Módulo
>> angle(3+6j)
ans = 1.1071
# Ángulo
>> sin(pi/2)
ans = 1
# Seno
>> cos(pi)
ans = -1
# Coseno
>> tan(pi/4)
ans = 1.0000
# Tangente
Notar que la función log() implementa el logaritmo natural, y no el logaritmo en base 10. Para referirnos
al logaritmo en base 10 debemos escribir log10(). Lo mismo sucede con la base 2.
6.1.
Operaciones con vectores y matrices
Hasta ahora trabajamos con operaciones básicas sobre variables escalares. Sin embargo, las mismas
operaciones pueden definirse para manejo con vectores y matrices. Lo único que hay que respetar son las
dimensiones de las entidades con las que se trabaja.
Operaciones elementales con matrices
El siguiente ejemplo ilustra algunas operaciones básicas que pueden realizarse:
>> [1 2; 3 4] + [5 6; 7 8]
ans =
6
10
8
12
>> [1 6] * [5 6; 7 8]
ans =
47
# Suma de matrices.
# Multiplicación de matrices.
54
>> min([5 6])
# Mínimo elemento de un vector
Página 13
Curso Octave 2013 - Primera parte
ans =
LABI Cursos
5
>> max([2 9])
ans = 9
# Máximo elemento de un vector
>> min([5 9; 7 8])
ans =
# Mínimo elemento de cada columna.
5
8
>> min(min([5 9; 7 8]))
ans = 5
# Mínimo elemento de la matriz.
>> sum([5 9; 7 8])
ans =
# Suma los elementos de cada columna.
12
17
>> cumsum([5 9; 7 8])
ans =
5
12
# Matriz de sumas parciales de cada columna.
9
17
>> cumprod([5 9; 7 8])
ans =
5
35
# Matriz de productos parciales.
9
72
>> norm([1; 1])
ans = 1.4142
# Norma de la matriz.
>> det([9 8 7;5 9 5;3 1 5])
ans = 126
# Determinante de una matriz.
>> inv([9 8 7;5 9 5;3 1 5])
ans =
# Inversa de una matriz.
0.317460
-0.079365
-0.174603
-0.261905
0.190476
0.119048
>>[1 2; 3 4]’
ans =
1
2
-0.182540
-0.079365
0.325397
# Traspuesta de una matriz.
3
4
Página 14
Curso Octave 2013 - Primera parte
>> eig([9 5; 3 1])
ans =
LABI Cursos
# Autovalores de una matriz.
10.56776
-0.56776
>> cross([9 3 1],[5 5 5])
ans =
10
-40
# Producto vectorial.
30
>> [1 2 3 4]*[5 6 7 8]’
ans = 70
# Producto escalar.
>> [1 2 3 4].*[5 6 7 8]
ans =
# Producto componente a componente.
5
12
21
32
Nótese en el último ejemplo, que el punto antes de un operador lo modifica de modo que la operación
no se realiza entre matrices o vectores, sino componente a componente.
Polinomios como vectores
A veces resulta útil la modelización de un polinomio mediante un vector. Para estos casos, existen
funciones específicas que resultan de gran utilidad:
>> polyout([3 0 6 9 2])
# Representación del polinomio.
3*s^4 + 0*s^3 + 6*s^2 + 9*s^1 + 2
>> polyval([3 0],[2 9])
ans =
6
27
>> polyreduce([0 0 6 9 2])
ans =
6
9
-14
-12
# Polinomio característico de una matriz.
43
>> poly([1 2 9])
ans =
1
# Polinomio reducido.
2
>> poly([5 1; 2 9])
ans =
1
# Resultado de evaluar 2 y 9 en 3x.
29
>> roots([5 2])
# Polinomio cuyas raíces son 1 2 y 9.
-18
# Raíces de 5x+2.
Página 15
Curso Octave 2013 - Primera parte
LABI Cursos
ans = -0.40000
>> conv([5 2],[3 1])
ans =
15
11
# Producto de 5x+2 y 3x+1.
2
La función find()
Una función de gran utilidad a la hora de comprobar condiciones sobre un conjunto de datos es find().
La misma devuelve un vector con los índices de aquellos elementos del objeto pasado como argumento,
que verifican la condición pedida para dicho objeto. Esto es:
>> s = [1 7 3 9 6];
>> find(s > 4)
ans =
2
4
# Devuelve las posiciones de los elementos de s
de valor mayor a 4.
5
>> s(find(s > 4)) # Devuelve los elementos de s de valor mayor a 4.
ans =
7
9
6
>> find(s = 3)
ans =
7.
# Asigna a s el valor 3 y luego devuelve la
posicion de los elementos del nuevo s de
valor 3.
1
Salida de datos con formato
Existen una serie de funciones para mostrar datos en pantalla con diferentes formatos. La diferencian
el flujo de salida (dónde imprimen los datos que reciben), y la manera en que muestran esos datos, o bien
qué parámetros nos permiten configurar. Veremos algunas de ellas en su versión de uso más simple, y más
adelante conoceremos un uso más completo de las mismas, así como otras funciones de utilidad.
7.1.
La función disp()
Una de las funciones mencionadas es disp(), la forma más elemental de utilizarla solo requiere que
escribamos entre paréntesis el mensaje que deseamos mostrar en pantalla utilizando comillas para delimitar
nuestro texto, de modo de indicar que se trata de una “cadena de caracteres”. También puede imprimirse el
valor de una variable.
>> disp("hola mundo")
hola mundo
Página 16
Curso Octave 2013 - Primera parte
LABI Cursos
>> disp(e)
2.7183
Cabe destacar que la función disp() puede imprimir cadenas de caracteres o variables, pero no soporta
una sintaxis del tipo:
>> disp("Hola mundo", variable)
Luego para poder mostrar información con este formato, podemos recurrir a una de las funciones que
vimos previamente en esta clase, la cual convierte un número en una cadena de caracteres. Luego nuestra
variable podrá ser mostrada dentro de la cadena de caracteres, como parte de la misma, pero con la ventaja
de que cambia para cada valor que tome la variable, cosa que no sería posible si “harcodeáramos” el valor
de la misma, principalmente porque para esto deberíamos conocer siempre su valor antes de la ejecución, y
eso no es esperable.
La única diferencia es que hay que poner la expresión entre corchetes para que funcione adecuadamente.
Veamos un ejemplo:
>> t = 4 + 4;
>> disp ([ ’Valor de mi variable:’ , num2str(t,’%d’)]);
ans =
Valor de mi variable: 8
>> t = 5;
>> disp ([ ’Valor de mi variable:’ , num2str(t,’%d’)]);
ans =
Valor de mi variable: 5
Notar que disp() siempre incluye un salto de línea, por lo cual nosotros no tenemos que preocuparnos
de incluirlo.
7.2.
La función printf()
Otra función muy utilizada en Octave es printf(). Esta permite imprimir, además de cadenas de caracteres, valores numéricos con un determinado formato. A continuación vemos algunos ejemplos de uso:
>> printf("hola mundo")
hola mundo
>> x = 10
>> printf("Numero entero: %d\n", x)
Numero entero: 10
>> y = 2.1395
>> printf("Numero flotante:\%.3f\n", y)
Numero flotante: 2.139
Página 17

Documentos relacionados