Sunteți pe pagina 1din 31

Instituto Tecnolgico de Morelia

Jos Mara Morelos y Pavn


Ingeniera Elctrica
Cristian Andres Aldaco Vega 12120263
Jorge Ortiz Marn 12120280
Johan Fras Daz 13122512
Control 1
Introduccin a MATLAB II
Fecha de entrega: 28 de febrero de 2014
Morelia, Michoacn de Ocampo.

Introduccin.
Los lenguajes de programacin de computadores como Matlab ofrecen caractersticas que
permiten controlar el flujo de ejecucin de rdenes basada en estructuras de toma de decisiones.
El control de flujo es extremadamente poderoso ya que permite que clculos pasados influyan
sobre operaciones futuras.
Debido a que las estructuras de control de flujo a menudo contienen numerosas rdenes de
Matlab, suelen operar en archivos-M (M-files), en lugar de escribirse directamente en la lnea de
orden de Matlab.

Resumen.
En esta prctica exploraremos nuevos comandos que existen en Matlab donde veremos su
funcionamiento, las condiciones que requiere para su correcto funcionamiento, primero
trabajaremos con los bucles que son una serie de estructuras de control de flujo que tienen la
capacidad de tomar decisiones. Es muy importante tomar en cuenta la estructura que maneja
cada bucle adems de ingresar las indicaciones correctamente, en el caso de que exista un error al
momento de ingresar la estructura, Matlab es capaz de indicarnos donde y cul es el error.
Es recomendable evitar los bucles siempre y cuando exista un mtodo de array o matriz
equivalente.
Los archivos M se crean en un editor de texto de Matlab, general mente el nombre de la funcin
es la misma que el del archivo, tambin los archivos-M ya estn prediseados y se pueden
encontrar buscando en las carpetas de Matlab o nombrndolas directamente en la ventana de
operacin.
Existe otro tipo de archivos que son los scripts, y funcionan igual que los archivos M pero con
distintas diferencias, los archivos script son convenientes para introducir grandes array.
Matlab es capaz de realizar operaciones con polinomios, hace estas operaciones en forma de filas.

Tomando decisiones: Controles de flujo.


% Asigna un array y comienza un bucle, despus, realiza el clculo de la operacin y lo guarda en
un array p, tenemos que darle un final a nuestra variable y se le da un final al bucle como se
muestra.
>> for n=1:10
p(n)=sin(n*pi/10)
n=10
end
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10

p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n=
10
% volvemos a realizar lo mismo, pero ahora, sin bucle.
>> n=1:10
n=
1

9 10

>> p=sin(n*pi/10)
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
% ahora ponemos nuestro bucle anidando con valores de 1 al 5, estos con incremetos de -1,
despus, calculamos la operacin y se almacena en una matriz A, terminamos el ciclo interno.

>> for n=1:5


for m=5:-1:1
A(n,m)=n^2+m^2
end
% El comando disp, despliega un valor, en este caso es la constante n cada vez que se
incrementa, y despus, terminamos el ciclo externo.
disp(n)
end
A=
0

0 26

0 17 26

A=
0
A=
0

0 10 17 26

A=
0

5 10 17 26

A=
2

5 10 17 26

1
A=
2

5 10 17 26

0 29

A=
2

5 10 17 26

0 20 29

A=
2

5 10 17 26

0 13 20 29

A=

5 10 17 26

8 13 20 29

A=
2

5 10 17 26

8 13 20 29

2
A=
2

5 10 17 26

8 13 20 29

0 34

A=
2

5 10 17 26

8 13 20 29

0 25 34

A=
2

5 10 17 26

8 13 20 29

0 18 25 34

A=
2

5 10 17 26

8 13 20 29

0 13 18 25 34
A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
3
A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
0

0 41

A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
0

0 32 41

A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
0

0 25 32 41

A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
0 20 25 32 41
A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
17 20 25 32 41
4
A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
17 20 25 32 41

0 50

A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
17 20 25 32 41
0

0 41 50

A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
17 20 25 32 41
0

0 34 41 50

A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
17 20 25 32 41
0 29 34 41 50
A=
2

5 10 17 26

8 13 20 29

10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
5
% Creamos un ejemplo en el cual tomamos como ejemplo el precio de un producto manzanas,
despus lo multiplicamos y guardamos el resultado como costo.
>> Manzanas=10

Manzanas =
10
>> Costo=Manzanas*25
Costo =
250
% Ahora al producto de las manzanas se la aplica un 20% de descuento si se compran ms de 5,
despus calculamos el precio si son ms de las 5 manzanas, pero con el descuento y por ultimo
finalizamos el buble.
>> if Manzanas>5
Costo=(1-20/100)*Costo
end
Costo =
200

Funciones en archivos-M.

% A continuacin se muestra un ejemplo de un archivo-M, llamado linspace.


