Está en la página 1de 127

Universidad Nacional Agraria

La Molina

Introducción al Software Octave


Alessandri Canchoa Quispe

1
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
OCTAVE

 Octave Packages available at


http://octave.sourceforge.net/packages.php

 MATLAB Toolboxes available at


http://www.mathworks.co.uk/ products/

3
4
5
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
6
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
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/b ab, a/b

\ A\B A-1B

+,- a+b, a-b a+b, a-b 9


>> 2+2
ans = 4

>> 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.

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
12
>> 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
>> 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 14

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

>> 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

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

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 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

Esto también es válido para vectores


columna.

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 =

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
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

en MATLAB se puede definir como sigue:


» A=[4 -5 7<ENTER>
2 3 5<ENTER>
8 7 1] <ENTER>
A =
4 -5 7
2 3 5
8 7 1
También se puede definir con:
36
» A=[4 -5 7; 2 3 5; 8 7 1] <ENTER>
o también con:
» A(1,1)=4;
» A(1,2)=-5;
» A(1,3)=7;
» A(2,1)=2;
» A(2,2)=2;
» A(2,3)=5;
» A(3,1)=8;
» A(3,2)=7;
» A(3,3)=1;

37
La segunda fila se obtiene con:

» A(2,:)

ans =
2 3 5

La tercera columna se obtiene con:


» A(:,3)

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

??? Error using ==> +


39
Matrix dimensions must agree.
» a

a =
1 4 6 7

» b

b =
4 8 9 2

La diferencia de a y b se obtiene con:

» 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

??? Error using ==> ^


Matrix must be square.
47
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
48
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

49
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

50
>> 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

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)

>> f = inline( 'x+2+y')


f = f(x, y) = x+2+y
>> f(3,7)
ans = 12
55

Otra manera: f = @(x,y) x+2+3*y


>> fplot(g,[-1.5 1.5],160)

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:

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
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

Lo mismo se obtiene si se escribe


» t=0:0.1:6;
59
» plot(t,t.*sin(t),t, t.^2)
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
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.

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
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
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])

» 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ó.

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

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1


x
78
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.

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

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

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

Ejemplo: Encontrar la solución del


siguiente sistema lineal
2x1 +6x2 +7x3 +9x4 = 2
3x1 +7x2 +2x3 +5x4 = -1
4x1 -2x2 +1x3 +6x4 = 3
1x1 +9x2 +8x3 +2x4 = 4

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];

>> b=[2 -1 3 4]';

>> 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.

triu parte triangular superior de una


matriz incluido la diagonal

tril parte triangular inferior de una


matriz incluido la diagonal

rand matriz generada aleatoriamente 91


>> eye(2)
ans =

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

Hay dos tipos de archivos .m :


- Archivos de instrucciones
- Archivos de funciones.

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:

Los archivos de funciones hacen que


MATLAB tenga capacidad de crecimiento.

Se pueden crear funciones específicas para un


problema concreto, y, a partir de su introducción,
tendrán el mismo rango que las demás funciones
del sistema.
Las variables en las funciones son locales.
También se puede declarare una variable
como global.
98
99
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 100
INSTRUCCIONES DE
CONTROL

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

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

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

Las instrucciones se repetirán mientras expresión sea verdadero.

Con la instrucción break se puede terminar anticipadamente el


lazo while... 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

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
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

Las instrucciones se ejecutarán sólo si la


relación es cierta.

112
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.

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

< 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
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

Ejecutando esta función:


>> mayor (4,5)
ans =
5

117
Ejemplo : Escriba una función que encuentre el número positivo más
pequeño de la máquina.

function x_min =xmin()


x_ant=1;
while x_ant >0
x_min = x_ant;
x_ant = x_ant /2;
end
guardar con nombre xmin.m

Para ejecutar esta función, ingrese:


» format long e
» xmin
Para volver al formato de salida estandar :
» format short 118
Ejemplo : Escriba una función en MATLAB
con nombre f01, correspondiente a 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 ejecutar esta función para t= 1 y y = -1, ingrese:

» 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

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) 122
ans = 29
123
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 124
Ejemplo : Escriba una función comb(k,n) en MATLAB para calcular

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

También podría gustarte