Você está na página 1de 12

Facultad de Ingenierı́a Quı́mica (UNL) – Matemática D — Primer Cuatrimestre 2018.

Introducción a Octave.
Octave es un software con un lenguaje de alto nivel, interactivo, diseñado como herramienta
importante para manejar problemas de una amplia variedad que requieren de cálculos matri-
ciales.
Octave tiene muchos atractivos, entre ellos la capacidad de realizar gráficos de dos y tres
dimensiones y el tener un lenguaje de programación propio en el que el usuario puede crear sus
propios archivos y funciones.
La pantalla principal de Octave, el lugar donde se escriben las órdenes y se visualizan las
respuestas, se llama Ventana de Comandos (en inglés Command Window ). Los dos caracteres
>> que se muestran en la Ventana de Comandos indicando que está a la espera de órdenes es
conocido como Prompt.
Otra parte importante es el Editor. Este es un espacio de trabajo que nos permite guardar
secuencias de comandos (llamados script) en archivos de extensión .m, asi como crear funciones,
como veremos al final de esta introducción.
Octave dispone de un completo Help con el que se puede encontrar la información que
se desee. Puede disponerse desde el prompt, anteponiendo la palabra help al comando que
queremos investigar. Por ejemplo,

>> help sqrt

o bien acceder a todo el documento HELP buscando Help/Documentation/On_Disk en la barra


de menú.
Algunas consideraciones importantes acerca de Octave:

Distingue mayúsculas y minúsculas, es decir, a y A son variables distintas.

El “;” al final de una instrucción evita la información del resultado por pantalla.

Se considera comentario todo lo que se escribe desde el caracter % (por ciento) hasta el
final de la lı́nea.

En la ventana de comandos, con las flechas ↑ y ↓ se pueden buscar comandos anteriores y


con ← y → se puede mover sobre la lı́nea de comando.

Para limpiar la ventana de comandos, escribimos clc. Si además queremos liberar las
variables utilizadas, escribimos clear all.

Sugerimos conveniente para mejor organización, crear una carpeta propia de trabajo,
por ejemplo de nombre Matematica_D, en donde puedas ir guardando tus archivos y
programas. Después de haberla creado, busca tu carpeta desde Octave a través de Current
Directory o File Browser, transformándola ası́ en tu directorio activo de trabajo.

1. Operaciones básicas
Las operaciones aritméticas más simples, se escriben como en una calculadora. En la siguiente
tabla se muestran algunas sintaxis de las mismas (pensando en a y b números reales):

1
En Octave significa:

a*b ab

a
a/b
b

a^b ab
La prioridad de las operaciones en Octave es la usual. Primero se realizan las potencias,
luego las multiplicaciones y divisiones y finalmente las sumas y restas. Por ejemplo:

a*b+c/d es lo mismo que (a*b)+(c/d)

a^2*b es lo mismo que (a^2)*b

Si queremos calcular a2b debemos usar paréntesis: a^(2*b)

Las multiplicaciones y divisiones tienen la misma prioridad, lo mismo ocurre con las sumas y
restas. Cuando quedan por resolver operaciones con la misma prioridad, MATLAB las resuelve
de izquierda a derecha. Ası́,
a
a/b*c es lo mismo que c
b
a
Si queremos calcular debemos escribir a/(b*c) o también puede ser a/b/c
bc
En lenguaje matemático escrito, se suelen utilizar paréntesis ( ), corchetes [ ] y llaves { }
para indicar distintos niveles de prioridad dentro de una expresión complicada. En Octave se
usan sólo paréntesis a estos efectos. Los corchetes y las llaves tienen otro uso que ya veremos.
Por ejemplo:
  5
b
para calcular 2 (3 + 2) ∗ a + escribimos (2*((3+2)*a+b/(c*d)))^5
cd

Ejercicio 1 (Cálculos numéricos)


Investiga las funciones sqrt, log, exp, sin, cos, abs, min y max. Puedes practicar con
ejemplos. Luego realiza las siguientes operaciones con Octave y verifica la respuesta:
(   r )3
15 2 81
a) − 1− Rta: 8.
4 9 16