function y = linspace(d1, d2, n)
%LINSPACE Linearly spaced vector.
% LINSPACE(X1, X2) generates a row vector of 100 linearly
% equally spaced points between X1 and X2.
%
% LINSPACE(X1, X2, N) generates N points between X1 and X2.
% For N = 1, LINSPACE returns X2.
%
% Class support for inputs X1,X2:
%

float: double, single

%
% See also LOGSPACE, COLON.

% Copyright 1984-2011 The MathWorks, Inc.


% $Revision: 5.12.4.6.6.1 $ $Date: 2011/11/30 02:24:33 $
if nargin == 2
n = 100;
end
n = double(n);
outputclass = superiorfloat(d1, d2);
if n < 2
y = zeros(1, floor(n), outputclass) + d2;
else
% at least two end points
n1 = floor(n)-1;
c = (d2 - d1).*(n1-1); % opposite signs may cause overflow
if isinf(c)
y = d1 + (d2/n1).*(0:n1) - (d1/n1).*(0:n1);
else
y = d1 + (0:n1).*(d2 - d1)/n1;
end
y(1) = d1;
y(end) = d2;
end

Archivos Scripts.

% Crearemos un archivo Script, mostrado en ciclos y calcular una operacin sin la necesidad de un
ciclo.
% la funcin echo on visualiza el orden de un archivo-M en el orden que se va ejecutando en la
hoja de trabajo, creamos un vector sin bucle y calculamos el vector sin la necesidad del bucle.
echo on
n=1:10

p=sin(n*pi/10)
>> pru
n=1:10
n=
1

9 10

p=sin(n*pi/10)
p=
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000

Con lo cual se ejecutar el archivo.

% Abrimos un archivo del directorio de trabajo, eliminamos la visualizacin del archivo, asignamos
una variable y asignamos una matriz con ayudas, las cuales deben tener el mismo tamao de filas
y columnas.
echo off
n=6
D=['1.- help input'
'2.- help eval '
'3.- help echo '
'4.- help while']
% S seleccionamos una nmero mayor a cuatro el programa nos pedida que ingresemos otro ya
que solo tenemos valores del 1 al 4, al seleccionar uno de estos termina el programa.
while(n>4)
n = input('Selecionar un nmero: ')
end
eval(D(n,5:14))
% Corremos el programa.
>> selec
echo off
n=

6
D=
1.- help input
2.- help eval
3.- help echo
4.- help while
Selecionar un nmero: 5
n=
5
Selecionar un nmero: 9
n=
9
Selecionar un nmero: 3
n=
3
echo Display statements during function execution.
echo ON turns on echoing of commands inside Script-files.
echo OFF turns off echoing.
echo file ON where 'file' is a function name causes the
named Function-file to be echoed when it is used.
echo file OFF turns it off.
echo file toggles it.
echo ON ALL turns on the echoing of commands inside any
Function-files that are currently in memory (i.e., the
functions returned by INMEM).
echo OFF ALL turns them all off.
See also function, script.
Reference page in Help browser
doc echo

Polinomios.
% Evaluar un polinomio que llamaremos p en valore de x.
A=[1 2 3; 4 5 6; 7 8 0]
p=poly(A)
r=roots(p)
p2=poly(r)
p=[1 -12 0 25 116]
r=roots(p)
p2=poly(r)
p2=real(p2)
a=[1 2 3]
b=[4 5 6]
c=conv(a,b)
[q,r]=deconv(c,a)
d=a+b
e=c+[0 0 d]
% Corremos el programa.
>> tranquiz
A=
1

p=
1.0000 -6.0000 -72.0000 -27.0000
r=
12.1229
-5.7345
-0.3884
p2 =

1.0000 -6.0000 -72.0000 -27.0000


p=
1 -12

0 25 116

r=
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
p2 =
1.0000 -12.0000 -0.0000 25.0000 116.0000
p2 =
1.0000 -12.0000 -0.0000 25.0000 116.0000
a=
1

b=
4
c=
4 13 28 27 18
q=
4

r=
0

d=
5
e=
4 13 33 34 27
Suma de dos polinomios.

>> sumarpoli

%se manda llamar el archivo .m(script)

A=
1

p=
Columns 1 through 3
1.000000000000000 -6.000000000000008 -72.000000000000085
Column 4
-27.000000000000053
r=
12.122893784632403
-5.734509942225074
-0.388383842407320
p2 =
Columns 1 through 3
1.000000000000000 -6.000000000000009 -72.000000000000071
Column 4
-27.000000000000050
p=
1 -12

0 25 116

r=
11.747282870822726
2.702820743841008
-1.225051807331868 + 1.467208008728901i
-1.225051807331868 - 1.467208008728901i
p2 =
1.0e+02 *
Columns 1 through 3
0.010000000000000 -0.120000000000000 -0.000000000000000
Columns 4 through 5

