Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La Molina
1
OCTAVE
Octave o GNU Octave, fue desarrollado por GNU Octave –
http: // www.octave.org
3
4
5
VENTANA DE COMANDOS
>> x = 4 <ENTER>
x= 4
>> X = 5 <ENTER>
X= 5
7
8
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-1B
>> 5+7
ans = 12
>> x=3;
>> X=7;
>> suma=x+X
suma = 10
>> resta=x-X
resta = -4
>> producto=x*X
producto = 21
10
>> division=x/X
division = 4.285714285714285e-01
Todos los cálculos en MATLAB y Octave se realizan con doble precisión, es
decir, se utilizan unas 15 cifras significativas.
format compact
>> pi % constante pi
ans = 3.1416
>> pi
ans = 3.141592653589793
>> pi
ans = 3.1416
>> pi
ans = 3.141592653589793
ans = 0
15
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)
16
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
» pi
ans =
3.1416
» sin(pi/2)
ans =
1
» tan(pi/4)
ans =
1.0000
» exp(1.0)
ans =
2.7183 18
>> 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
19
>> 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
20
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 21
>> factor(18)
ans = 2 3 3
>> rats(0.2)
ans = 1/5
>> factorial(3)
ans = 6
22
>> primes(30)
ans =
2 3 5 7 11 13 17 19 23 29
>> isprime(111)
ans = 0
>> isprime(101)
ans = 1
23
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
» d(1) <ENTER>
ans =
2 24
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
T
símbolo de la transpuesta de una matriz. 25
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
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 =
27
2 4 6 8 3 0 12 15 2 6
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
28
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 29
7
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
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 =
» t=0:0.1:2<ENTER> 31
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]'
32
>> 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
33
>> x=[2, 7, 3, 7, -9]
x=
2 7 3 7 -9
>> sort(x,'ascend')
ans =
-9 2 3 7 7
>> sort(x)
ans =
-9 2 3 7 7
>> sort(x,'descend')
ans =
7 7 3 2 -9
34
>> sum(x)
ans = 10
>> mean(x)
ans = 2
>> length(x)
ans = 5
>>
>> size(x)
ans =
1 5
35
Variables del tipo arreglos bidimensionales:
Ejemplo:La matriz
4 − 5 7
A = 2 3 5
,
8 7 1
37
La segunda fila se obtiene con:
» A(2,:)
ans =
2 3 5
ans =
7
5
1 38
OPERACIONES DE MATRICES Y VECTORES EN MATLAB
» a=[1 4 6 7]
a =
1 4 6 7
» b=[4 8 9 2]
b =
4 8 9 2
La suma se obtiene con
» c=a+b
c =
5 12 15 9
» d=[2 6]
d =
2 6
» a+d
a =
1 4 6 7
» b
b =
4 8 9 2
» g=a-b
g =
-3 -4 -3 5
40
» A=[1 4 -2; 2 5 7]
A =
1 4 -2
2 5 7
» B=[3 5; 1 -2; 5 -6]
B =
3 5
1 -2
5 –6
El producto de A con B, se obtiene con:
» A*B
ans =
-3 9
41
46 -42
Nota : C*C = C^2
» C=[1 -2; 5 7]
C =
1 -2
5 7
» C*C
ans =
-9 -16
40 39
» C^2
ans =
-9 -16
40 39 42
Nota : C*C = C^2
» C=[1 -2; 5 7]
C =
1 -2
5 7
» C*C
ans =
-9 -16
40 39
» C^2
ans =
-9 -16
40 39 43
Inversa de una matriz:
» A=[-1 2 3; 2 3 4; 5 7 8]
A =
-1 2 3
2 3 4
5 7 8
» AA=inv(A)
AA =
-0.4444 0.5556 -0.1111
0.4444 -2.5556 1.1111
-0.1111 1.8889 -0.7778
Verificando:
» AA*A 44
» A*AA
Producto de una matriz por un escalar:
» a=[3 5 6 ;8 2 5; 4 7 1]
a =
3 5 6
8 2 5
4 7 1
» a*2
ans =
6 10 12
16 4 10
8 14 2
» 2*a
ans =
6 10 12
16 4 10 45
8 14 2
Operaciones elemento por elemento:
X.^Y, X.*Y, Y.\X
» a=[1 5 2;3 -1 7]
a =
1 5 2
3 -1 7
» b=[2 -1 2;1 2 1]
b =
2 -1 2
1 2 1
» a.*b
ans =
2 -5 4 46
3 -2 7
» 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
>> nombre(2)
ans = L
Tamaño de una cadena
>> long1=length(nombre)
long1 = 10
>> size(nombre)
ans =
1 10
48
Listando en orden inverso las
componentes de la cadena nombre
49
Los apostrofes de una cadena deben ser digitados dos veces:
>> nomb1='Julio'
nomb1 = Julio
>> apellido='Cardenas'
apellido = Cardenas
50
>> nombre=[nomb1,apellido]
nombre = JulioCardenas
>> nombre=[nomb1,apellido]
nombre = JulioCardenas
51
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) 52
ans = \
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
53
ans = 235
>> 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
54
ans = 1
Definición de funciones en línea
>> 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)
4.5
3.5
2.5
1.5
0.5
56
0
-1.5 -1 -0.5 0 0.5 1 1.5
GRAFICAS CON MATLAB
Comando plot:
57
Ejemplo: Para graficar f(t) = tSen t, 0 t 6
» t=0:0.1:6;
» y=t.*sin(t);
» plot(t,y)
2
-1
-2
-3
-4
-5
0 1 2 3 4 5 6 58
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; 40
35
» y=[t.*sin(t); t.^2];
30
» plot(t,y) 25
20
15
10
-5
0 1 2 3 4 5 6
60
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
61
h estrella de 6 puntas
Ejemplo: Gráficar g(x) = xex, -3 x 5
» x=-3:0.1:5;
» y=x.*exp(x);
» plot(x,y,'c+:')
62
» plot(x,y,'r.-')
63
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;
64
plot(x1,y1,'g.-', x2,y2,'y*')
65
Para etiquetar los ejes:
xlabel('texto') adiciona el texto junto al eje X.
Title ('text')
» 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
68
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
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])
70
>> x=-2:0.1:3;
>> plot(x,x,':ok',x,x.^2,'--xr',x,x.^3,'-b')
>> legend('y = x','y = x^{2}','y = x^{3}')
30
y=x
25 y = x2
y = x3
20
15
10
-5
-10
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 3 71
Ejemplo:
x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'XTick',-pi:pi/2:pi)
set(gca,'XTickLabel',{'-pi','-pi/2','0','pi/2','pi'})
xlabel('-\pi \leq \Theta \leq \pi')
ylabel('sin(\Theta)')
title('Grfica de sen(\Theta)')
text(-pi/4,sin(-pi/4),'\leftarrow sen(-\pi\div4)',...
'HorizontalAlignment','left')
72
73
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
74
xy=0
6
0
y
-2
-4
-6
-6 -4 -2 0 2 4 6
x
75
>> ezplot('x^2-8*x-4*y+8',[-15,15]); axis equal
x 2-8 x-4 y+8 = 0
15
10
0
y
-5
-10
-15
-15 -10 -5 0 5 10 15 20
x
76
>> ezplot('x^2/4-(y-3)^2/5-1',[-15,15, -10, 10])
>> axis equal; axis([-15,15, -10, 10])
x 2/4-(y-3)2/5-1 = 0
10
0
y
-2
-4
-6
-8
-10
-15 -10 -5 0 5 10 15
x
77
>> ezplot('sin(t)','cos(t)',[-pi/2,pi/2]);axis equal
x = sin(t), y = cos(t)
1.2
0.8
0.6
y
0.4
0.2
-0.2
79
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')
80
81
CONTINUANDO CON GRAFICOS EN 2D
hold on
y para desactivar:
hold off
figure
82
Ejemplo:
» t=-pi/2:0.1:pi/2;
» y1=sin(t);
» plot(t,y1,'r*')
Ahora queremos graficar sobre la gráfica anterior
y= t^2
» y2=t.^2;
» hold on
» plot(t,y2)
» hold off
83
84
85
Ahora se quiere graficar y =Ln t, 0.2 t 3 , conservando
la figura anterior:
» figure
» t=0.2:0.1:3;
» y=log(t);
» plot(t,y)
86
87
SOLUCION DE SISTEMAS DE ECUACIONES LINEALES
Forma matricial
Ax=b
donde
88
>> format long
>> A=[2 6 7 9
3 7 2 5
4 -2 1 6
1 9 8 2];
>> x=A\b
x=
9.556650246305419e-01
-5.123152709359606e-01
1.078817733990148e+00
-4.876847290640394e-01
89
Verificando
>> A*x-b
ans =
1.776356839400250e-15
8.881784197001252e-16
4.440892098500626e-16
0.000000000000000e+00
Verificando
>> norm(A*x-b)
ans = 2.035072419451040e-15
Determinante de A:
>> det(A)
ans = 1218
90
FUNCIONES PARA LA CONSTRUCCION
DE MATRICES
eye matriz identidad
zeros matriz de ceros
ones matriz de unos
diag más adelante en un ejemplo.
Diagonal Matrix
1 0
0 1
>> zeros(2,3)
ans =
0 0 0
0 0 0
>> ones(2,3)
ans =
1 1 1
1 1 1 92
» a=[3 5 6 ;8 2 5; 4 7 1]
a =
3 5 6
8 2 5
4 7 1
» diag(a)
ans =
3
2
1
» diag([4, 6, 7])
ans =
4 0 0
0 6 0 93
0 0 7
» a
a =
3 5 6
8 2 5
4 7 1
» triu(a)
ans =
3 5 6
0 2 5
0 0 1
94
» 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)
95
FUNCIONES QUE REALIZAN TAREAS.
PROGRAMAS USANDO ARCHIVOS M-file
96
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.
97
Archivos de funciones:
101
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
102
Inicial: valor inicial que va a tomar la variable
Si el incremento es uno:
var = Inicial:1:Fin
var = Inicial:Fin
103
var = Inicial
Falso
Var Fin
Verdadero
Instrucción_1
var = var +incremento
Instrucción_2
....
Instrucción_M
104
Para var = Inicial:Incremento:Fin
Instrucción_1
Instrucción_2
......................
Instrucción_M
105
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 106
1
Instucción while :
Sintaxis:
while expresión
instrucciones
end
107
Falso
Expresión
Verdadero
Instrucción_1
Instrucción_2
......................
Instrucción_M
108
Ejemplo: Obtenga el épsilon de la máquina y comparelo con eps.
epsm=1;
while epsm/2 + 1 > 1
epsm = epsm/2
end
epsm = 2.220446049250313e-16
109
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
Hay casos en los que la respuesta en NaN, lo
que significa que no es un número.
Ejemplo:
» 0*inf
ans =
NaN
111
Instucción if :
Sintaxis :
if relación
instrucciones
end
112
La forma general de la sentencia if es
if expresión1
sentencias1
elseif expresión2
sentencias2
else
sentencias3
end
113
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)
114
Relaciones:
Los operadores relacionales en MATLAB son
& y
| o
~ no
115
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 = 116
0
Ejemplo : Escriba una función que encuentre el mayor de dos
números a,b
function SalMay=mayor(a,b)
if a>b
SalMay=a;
else
SalMay=b;
end
guardar con nombre mayor.m
117
Ejemplo : Escriba una función que encuentre el número positivo más
pequeño de la máquina.
f_sal=(4-y*y)/(-3*t);
» f01(1,-1)
ans =
-1
119
Ejemplo : Escriba una función en MATLAB con nombre f02,
correspondiente a la función
8y1 − 4 y 2 + 2t
f ( t, y1, y 2 ) =
2 y − 4 y + 9t ,
1 2
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 ejecutar esta función , para t =2 y1 =3 y2 =-5, ingrese:
» f02(2,[3 , -5])
ans =
48 120
121
Implementación en Octave/MATLAB:
function s = suma(a, m)
s = 0;
for k=1:m
s = s + a(k);
end
end
function p = producto(a, m)
p = 1;
for k=1:m
p = p * a(k);
end
end
125
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
126
Ejemplo: Escriba una función que calcule retorne la
m k
aproximación de la exponencial S = x dados x y m como entrada.
k =0
k!
function s = exp1(x, n)
a = 1;
s = a;
for k = 1:n
a = a*x/k;
s = s + a;
end
end
127