2. OCTAVE
Octave o GNU Octave, fue desarrollado por GNU Octave –
http: // www.octave.org
Es una herramienta de comandos en línea para resolver
problemas numéricamente y es muy compatible con MATLAB.
MATLAB es una marca comercial de The MathWorks y, como
tal, es un software patentado sujeto a licencia.
Mientras que Octave comparte muchas de las capacidades de
MATLAB con el mérito adicional de ser distribuido libremente
bajo la Licencia Pública General de GNU.
2
3. OCTAVE
Octave Packages available at
http://octave.sourceforge.net/packages.php
MATLAB Toolboxes available at
http://www.mathworks.co.uk/ products/
3
6. 6
VENTANA DE COMANDOS
El indicativo “>>”, indica que
Octave/MATLAB espera una orden
La tecla <ENTER> se pulsa para
ejecutar la orden
Las teclas <>, <> permiten recuperar
los textos escritos anteriormente.
“%” antecede a un comentario
6
7. VARIABLES Y CONSTANTES EN MATLAB
Asignación de valores a los nombres de las variables
>> x = 4 <ENTER>
x = 4
>> X = 5 <ENTER>
X = 5
>> d=-7; <ENTER>
7
9. OPERACIONES ARITMETICAS
Las operaciones con cantidades
escalares se manejan de manera directa como
en otros lenguajes de computación. Los
operadores comunes en orden de precedencia
son
^ a^b ab
*,/ a*b, a/b ab, a/b
AB A-1B
+,- a+b, a-b a+b, a-b 9
11. Todos los cálculos en MATLAB y Octave se realizan con doble
precisión, es decir, se utilizan unas 15 cifras significativas.
El formato mostrado de la salida es manejado por el formato del
comando. Si se cambia el formato y desea volver al valor
predeterminado, simplemente use el comando sin más argumentos
de entrada.
Un formato común es el dado por
format compact
que suprime las líneas en blanco en la salida y le permite un mejor
uso del estado real del espacio de trabajo. 11
13. >> 2^5
ans = 32
>> pi % constante pi
ans = 3.1416
>> format long
>> pi
ans = 3.141592653589793
>> format short
>> pi
ans = 3.1416
>> format long
13
14. >> 1e-5
ans = 1.000000000000000e-05
>> realmax % Mayor número real
ans = 1.797693134862316e+308
>> realmin % Menor positivo
ans = 2.225073858507201e-308
>> pi
ans = 3.141592653589793
>> eps % eps de la máquina
ans = 2.220446049250313e-16
>> 1+eps>1 % 1 == Verdadero
ans = 1
>> 1+(eps/2)>1 % 0 == Falso
ans = 0
14
16. 16
FUNCIONES MATEMATICAS
PREDETERMINADAS EN MATLAB
abs(x) Devuelve el valor absoluto de x
sqrt(x) Devuelve la raíz cuadrada de x
nthroot(x,n) Devuelve n-ésima raíz real de x
sign(x) Función signo
rem(x,y) Calcula el residuo de x/y
exp(x) Calcula ex
log(x) Calcula ln(x), el logaritmo natural de x
log10(x) Calcula log10(x)
17. FUNCIONES MATEMATICAS
PREDETERMINADAS EN MATLAB
sin(x) Encuentra sen(x), x en radianes
cos(x) Encuentra cos(x), x en radianes
tan(x) Encuentra tan(x), x en radianes
sinh(x) Encuentra senh(x), x en radianes
cosh(x) Encuentra cosh(x), x en radianes
asin(x) Encuentra arcsen(x), x[-1,1]
sind(x) Encuentra sen(x), x en grados sexagesimal.
asind(x) Encuentra arcsen(x) en grados sexagesimal.
17
18. » pi
ans =
3.1416
» sin(pi/2)
ans =
1
» tan(pi/4)
ans =
1.0000
» exp(1.0)
ans =
2.7183 18
19. 19
>> abs(-5)
ans = 5
>> sqrt(64)
ans = 8
>> nthroot(-32,5)
ans = -2
>> sign(-4)
ans = -1
>> sign(0)
ans = 0
>> sign(45)
ans = 1
20. 20
>> rem(13,4)
ans = 1
>> exp(1)
ans = 2.718281828459046
>> exp(2)
ans = 7.389056098930650
>> log(exp(1))
ans = 1
>> log(10)
ans = 2.302585092994046
>> log10(10)
ans = 1
21. 21
Funciones matemáticas predeterminadas en Octave/MATLAB
factor(x) Encuentra los factores primos de x
gcd(x,y) Encuentra el mcd de x
lcm(x,y) Encuentra el mcm de x
rats(x) Representa x como fracción
factorial(x) Devuelve x!
primes(x) Encuentra todos los números primos menores de x
isprime(x) Devuelve 1 si x es primo sino 0
round(x) Redondea x al entero más cercano
fix(x) Redondea (o trunca) x al entero más cercano a cero.
floor(x) Redondea x al entero x más cercano
ceil(x) Redondea x al entero x más cercano
22. 22
>> factor(18)
ans = 2 3 3
>> gcd(6,9) % mcd de 6 y 9
ans = 3
>> lcm(6,9) % mcm de 6 y 9
ans = 18
>> rats(0.2)
ans = 1/5
>> factorial(3)
ans = 6
23. 23
>> primes(30)
ans =
2 3 5 7 11 13 17 19 23 29
>> isprime(111)
ans = 0
>> isprime(101)
ans = 1
24. 24
ARREGLOS :
Variables del tipo arreglos unidimensionales :
Puede crear un vector fila (renglón fila) con :
» d =[ 2 3 4 45] <ENTER>
d =
2 3 4 45
o también puede con : d =[ 2, 3, 4, 45]
Elementos de d son: d(1),d(2),d(3), d(4)
» d(1) <ENTER>
ans =
2
25. Puede crear un vector columna con :
» a=[ 2<ENTER>
4<ENTER>
5<ENTER>
8]<ENTER>
a =
2
4
6
8
o también puede con : a=[ 2 ;4; 6; 8] o con
a=[ 2 4 6 8]'.
El símbolo ' (TECLA <?/'> ) representa al
símbolo T
de la transpuesta de una matriz. 25
26. El tamaño de un vector se ajusta
automáticamente.
El número puede incrementarse definiendo
elementos adicionales.
» z = [2 4 6 8] <ENTER>
z =
2 4 6 8
Insertando un quinto elemento con
contenido 3:
» z(5) = 3<ENTER>
z =
2 4 6 8 3
26
27. Insertando un séptimo elemento con contenido 12:
» z(7) = 12<ENTER>
z =
2 4 6 8 3 0 12
Insertando un elemento al final de z:
» z = [z 15] <ENTER>
z =
2 4 6 8 3 0 12 15
Insertando un vector fila después del
final de z:
» z = [z [2 6]] <ENTER>
z =
2 4 6 8 3 0 12 15 2 6
27
28. Insertando un vector fila al inicio de
z de la siguiente manera:
» z = [ [-2 -6] z] <ENTER>
z =
-2 -6 2 4 6 8 3 0 12 15 2 6
Esto también es válido para vectores
columna.
28
29. Para el caso de un vector columna.
>>w=[ 2 ;4] <ENTER>
w =
2
4
Insertando el vector columna [5;3] al
inicio y 7 después del último elemento
del vector w:
>> w=[[5;3];w;7] <ENTER>
w =
5
3
2
4
7
29
30. Otra manera de crear vectores fila
Ejemplo: a) Para definir el vector fila
y =[ 2.0000 2.4000 2.8000 3.2000 3.6000 4.0000]
» y=2:0.4:4<ENTER>
y =
2.0000 2.4000 2.8000 3.2000 3.6000 4.0000
30
31. Ejemplo: b) Para definir el vector fila
w =[ 2.0000 1.9000 1.8000 1.7000 1.6000 1.5000]
» w=2:-0.1:1.5<ENTER>
w =
2.0000 1.9000 1.8000 1.7000 1.6000 1.5000
Ejemplo: c) Vamos a definir en t los
elementos : 0.0, 0.1, 0.2, 0.3, ... , 2.0.
» t=0:0.1:2<ENTER> 31
32. 32
Ejemplo: d) Para definir un vector columna
>> y=(2:0.4:4)'<ENTER>
y =
2.0000
2.4000
2.8000
3.2000
3.6000
4.0000
También se puede escribir:
y=[2:0.4:4]'
33. 33
>> x=[2, 7, 3, 7, -9]
x =
2 7 3 7 -9
>> min(x)
ans = -9
>> max(x)
ans = 7
S
sort(x)
format compact
47. » a./b
ans =
0.5000 -5.0000 1.0000
3.0000 -0.5000 7.0000
» a.^2
ans =
1 25 4
9 1 49
» a^2
??? Error using ==> ^
Matrix must be square.
47
48. 48
Cadenas (Strings )
Una cadena en Octave/MATLAB esta definido por apostrofes:
>> nombre = ' La Molina'
nombre = La Molina
>> nombre(2)
ans = L
Tamaño de una cadena
>> long1=length(nombre)
long1 = 10
Longitud o tamaño de una cadena
>> size(nombre)
ans =
1 10
49. 49
Listando en orden inverso las
componentes de la cadena nombre
>> for i=long1:-1:1
nomb1(i)=nombre(long1+1-i);
end
>> nomb1
nomb1 = aniloM aL
50. 50
Los apostrofes de una cadena deben ser digitados dos veces:
>> 'John''s cat'
ans = John's cat
Las cadenas pueden componerse justamente como matrices
numéricos
>> nomb1='Julio'
nomb1 = Julio
>> apellido='Cardenas'
apellido = Cardenas
51. 51
>> nombre=[nomb1,apellido]
nombre = JulioCardenas
>> nombre=[nomb1, ' ',apellido]
nombre = Julio Cardenas
>> nombre=[nomb1,apellido]
nombre = JulioCardenas
Se puede extraer una parte de una cadena:
>> apellido=nombre(6:length(nombre))
apellido = Cardenas
52. 52
COMANDOS STRING
abs(cad) : retorna un vector con el código ASCII para los caracteres en la
cadena.
>> abs('1')
ans = 49
>> abs('012')
ans = 48 49 50
char(x): convierte los enteros (código ASCII) en el vector x a caracteres de
acuerdo al conjunto elegido de caracteres.
>> char(94)
ans = ^
>> char(91)
ans = [
>> char(93)
ans = ]
>> char(92)
ans =
53. 53
num2str (f) : convierte el escalar f en una representación en formato
punto-flotante, convirtiendo a 4 dígitos y exponencial fuera es requerido.
>> num2str(13.5555555)
ans = 13.5556
num2str(f, k) : convierte el escalar f en una representación en formato
punto-flotante con k dígitos.
>> num2str(135.12345678,7)
ans = 135.1235
int2str(n) : convierte el entero n en un representación del tipo cadena.
>> cad1=int2str(657)
cad1 = 657
str2num(cad) :retorna el valor numérico de la cadena cad.
>> str2num('234')+1
ans = 235
54. >> str1='t';
>> str2='abc';
>> str3=[str1,str2] % Concatena (une) las cadenas str1 y str2
str3 = tabc
>> str3=[str1,' ',str2]
str3 = t abc
>> nombre =['El nombre es:'; nomb, ' ' , apell]
nombre =
El nombre es:
Juan Campos
>> s1='Continuar';
>> s2='Parar';
>> strcmp(s1,s2) % Compara las cadenas s1 y s2
ans = 0
>> strcmp(s1,'Continuar') % Compara las cadenas s1 y s2
ans = 1
54
55. Definición de funciones en línea
55
>> format compact
>> g = inline( 'x.^2+x.*sin(pi*x/2)+exp(x)./(x+2)')
g = f(x) = x.^2+x.*sin(pi*x/2)+exp(x)./(x+2)
>> g(1)
ans = 2.906093942819682
Otra manera: g = @(x) x.^2+x.*sin(pi*x/2)+exp(x)./(x+2)
>> f = inline( 'x+2+y')
f = f(x, y) = x+2+y
>> f(3,7)
ans = 12
Otra manera: f = @(x,y) x+2+3*y
57. GRAFICAS CON MATLAB
Comando plot:
Sintaxis: plot (X,Y)
Plotea el vector Y vs el vector X.
Si X o Y es una matriz, entonces el vector
es ploteado vs las filas o columnas de la
matriz, dependiendo si el vector es fila o
columna.
57
59. Ejemplo: Para graficar las funciones
f(t)=t Sen t, 0 t 6, y g(t)=t^2, 0 t 6
» t=0:0.1:6;
» y=[t.*sin(t); t.^2];
» plot(t,y)
0 1 2 3 4 5 6
-5
0
5
10
15
20
25
30
35
40
59
Lo mismo se obtiene si se escribe
» t=0:0.1:6;
» plot(t,t.*sin(t),t, t.^2)
60. Sintaxis plot (X,Y,S):
S es un carácter o cadena (string)
compuesto de uno o de todos los
elementos de las siguientes tres
columnas:
60
61. Color Tipo de marca Tipo de línea
y yellow . punto - línea continua
m magenta o círculo : línea punteada
c cyan x marca-x -. línea raya y punto.
r red + más -- línea …
g green * estrella .- línea continua con
b blue s cuadrado puntos en los datos
w white d diamante
k black v triángulo (abajo)
^ triángulo (arriba)
< triángulo (izquierdo)
> triángulo (derecho)
p estrella de 5 puntas
h estrella de 6 puntas
61
64. plot(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...)
combina las gráficas definidos por las
ternas (Xk, Yk, Sk),
Ejemplo: Graficar las funciones
f(x) = x Sen x , 0 x 6,
g(x) = x^2 , 1 x 5,
» x1=0:0.1:6;
y1=x1.*sin(x1)
x2=1:0.1:5;
y2=x2.^2;
plot(x1,y1,'g.-', x2,y2,'y*') 64
66. Para etiquetar los ejes:
xlabel('texto') adiciona el texto junto al eje X.
ylabel('texto') adiciona el texto junto al eje Y.
Para colocar un título a un gráfico:
Title ('text')
adiciona texto como titulo en la parte superior
Para anotar un texto:
text(X,Y,'string')
adiciona el texto entre comillas en la posición
(X,Y) donde las unidades son las usadas
actualmente.
66
67. Ejemplo: Para graficar las
funciones
f(x) = x Cos x , -3 x 4,
» x=-3:0.2:4;
» y=x.*cos(x);
» plot(x,y,'g.-')
» xlabel('X')
» ylabel('Y')
» title('G R A F I C O')
» text(2,0,'f')
» text(-2,-3,'f(x) = x cosx')
67
69. grid on : para agregar una retícula a la
gráfica.
grid off : para desactivar(eliminar) la retícula
de la gráfica.
» grid on
Se puede redibujar una figura en forma
cuadrada con:
» axis('square')
Los ejes coordenados y las marcas de escala
pueden omitirse con:
» axis('off')
Este efecto se cancela con
» axis('on') 69
70. 70
El máximo y el mínimo de las coordenadas
en la gráfica
se pueden especificar con
» axis([x_min, x_max, y_min, y_max])
» legend('cadena 1', 'cadena 2', etc)
Le permite agregar una leyenda a su
gráfica. La leyenda muestra un modelo
de la línea y menciona la cadena que
especificó.
74. 74
Gráfica de relaciones
Se quiere solucionar el sistema no lineal y²-x²-1 =
0, x²+y²-4 = 0
Graficando para obtener un punto inicial.
>> ezplot('y^2-x^2-1')
>> hold on
>> ezplot('y^2+x^2-4')
>> ezplot('x*y') % para graficar los ejes
>> hold off
75. 75
-6 -4 -2 0 2 4 6
-6
-4
-2
0
2
4
6
x
y
x y = 0
79. 79
Gráficas en coordenadas polares:
polar (TETA, RO)
Produce una gráfica usando las
coordenadas polares del ángulo TETA en
radianes, vs el radio RO.
polar (TETA, RO, S)
Con la cadena S se especifica el estilo de
línea.
80. 80
Ejemplo: Para graficar las funciones
r = t e-t
, 0 t ,
» t=0:0.1:pi;
» r=t.*exp(-t);
» polar(t,r)
» title('Gráfica polar')
82. 82
CONTINUANDO CON GRAFICOS EN 2D
En algunas ocasiones se tiene una gráfica y luego se quiere
graficar otra. Para ello se usa la instrucción:
hold on
y para desactivar:
hold off
Si se quiere graficar otra figura sin dañar las anteriores y la
actual, se usa la instrucción :
figure
91. 91
FUNCIONES PARA LA CONSTRUCCION
DE MATRICES
eye matriz identidad
zeros matriz de ceros
ones matriz de unos
diag más adelante en un ejemplo.
triu parte triangular superior de una
matriz incluido la diagonal
tril parte triangular inferior de una
matriz incluido la diagonal
rand matriz generada aleatoriamente
94. 94
» a
a =
3 5 6
8 2 5
4 7 1
» triu(a)
ans =
3 5 6
0 2 5
0 0 1
95. 95
» tril(a)
ans =
3 0 0
8 2 0
4 7 1
» c = rand(3,4)
Descomposición LU de la matriz A:
» [L1, U]=lu(A)
96. 96
FUNCIONES QUE REALIZAN TAREAS.
PROGRAMAS USANDO ARCHIVOS M-file
Haydos tipos dearchivos .m:
- Archivos deinstrucciones
- Archivos defunciones.
97. 97
Archivos de instrucciones :
Un archivo de instrucciones consiste de una
sucesión de instrucciones normales de
Octave/MATLAB.
Las variables en un archivo de instrucciones son
globales y, por tanto, cambiarán los valores del
espacio de trabajo.
Los archivos de instrucciones son utilizados a
menudo para introducir datos en una matriz
grande.
98. 98
Archivos de funciones:
Los archivos de funciones hacen que
MATLABtenga capacidadde crecimiento.
Sepuedencrearfunciones específicas paraun
problem
a concreto, y, a partirdesuintroducción,
tendránel m
ismorangoquelasdem
ás funciones
del sistem
a.
Las variables en las funciones son locales.
Tam
bién se puede declarare una variable
com
o global.
100. 100
Creando un archivo de variables inicializados
%datos1.m
%Archivo de variables inicializadas
a=[2 3; 4 5];
b=[2 3]';
Para cargar los datos
>> datos1
>> a
a =
2 3
4 5
>> b
b =
2
3
102. 102
Instrucción for ... end:
Sintaxis:
for var = expresión
instrucción_1
instrucción_M
end
for var = expresión, instrucción_1,...,instrucción_M end
donde
var : es un nombre de variable adecuado
Expresión : usualmente tiene la siguiente forma
Inicio:Incremento:Fin ó Inicio:Fin
103. 103
Inicial: valor inicial que va a tomar la variable
Fin : valor final que va a tomar la variable
Si el incremento es uno:
var = Inicial:1:Fin
se puede expresar como
var = Inicial:Fin
105. 105
Para var = Inicial:Incremento:Fin
Instrucción_1
Instrucción_2
......................
Instrucción_M
106. Ejemplo: Escribir los cuadrados de los números pares
menores que 10.
for i =2:2:9
disp( i^2 )
end
4
16
36
64
Ejemplo: Escribir los cubos de los números impares
menores o iguales que 9, en forma descendente.
for i =9: - 2 : 1
disp( i^3 )
end
729
343
125
27
1
106
107. 107
Instucción while :
Sintaxis:
while expresión
instrucciones
end
Las instrucciones se repetirán mientras expresión sea verdadero.
Con la instrucción break se puede terminar anticipadamente el
lazo while... end.
109. Ejemplo: Obtenga el épsilon de la máquina y comparelo con eps.
epsm=1;
while epsm/2 + 1 > 1
epsm = epsm/2
end
Esto también se puede expresar como :
epsm=1;while epsm/2+1>1, epsm = epsm/2, end
epsm = 2.220446049250313e-16
El épsilon de la máquina en MATLAB se obtiene con
>> eps
ans = 2.220446049250313e-16
109
110. El número de máquina más grande en Octave se obtiene con
>> realmax
ans = 1.797693134862316e+308
NOTA:
Si un valor se vuelve mayor que realmax, el número se trata de
overflow y es denotado por inf.
>> inf
ans = Inf
>> 1/inf
ans = 0
110
111. 111
Hay casos en los que la respuesta en NaN, lo
que significa que no es un número.
Ejemplo:
» 0*inf
ans =
NaN
112. 112
Instucción if :
Sintaxis :
if relación
instrucciones
end
Las instrucciones se ejecutarán sólo si la
relación es cierta.
113. 113
La forma general de la sentencia if es
if expresión1
sentencias1
elseif expresión2
sentencias2
else
sentencias3
end
Las sentencias serán ejecutado si la parte real
de la expresión tiene todos los elementos no
ceros.
114. 114
Las partes else y elseif son opcionales.
La expresión usualmente tiene la forma
expr oper expr
donde oper es : ==, <, >, <=, >=, ~=
Ejemplo:
if n < 0
paridad = 0;
elseif rem(n,2) == 0
paridad = 2;
else
paridad = 1;
end
disp(paridad)
115. 115
Relaciones:
Los operadores relacionales en MATLAB son
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual
~= no igual
Los operadores pueden conectarse o cuantificarse por los operadores
lógicos
& y
| o
~ no
116. 116
Cuando se aplican a escalares, una relación
es realmente el escalar 1 o 0 dependiendo de
si la relación es verdadera o falsa.
Ejemplo:
>> 4 < 6
ans =
1
>> 3 > 8
ans =
0
>> 4==4
ans =
1
>> 3==6
ans =
0
117. 117
Ejem
plo : Escriba una función que encuentre el m
ayor de dos
núm
eros a,b
function SalMay=mayor(a,b)
if a>b
SalMay=a;
else
SalMay=b;
end
guardar con nombre mayor.m
Ejecutandoesta función:
>>m
ayor(4,5)
ans =
5
118. 118
Ejem
plo : Escriba una función que encuentre el núm
ero positivo m
ás
pequeñode la m
áquina.
function x_m
in =xm
in()
x_ant=1;
whilex_ant >0
x_m
in =x_ant;
x_ant =x_ant /2;
end
guardar con nombre xmin.m
Para ejecutaresta función, ingrese:
» form
at long e
» xmin
Para volveral form
atodesalida estandar:
» form
at short
119. 119
Ejem
plo : Escriba una función en MATLAB
con nom
bref01, correspondientea la función
f(t,y)=(4-y*y)/(-3*t)
function f_sal =f01(t,y)
f_sal=(4-y*y)/(-3*t);
guardar con nombre f01.m
o en otro directorio personal de trabajo
Para ejecutaresta funciónpara t=1 yy=-1, ingrese:
»f01(1,-1)
ans =
-1
120. 120
Ejemplo : Escriba una función en MATLAB con nombre f02,
correspondiente a la función
t
y
y
t
y
y
)
y
,
y
,
t
(
f
9
4
2
2
4
8
2
1
2
1
2
1
,
con el nombre de f02.m
function f_sal = f02(t, y)
f_sal = [8*y(1) -4*y(2) + 2*t
2*y(1) -4*y(2) + 9*t];
guardar con nombre f02.m
Para ejecutaresta función, para t =2 y1 =3 y2 =-5, ingrese:
»f02(2,[3, -5])
ans =
48
122. 122
Implementación en Octave/MATLAB:
function s = suma(a, m)
s = 0;
for k=1:m
s = s + a(k);
end
end
Esta idea se puede aplicar en otros lenguajes de computación.
CORRIDA:
a=[2 7 9 5 6]; m = 5;
>> suma(a,m)
ans = 29
En Octave/MATLAB se cuenta con la función sum:
>> sum(a)
ans = 29
124. 124
Implementación en Octave/MATLAB:
function p = producto(a, m)
p = 1;
for k=1:m
p = p * a(k);
end
end
Esta idea se puede aplicar en otros lenguajes de computación.
CORRIDA:
a=[2 7 9 5 6]; m = 5;
producto(a,m)
ans = 3780
En Octave/MATLAB se cuenta con la función prod:
prod(a)
ans = 3780
126. 126
function p = comb(j,m)
p = 1;
for k = 0:(j-1)
p = p*(m-k)/(j-k);
end
End
>> comb(3,6)
ans = 20
>> comb(1,6)
ans = 6
>> comb(6,6)
ans = 1
127. 127
function s = exp1(x, n)
a = 1;
s = a;
for k = 1:n
a = a*x/k;
s = s + a;
end
end
Ejemplo: Escriba una función que calcule retorne la
aproximación de la exponencial dados x y m como entrada.
m
k
k
!
k
x
S
0