0.250000000000000 1.160000000000001
p2 =
1.0e+02 *
Columns 1 through 3
0.010000000000000 -0.120000000000000 -0.000000000000000
Columns 4 through 5
0.250000000000000 1.160000000000001
a=
1

b=
4
c=
4 13 28 27 18
q=
4

r=
0

d=
5
e=
4 13 33 34 27
>> sumarpolinomios

%ahora se manda llamar el archivo m que tiene la funcin polysuma

A=
1

p=
Columns 1 through 3
1.000000000000000 -6.000000000000008 -72.000000000000085
Column 4

-27.000000000000053
r=
12.122893784632403
-5.734509942225074
-0.388383842407320
p2 =
Columns 1 through 3
1.000000000000000 -6.000000000000009 -72.000000000000071
Column 4
-27.000000000000050
p=
1 -12

0 25 116

r=
11.747282870822726
2.702820743841008
-1.225051807331868 + 1.467208008728901i
-1.225051807331868 - 1.467208008728901i
p2 =
1.0e+02 *
Columns 1 through 3
0.010000000000000 -0.120000000000000 -0.000000000000000
Columns 4 through 5
0.250000000000000 1.160000000000001
p2 =
1.0e+02 *
Columns 1 through 3
0.010000000000000 -0.120000000000000 -0.000000000000000
Columns 4 through 5
0.250000000000000 1.160000000000001
a=

b=
4
c=
4 13 28 27 18
q=
4

r=
0

d=
5
e=
4 13 33 34 27
a=
4 13 28 27 18
b=
5

na =
5
nb =
3
p=
4 13 33 34 27
s=
4 13 33 34 27
p=
1

4 -7 -10

Ejercicios:
Funcin cuadra
clc
clear
A=input('dame una matriz A=')
f=A(:,1);
c=A(1,:);
pause
dc=length(c) %dimencion de las columnas de la matriz
df=length(f) %dimencion de las filas de la matriz
pause
if dc~=df
if dc>df
A(dc,1)=0; %pone una fila de ceros
else
A(1,df)=0; %pone una columna de ceros
end
end
A
Funcin calcula
function funcionresultado1=calcula(matriz1,matriz2)
echo on;

funcionresultado=matriz1.*matriz2 %multiplica las matrizes


funcionresultado=funcionresultado' %calcula la matriz inversa
end
Funcin dibuja
function dibuja(v)
m=1;
for i=length(v):-1:1
x(m)=i-1
m=m+1;
end
pause
subplot(2,3,1)
plot(x,v),title('v vs x'),xlabel('x=num de orden'),ylabel('vector v')
grid on
subplot(2,3,2)
plot(x,v.^2),title('v^2 vs x'),xlabel('x=num de orden'),ylabel('vector v^2')
grid on
subplot(2,3,3)
plot(x,v.^3),title('v^3 vs x'),xlabel('x=num de orden'),ylabel('vector v^3')
grid on
pause
subplot(2,3,4)
plot(v.^2,v),ylabel('valores de v'),xlabel('valores de v^2')
title('v^2 vs v')
grid on
end
Men
%menu
clear
clc
menu=['1.-cuadra '
'2.-calcula '
'3.-dibuja '
'4.-polisuma']
m=input('elige un numero:')
switch m
case 1
clc
clear
A=input('dame una matriz A=')
f=A(:,1);
c=A(1,:);
pause
dc=length(c); %dimencion de las columnas de la matriz

df=length(f); %dimencion de las filas de la matriz


pause
if dc~=df
if dc>df
A(dc,1)=0; %pone una fila de ceros
else
A(1,df)=0; %pone una columna de ceros
end
end
A
case 2
clear
clc
A=input('dame una matriz A=')
B=input('dame una matriz B=')
calcula(A,B)
case 3
v=input('dame un vector v=')
dibuja(v)
case 4
A=[1 2 3;4 5 6;7 8 0]
p=poly(A)
r=roots(p)
p2=poly(r)
p=[1 -12 0 25 116]
r=roots(p)
p2=poly(r)
p2=real(p2)
a=[1 2 3]
b=[4 5 6]
c=conv(a,b)
[q,r]=deconv(c,a)
d=a+b
e=c+[0 0 d]
sumarpoli
s=polysuma(c,d)
x=linspace(-1,3,100);
p=[1 4 -7 -10]
v=polyval(p,x);
plot(x,v),title('x^3+4x^2-7x-10'),grid
end
Resultados del ejercicio men:
menu =
1.-cuadra
2.-calcula

3.-dibuja
4.-polisuma
elige un numero:1
m=
1
dame una matriz A=[1 2 4]
A=
1

A=

menu =
1.-cuadra
2.-calcula
3.-dibuja
4.-polisuma
elige un numero:1
m=
2
dame una matriz A=[1 2 4]
A=
1