−3 + 2−5 4
b) p
3
Rta: -16.8131019947240.
0, 88 − 7/8

c) ln2 (sen(π/4)) − 2e1−3π Rta: 0.1197.


(5 − i)2 √
d) + 2 + 4i Rta: -1.5344 - 6.8882 i.
3i
a2 + 2c
e) a a+c siendo a = 4, b = −a y c = 2b Rta: indefinido.
b−c − b

2
Octave almacena todos los resultados en la variable ans (por answer ), a menos que asignemos
el resultado a otra variable.
Al igual que en un lenguaje de programación, el signo = representa asignación. Por lo tanto
a la izquierda del mismo debe ir el nombre de una variable (sin sı́mbolos) a la que se le asignará
el resultado de la operación que está a la derecha.

Ejercicio 2 Experimentar qué sucede con las siguientes instrucciones:

>> a = 5*8
>> a = a + 5
>> a = 2 * a
>> a = a + 10;
>> a

2. Manipulación de matrices.
Ejercicio 3 (Manipulando vectores y matrices)
Analiza qué devuelve Octave después de escribir textualmente cada instrucción (si en un
ı́tem aparecen varias instrucciones, realı́zala de a una). Si no quieres olvidar qué es lo hace cada
comando, puedes copiar las instrucciones en un archivo .m usando el editor, comentando los
resultados después de un % .

a) A=[1 2 3; 4 5 6; 7 8 9; 10 11 12]

b) u=[-8:5] , v=[-8:1.5:5] y w=linspace(-8,5,10)

c) length(v) y size(A)

d) w(3) y A(2,3)

e) A(3,:) y A(:,3)

f ) A([2 4],:)

g) A([2:4],:)

h) A([1 4],[2 3])

i) A(2,:)=-4*A(1,:) + A(2,:)

j) A(:,[1 3])=A(:,[3 1])

k) A(2,:)=[]

l) u=u’ y u=u(end:-1:1)

m) b= v([2,5,9])

n) C=[A b’] y C=[A; b]

Ejercicio 4 (Construyendo matrices especiales)


El objetivo de este ejercicio es conocer ciertas funciones de Octave que permiten fácilmente
la creación de matrices con caracterı́sticas especiales con las que uno puede hacer experimentos.

3
1. Investiga las funciones rand, randi, zeros, ones, eye y diag. Puedes practicar con ejem-
plos.

2. Introduce los vectores y matrices que se indican, pero sin ingresar uno a uno los valores
del vector o matriz:

a) La matriz identidad I de orden 6.


b) La matriz nula Z de orden 4 × 6.
c) Un vector u fila de 6 elementos todos iguales a 2.
d) Un vector columna v de 6 valores aleatorios enteros entre 1 y 10.
e) Una matriz A diagonal de orden 6 que tenga el vector v como diagonal.
f)  
0 1 1 1 1
1 0 1 1 1
 
1
B= 1 0 1 1
1 1 1 0 1
1 1 1 1 0
g)  
1 1 1 0 1 1
1 1 1 0 1 1
C=
0

0 0 0 0 0
1 1 1 0 1 1
h)
 
0 0 0 0 0 0
0 0 0 0 0 0
 
1 0 0 0 0 0
D=
0

 2 0 0 0 0
0 0 3 0 0 0
0 0 0 4 0 0
i) Una matriz E tri-diagonal de 10×10, con los elementos de la diagonal principal igual
a 2, los de la diagonal superior igual a 1 y los de la diagonal inferior igual a -1.
j) Una matriz F de 9 × 9 con elementos aleatorios y zeros en la diagonal.

Cuando se utilizan las operaciones aritméticas + - * entre matrices (y/o vectores),


debe tenerse en cuenta la compatibilidad para que estas operaciones tengan sentido.
En Octave es posible sumar (restar) dos variables donde, una de ellas es una matriz y la otra
un escalar. El resultado de tal operación es otra matriz que se obtiene sumándole (restándole)
a cada elemento de la matriz inicial, el escalar dado.
Operaciones tales como .* ./ .^ corresponden a la multiplicación, división y poten-
ciación, respectivamente, elemento a elemento, siempre que las dimensiones de las matrices
intervinientes ası́ lo permitan. De esta manera,

1. A.*B da como resultado una matriz C cuyos elementos son Cij = Aij · Bij ; mientras que
A*B es el producto matricial usual entre matrices. Luego, éste podrá realizarse si las
dimensiones de las matrices intervinientes ası́ lo permiten.

2. A./B da como resultado una matriz D cuyos elementos son Dij = Aij /Bij y

4
3. A.^n resulta ser otra matriz cuyos elementos son (Anij ).

Ejercicio 5 (Operaciones con matrices)


Utiliza la función randi para crear matrices y vectores con enteros aleatorios entre 1 y 10
con los siguientes tamaños: A y B de 4 × 6, C, D y E de 6 × 6, F de 6 × 8, u 6-vector fila y v
6-vector columna. Luego, realiza las siguientes operaciones con las matrices obtenidas y observa
los resultados o mensajes de error que Octave pudiese devolver.

1. A+F, A+B, -3*A+3*B, -3.*A.+3.*B, u+v’ y u+v.

2. A*B, A*B’, A’*B, (A+B)*F, C*D - D*C.

3. Las mismas operaciones del ı́tem 2) pero con .* en lugar de *.

4. v*u, u*v, u*v , u.*v’, u./v’, u.^(v’) y 3.^v.

5. D^3, A^2 y A.^2.

6. F + 2, F/2, F./2, 2/F y 2./F.

7. (C+E)^2 y C^2+2*C*E+E^2.

8. log(A), exp(C), sqrt(B) y cos(F).

9. inv(C), inv(E), det(C) y det(E).

3. Resolución de sistemas lineales


Si queremos resolver el sistema lineal

3x1 + 5x2 − x3 = 8
x1 − 6x2 + x3 = 4
x1 + x3 = 2

lo primero que debemos hacer es escribirlo en forma matricial. En este caso, la forma matricial
es:     
3 5 −1 x1 8
1 −6 1  x2  = 4
1 0 1 x3 2
Para resolverlo, escribimos las siguientes lı́neas en Octave

>> A = [ 3 5 -1 ; 1 -6 1 ; 1 0 1 ];
>> b = [ 8 4 2 ]’;
>> x = A\b

El resultado de la resolución del sistema se almacenó en el vector x.


En Octave, la barra invertida \ se utiliza para resolver sistemas lineales. Desde el punto
de vista matemático, A\b es equivalente a A−1 b, que en Octave también podrı́a hacerse
escribiendo inv(A)*b. Sin embargo, calcular la inversa de A y luego multiplicarla por b requiere
de muchas más operaciones que resolver el sistema lineal Ax = b.

Ejercicio 6 (Resolviendo sistemas lineales)

5
a) Escribir en forma matricial y resolver el siguiente sistema lineal

x1 = 0
−x1 + 2x2 − x3 = 1/25
−x2 + 2x3 − x4 = 1/25
−x3 + 2x4 − x5 = 1/25
x5 = 0

b) Una generalización del inciso anterior viene dada por




 x1 = 0,
−xi−1 + 2xi − xi+1 = 1/100, i = 2, 3, . . . , 9,

x10 = 0.

Resuelva de forma análoga al inciso anterior. Sugerencia: utilice lo aprendido en el Ejercicio


4 inciso (i).

c) Ahora, considerando N = 100, resolver el sistema




 x1 = 0,
−xi−1 + 2xi − xi+1 = 1/10000, i = 2, 3, . . . , N − 1,

xN = 0.