dame una matriz B=[2 2 2]


B=
2

funcionresultado =
2

funcionresultado =
2

4
8
menu =
1.-cuadra
2.-calcula
3.-dibuja
4.-polisuma
elige un numero:3
m=
3
dame un vector v=[0:0.1:1.5]

menu =
1.-cuadra
2.-calcula
3.-dibuja
4.-polisuma
elige un numero:4

m=
4
A=
1

p=
Columns 1 through 3
1.000000000000000 -6.000000000000008 -72.000000000000085
Column 4
-27.000000000000053
r=
12.122893784632403
-5.734509942225074
-0.388383842407320
p2 =
Columns 1 through 3
1.000000000000000 -6.000000000000009 -72.000000000000071
Column 4
-27.000000000000050
p=
1 -12

0 25 116

r=
11.747282870822726
2.702820743841008
-1.225051807331868 + 1.467208008728901i
-1.225051807331868 - 1.467208008728901i
p2 =
1.0e+02 *
Columns 1 through 3

0.010000000000000 -0.120000000000000 -0.000000000000000


Columns 4 through 5
0.250000000000000 1.160000000000001
p2 =
1.0e+02 *
Columns 1 through 3
0.010000000000000 -0.120000000000000 -0.000000000000000
Columns 4 through 5
0.250000000000000 1.160000000000001
a=
1

b=
4
c=
4 13 28 27 18
q=
4

r=
0

d=
5
e=
4 13 33 34 27
A=
1

p=
Columns 1 through 3
1.000000000000000 -6.000000000000008 -72.000000000000085

Column 4
-27.000000000000053
r=
12.122893784632403
-5.734509942225074
-0.388383842407320
p2 =
Columns 1 through 3
1.000000000000000 -6.000000000000009 -72.000000000000071
Column 4
-27.000000000000050
p=
1 -12

0 25 116

r=
11.747282870822726
2.702820743841008
-1.225051807331868 + 1.467208008728901i
-1.225051807331868 - 1.467208008728901i
p2 =
1.0e+02 *
Columns 1 through 3
0.010000000000000 -0.120000000000000 -0.000000000000000
Columns 4 through 5
0.250000000000000 1.160000000000001
p2 =
1.0e+02 *
Columns 1 through 3
0.010000000000000 -0.120000000000000 -0.000000000000000
Columns 4 through 5
0.250000000000000 1.160000000000001

a=
1

b=
4
c=
4 13 28 27 18
q=
4

r=
0

d=
5
e=
4 13 33 34 27
a=
4 13 28 27 18
b=
5

na =
5
nb =
3
p=
4 13 33 34 27
s=
4 13 33 34 27
p=
1

4 -7 -10

Conclusiones.

FRIAS DIAZ JOHAN


Los controles de flujo no sirven para realizar ciclos que funcionan bajo condiciones que uno mismo
le asigna para as ahorrar lneas a la hora de programar.
Los archivos m son tiles para crear un programa que realice alguna funcin especfica y
adems podamos volver a correr el mismo archivo las veces que sean sin necesidad de volver a
escribirlo.
Las funciones son parecidas a los archivos m a excepcin de que las funciones deben ser
llamadas desde un archivo m o directamente desde la pantalla de inicio para poder ejecutarse,
adems de que al ser llamadas deben de tener algn dato de entrada.

ORTIZ MARN JORGE


Esta prctica se enfoc a otros comandos que es capaz de manejar Matlab y adems que le da una
mayor gama de aplicaciones, tambin se demostr que se pueden generar nuevas funciones en
Matlab adems de las ya existentes y de que es muy til consultar las funciones que ya existen en
Matlab para poder simplificar el trabajo al momento de querer crear un nuevo array.

ALDACO VEGA CRISTIAN ANDRES


Los archivos .M nos permiten crear programas en los que podemos especificar los datos como los
resultados que deben introducirse y mostrarse respectivamente, los cuales pueden ser un
subconjunto o subprogramas desde otros programas, los archivos .M pueden llamarse as mismo
recursivamente, tambin se sabe que hay 2 tipos de estos tipos de archivos que son los de
comandos y las funciones.
Tambin podemos decir que la ayuda es la que nos muestra una documentacin en la cual nos
podemos ir guiando para crear un archivo-m o un script, ya que es muy confiable y hasta nos
muestra ejemplos de cmo realizar a lo que pedimos ayuda.
Como ya haba concluido, Matlab es una herramienta muy prctica para la resolucin de funciones
matrices y nos brinda la facilidad para graficar entre otra infinidad de cosas que iremos
descubriendo en el transcurso de las clases.

Bibliografa.
Laboratorio de control 1. Prctica 2: Introduccin a MATLAB II.

S-ar putea să vă placă și