4. Gráficos en el plano.
La instrucción plot permite dibujar en la pantalla de la PC. Si x e y son vectores de la misma
longitud, la orden plot(x,y) define atributos de la pantalla gráfica y realiza un gráfico plano de
los elementos de x contra los elementos de y. Es decir, si x = (x1 , x2 , ..., xn ) e y = (y1 , y2 , ..., yn ),
la orden mencionada da como resultado el gráfico que se obtiene uniendo los puntos (xi , yi )
consecutivamente. Para realizar el dibujo, la función plot establece un sistema de coordenadas
con escalas adaptadas en forma automática a los datos que se desean representar. Es posible
mediante otras funciones y comandos, modificar el aspecto del dibujo.
Ası́, si queremos realizar el gráfico de una función y = f (x) para x en un intervalo [a, b], se
deben generar los dos vectores x e y necesarios para plot. El primero corresponde a las abscisas
de los puntos a graficar, y son valores comprendidos entre a y b.
Para dibujar la gráfica de una función f sobre el intervalo [a, b] puedes seguir los siguientes
pasos:
>> x= a:.1:b; % x es un vector con componentes x(i) equiespaciadas por 0.1 entre a y b
>> y= f(x); % y es un vector cuyas componentes y(i) son los valores f(x(i))
>> plot(x,y) % grafica en el plano y une con segmentos de recta los puntos (x(i),y(i))

Ejercicio 7 (Graficando en el plano)


Realiza los siguientes gráficos:

a) La función f (x) = sen(x) en el intervalo [0, 2π].

b) La función f (x) = x2 en el intervalo [−1, 1].

6

x = cos t
c) La curva dada por , t ∈ [0, 2π].
y = sin t
Para esto puedes definir el vector t=0:0.01:2*pi, luego x=cos(t) e y=sin(t). Finalmente
escribir plot(x,y).

x = t cos t
d) La curva dada por , t ∈ [0, 6π].
y = t sin t

Ejercicio 8 (Otros comandos asociados a los gráficos)


Ejecuta la siguiente secuencia para dibujar dos funciones en un mismo gráfico:
>> x=0:.1:3;
>> y1=x+1;
>> plot(x,y1) % Dibuja y1
>> hold on
>> y2=x.^2;
>> plot(x,y2,’r’); % Dibuja y2 con rojo
>> grid % Realiza un cuadriculado sobre el grafico actual
>> hold off
El comando hold on congela el gráfico actual de modo que los siguientes gráficos se super-
ponen en éste. El comando hold off descongela el gráfico actual de manera que el siguiente
gráfico se realizará en una nueva grilla y el anterior desaparecerá. El comando grid coloca o
quita el cuadriculado sobre el gráfico actual.

El caracter r en la segunda ejecución de plot, hace que el gráfico se realice con color rojo.
En la siguiente tabla están algunas de las opciones para los gráficos:

Colores Tipo de lı́nea


b azul . punto
g verde o cı́rculo
r rojo x cruz
c celeste + más
m magenta * estrella
y amarillo s cuadrado
k negro d diamante
- lı́nea llena
: lı́nea de puntos
-. punto y trazo
-- lı́nea de trazos

Tipeando help plot puedes obtener más información sobre esta orden.

Otro modo de realizar gráficos superpuestos es el siguiente:

>> x=0:.1:3;
>> y1=x+1;
>> y2=x.^2;
>> plot(x,y1,’g.’,x,y2,’r’); % Dibuja y1 punteada en verde e y2
% en linea continua roja
>> grid % Realiza un cuadriculado sobre el grafico actual

7
A continuación tipea y analiza la siguiente secuencia:

>> title(’Recta y parabola’); % Coloca un titulo en el grafico


>> xlabel(’x’); % Escribe "x" en el eje horizontal
>> ylabel(’y1 e y2’); % Escribe "y1 e y2" en el eje vertical
>> text(2,3,’y1=x+1’); % Escribe "y1=x+1" en el punto (2,3)
>> gtext(’y2=x^2’); % Escribe "y2=x^2" en un lugar elegido con el mouse

Con el mouse posiciónate en un punto cerca de la parábola y haciendo clic el texto y2 = x2


aparecerá en el gráfico.

El comando axis(c), donde c=[xmin, xmax, ymin, ymax], escala los ejes de manera que
el gráfico aparece en el rectángulo [xmin, xmax] × [ymin, ymax].

Ejercicio 9 Graficar los siguientes pares de funciones sobre el intervalo [0, 1]:

a) f (x) = sen(πx), g(x) = sen(2πx)

b) f (x) = cos(πx), g(x) = cos(3πx)

c) f (x) = sen2 (4πx), g(x) = 21 − 12 cos(8πx)


!8
x
1 − 24
d) f (x) = x x2
, g(x) = e−x
1 + 24 + 384

Ejercicio 10 Graficar los siguientes pares de funciones sobre el intervalo [−π, π]:

a) f (x) = sen(x), g(x) = x.


x3
b) f (x) = sen(x), g(x) = x − .
3!
x3 x5
c) f (x) = sen(x), g(x) = x − + .
3! 5!
x3 x5 x7
d) f (x) = sen(x), g(x) = x − + − .
3! 5! 7!
¿Recuerda el Teorema de Taylor? Reflexione sobre la relación del mismo con los gráficos ante-
riores.

Ejercicio 11 Considerar los vectores x = (x1 , . . . , xN )T obtenidos en el ejercicio 6-b) y 6-c).


Graficar la solución obtenida comparando x con un vector t de N elementos uniformemente
distribuidos entre 0 y 1. Es decir, pensemos que buscamos graficar la función y = x(t), en [0, 1].

5. Creación de archivos de extensión .m.


Un script es una secuencia de comandos que deseamos ejecutar a menudo y que por lo
tanto nos gustarı́a no tener que escribirla cada vez que tenemos que usarla. Para esto podemos
guardar la lista de comandos en un archivo de extensión .m y ası́ poder ejecutarla tantas veces
como queramos con solamente escribir el nombre del archivo en el prompt de Octave.

8
Una función es similar a un script, sólo que ejecuta comandos a partir de un valor ingresado
en el prompt. La mayorı́a de las funciones de Octave están en realidad en archivos .m, y se
pueden visualizar escribiendo type xx, donde xx es el nombre de la función. (ej: type magic).
Una diferencia importante entre función y script, es que las variables definidas en una función
sólo existen dentro de ella, mientras que en un script, una vez ejecutado, las variables pasan a
formar parte de nuestro espacio de trabajo.
Para elaborar sus propios scripts o funciones, deberán generar un nuevo archivo de texto con
el nombre que ustedes quieran, siempre y cuando termine en .m, para que Octave lo reconozca.
Este tipo de archivos se pueden crear, editar y guardar con el mismo Octave o con cualquier
editor de textos (ej: Bloc de notas).

Ejemplo. Escribamos en el Editor las siguientes lı́neas:


% script de prueba
A=3
B=7
Lo guardamos con el nombre script_de_prueba.m. Finalmente, escribamos en el prompt
>> script_de_prueba

Ejercicio 12 Considerando un ı́tem a elección del Ejercicio 9, crear un script de nombre


grafico.m que al correrlo resuelva el ejercicio seleccionado.

Para que un archivo .m sea una función, tiene que empezar por la palabra function seguida
de las variables de salida entre corchetes, luego el sı́mbolo =, el nombre de la función y las
variables de entrada entre paréntesis.

Ejemplo. Escribamos en el Editor las siguientes lı́neas:


function [s]= mifun(x)
% function [s] = mifun(x)
% devuelve el cuadrado del número x
% si x es un vector devuelve el cuadrado de cada una de sus componentes
s=x.^2;
Guardarlas con el nombre mifun.m. Notar que colocamos el mismo nombre a la función
que al archivo. Para usar la función escribir en el prompt
>> mifun(10)
>> mifun([3 5])
>> x=7;mifun(x)
Observe que la variable s tiene un valor “interno” a la función, es decir no tiene un valor global
asignado. Verifique esto escribiendo en el prompt
>> s
Es decir que cuando llamamos a la función de la forma mifun(10) el resultado queda almacenado
en la variable ans, no en s (¡al igual que ocurrı́a con cualquier otra función de Octave, como
ser sqrt!). Si queremos almacenar el resultado de la función en una variable debemos proceder
de la siguiente manera

9
>> y=mifun(10)
Por otro lado, vale destacar que las tres lı́neas comentadas debajo de function [y]= mifun(x)
sirven como help para mi función. Verifiquemos esto escribiendo en el prompt
>> help mifun
Una forma alternativa a la anterior para definir una función de valores reales (o vetoriales) a
valores reales (o vectoriales), es escribir en el prompt
>> mifun = @(x) x.^2;
>> mifun([3 5])
Notar que en este último caso, una vez cerrado el programa, al reabrirlo no podrá utilizarse
mifun, mientras que en el primer caso sı́. Además, el concepto de funciones del tipo function
en Octave, va más allá del concepto tradicional de función al que estamos habituados en ma-
temática. El próximo ejercicio da cuenta de ello.

Ejercicio 13 Considerar nuevamente el sistema del Ejercicio 6 inciso (c), esta vez para cual-
quier entero positivo N . Es decir,


 x1 = 0,
−xi−1 + 2xi − xi+1 = 1/N 2 , i = 2, 3, . . . , N − 1,

xN = 0.

a) Construir una función resuelve_sistema.m que, al ingresar un entero N , obtenga el vec-


tor solución U . Verifique su funcionamiento comparando con los resultados obtenidos en el
Ejercicio 6.

b) Modificar la función para que además grafique el resultado en el intervalo [0, 1].

6. Sentencias de control.
Octave posee las sentencias de control usuales: if, for, while cuya sintaxis puede estudiarse
mediante la función help o bien en algún manual disponible. Aquı́ sólo esbozaremos algunos
ejemplos para dilucidar su uso:

Ejemplo: (uso del if )


% script que compara dos cantidades

% definimos las cantidades


A=3
B=7

if A==B %notar que para preguntar si son iguales debemos usar == y no =


disp(’A es igual a B’) % escribe en pantalla el string entre parántesis
elseif A>B
disp(’A es mayor que B’)
else
disp(’A es menor que B’)
end

10
Modifique los valores de A y B, guarde nuevamente el script y corra el script. Repı́talo para
diferentes valores de A y B que permitan corrobar su buen funcionamiento.

Ejemplo: (uso del for )

function [s]= suma(n)


% function [s] = suma(n)
% suma los primeros números naturales hasta n

% inicializamos s en cero
s=0;
% recorremos los numeros de 1 a n
for i=1:n,
% sumamos i a s
s=s+i;
end

Utilı́celo para diferentes valores de n y corrobore a mano su buen funcionamiento.

Ejemplo: (uso del while)

function [c]= dados(n)


% function [c] = dados(n)
% simula cuantos tiros son necesarios
% para obtener que la suma de dos dados sea n

% inicializamos el contador c en uno:


c=1;
% mientras la suma de dos número enteros aleatorios
% entre 1 y 6 no sea igual a n:
while (randi(6)+randi(6) != n)
% sumamos 1 a c:
c= c+1;
end

Ejercicio 14 (Sentencias if, for, while) a) Escribir la función fact.m para calcular el fac-
torial de un número. La función comienza ası́:

function f = fact(n)
% function f = fact(n)
% Calcula el factorial de la parte entera de n
% Devuelve cero si n < 0
...

Verificar su funcionamiento con algunos ejemplos.


b) Escribir la función comb.m para calcular el número combinatorio C(n, k) dado por
n!
C(n, k) = ,
k!(n − k)!
(este número se conoce también como coeficiente binomial). La función comienza ası́:

11
function c = comb(n,k)
% function c = comb(n,k)
% Calcula el numero combinatorio n! / (k! (n-k)!)
...

Verificar su funcionamiento con algunos ejemplos.

c) Considere la sucesión numérica dada por


 
1 2
xn+1 = xn + , n ≥ 0, x0 = 1.
2 xn

Determine el lı́mite de la misma, con un error no mayor que 10−8 . Para ello, considere
como estimación del error en el paso n-ésimo, a la diferencia entre xn+1 y xn . ¿A quién le
recuerda el lı́mite obtenido?

d) Modifique la función dados.m para que simule 1000 veces la cantidad de intententos requeri-
dos para obtener que la suma de dos dados sea n y obtenga un promedio de ello. Piense en
un caso donde pueda deducir la probabilidad fácilmente.¿Se corresponden los resultados con
lo esperado?

12

Você também pode gostar