Practica 2 01

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

INSTITUTO TECNOLOGICO DE MORELIA

DEPARTAMENTO DE INGENIERÍA ELÉCTRICA

LABORATORIO DE CONTROL I

Práctica 2: “Introducción a MATLAB II”

Objetivo:
El objetivo de esta práctica es dar una introducción a la programación en Matlab.

Introducción:
Los lenguajes de programación de computadoras como Matlab ofrecen
características que permiten controlar el flujo de ejecución de órdenes basadas en
estructuras de toma de decisiones. El control de flujo es extremadamente poderoso ya
que permite que cálculos pasados influyan sobre operaciones futuras.
Debido a que las estructuras de control de flujo a menudo contienen numerosas
órdenes de Matlab, suelen aparecer en archivos-M (M-files), en lugar de escribirse
directamente en la línea de orden de Matlab.

Desarrollo:
Durante el desarrollo de esta practica se vera el funcionamiento de la
programación de Matlab, en cada una de las explicaciones se dan ejemplos del
funcionamiento de la programación de Matlab, se recomienda al alumno realicé dichos
ejemplos para su mejor entendimiento.

Tomando decisiones: Controles de flujo


Las características de control de flujo de Matlab se pueden resumir como:

Estructura de control de flujo Descripción


for x = array Un bucle for que en cada iteración asigna x a la
órdenes columna i-ésima de array y ejecuta órdenes
end

while expresión Un bucle while que ejecuta órdenes mientras todos


órdenes los elementos de expresión son verdaderas o
end distinto de cero

1
if expresión Una simple estructura if-else-end donde órdenes se
órdenes ejecuta si todos los elementos en la expresión son
end verdaderos

if expresión1 La estructura más general if-else-end. Solo se


órdenes evaluadas si la evalúan las órdenes asociadas con la primera
expresión1 es verdadera expresión verdadera.
elseif expresión2
órdenes evaluadas si la
expresión2 es verdadera
elseif
:
:
else
órdenes evaluadas si la
expresión es verdadera
end

Break Termina la ejecución de bucles for y while.

Los bucles deben evitarse siempre que haya un método de un array o matriz
equivalente que permita resolver el problema.

» for n=1:10 %Asigna un array a n de 1 a 10 y comienza el bucle


p(n)=sin(n*pi/10); %Realiza el calcula de la operación y lo almacena en un array p
n=10; %Un bucle for NO se puede terminar reasignando a la variable
end %del bucle n un valor dentro del bucle for. Termina el bucle

» n=1:10; %Vector n, para mostrar como hacer la operación anterior sin bucle

» p=sin(n*pi/10); %Calcula el vector p sin necesidad de un bucle

» for n=1:5 %Los bucles for se pueden anidar como se deseen (n va de 1 a 5)


for m=5:-1:1 %Vector de 5 a 1 con incrementos de -1
A(n,m)=n^2+m^2; %Calcula operación y almacena en matriz A
end %Finaliza ciclo for interno
disp(n) %Despliega el valor de n cada vez que se incrementa

2
end %Finaliza ciclo for externo
» manzanas=10; %Asigna el número de manzanas

» costo=manzanas*25; %Costo total de 10 manzanas con valor 25 pesos

» if manzanas > 5 %Si el numero de manzanas > 5 aplicar el 20% de descuento


costo=(1-20/100)*costo; %Calcula costo de manzanas con el 20% de descuento
end %Finaliza bucle

Funciones en archivos-M
- Los archivos-M se crean en un editor de texto o el editor de Matlab.
- El nombre de la función y el nombre del archivo deben de ser idénticos. Por
ejemplo la función linspace se almacena en un archivo denominado linspace.m.
- Las primeras líneas de comentarios hasta la primera línea de no comentario en un
archivo-M de función son el texto de ayuda que se devuelve cuando se solicita ésta,
help linspace retorna la ayuda de la función.
- La primera línea de ayuda, conocida como la línea H1, es la línea que examina la
orden lookfor.
- Todas las variables dentro de una función se aíslan del espacio de trabajo de
Matlab. Las únicas conexiones entre las variables dentro de la función y el espacio de
trabajo de Matlab son las variables de entrada y salida. Si una función cambia el valor
de cualquier variable de entrada, los cambios aparecen sólo dentro de la función y no
afecta a las variables en el espacio de trabajo de Matlab.
- Cuando una función tiene más de una variable de salida, éstas se encierran entre
corchetes, p.e. [V,D] = eig(A).
- El número de variables de entrada pasadas a una función están disponibles dentro de la
función en la variable nargin. El número de variables de salida solicitadas cuando una
función se llama está disponible dentro de la función en la variable nargout.
- El comando echo on causa que se visualicé la ejecución del archivo-M en el espacio de
trabajo de Matlab. El comando echo off deshabilita la visualización.
- La función input obtiene la entrada del usuario.
- El comando pause causa que se detenga la ejecución y esperar un tiempo o que el
usuario presione una tecla para continuar con la ejecución

Como ejemplo de las funciones abriremos una función de Matlab llamada linspace:
function y = linspace(d1, d2, n)
%LINSPACE Linearly spaced vector.
% LINSPACE(x1, x2) generates a row vector of 100 linearly

3
% equally spaced points between x1 and x2.
%
% LINSPACE(x1, x2, N) generates N points between x1 and x2.
%
% See also LOGSPACE, :.
% Copyright (c) 1984-98 by The MathWorks, Inc.
% $Revision: 5.6 $ $Date: 1997/11/21 23:29:09 $
if nargin == 2 %si no da ningún valor para n p.e.
x=linspace(0,pi), n = 100; %suministra un valor por
defecto de 100
end
if n~=1 %Si es diferente de 1 calcula la linea
y = d1:(d2-d1)/(n-1):d2;
else
y = d2;
end
Se pueden ver más ejemplos abriendo los archivos-M de Matlab.

Archivos Scripts
Funcionan igual que los archivos-M, la diferencia está en que a los archivos
Scripts no se les pueden pasar argumentos y las variables definidas y manipuladas
dentro de los archivos Scripts operan globalmente en el espacio de trabajo de Matlab y
por lo tanto pueden ser modificadas. Estos archivos no comienzan con el comando
function de los archivos de función.
Los archivos Scrip son también convenientes para introducir grandes array que
pueden, por ejemplo provenir de medidas de laboratorio. Utilizando un editor de texto
para introducir uno o más array, las capacidades de edición facilitan la corrección de
errores sin que se tenga necesidad de escribir otra vez todo el array.

%Ejemplo de como crear un archivo Script


%Ejemplo mostrado en los ciclos
%calculo de una operación sin necesidad de un ciclo
%Archivo pru.m
%se debe de encontrar en el subdirectorio bin
echo on; %Visualiza ordenes que se van ejecutando del archivo-M en
%el espacio de trabajo
n=1:10; %Vector n, para mostrar como hacer la operación anterior
%sin bucle

4
p=sin(n*pi/10); %Calcula el vector p sin necesidad de un bucle
Para ejecutarse simplemente se da el nombre del archivo en el espacio de trabajo de
Matlab.
Para ejecutar un archivo o función hay que darle el directorio de trabajo en donde se
localiza el archivo o función desde el área de trabajo de Matlab darle:

cd c:\directorio_de_trabajo

Con lo cuál se ejecuta el archivo

%Ejecuta un archivo seleccionado


%Archivo Selec.m
%echo off; %Elimina visualización del archivo
n=6; %Asigna numero para que entre al while
D=['1.- help input' %Asigna a una matriz letreros con el mismo
'2.- help eval ' %tamaño de columnas
'3.- help echo '
'4.- help while']
while(n>4) %Mientras el n>4 pedirá el numero al usuario
n = input('Selecionar un numero: '); %Pide numero al usuario
end %Termina el while
eval(D(n,5:14)); %Ejecuta la opción seleccionada cargando el
dato de la matriz D desde el elemento 5 hasta
el elemento 14

Polinomios
- Los polinomios se representan en Matlab por vectores filas de sus coeficientes en
orden descendente.

- roots (p) calcula las raíces del polinomio

- poly (r) encuentra el polinomio asociado con las raíces

- conv (a, b) multiplica los dos polinomios a y b

- deconv (c, d) divide el polinomio d entre c

- Matlab no tiene incorporada una función para sumar polinomios. Sin embargo, es fácil

5
construir una rachivo-M de función que lo haga.
- polyvar (p, x) evalúa el polinomio p en todos los valores de x

» A=[1 2 3; 4 5 6; 7 8 0]; %Crea una matiz


» p=poly(A); %Obtiene la ecuación característica de la matriz A como
un polinomio de la forma s3-6s2-72s-27
» r=roots(p); %Calcula las raíces del polinomio (valores propios de la
matriz A)
» p2=poly(r); %Regresa el polinomio original
» p=[1 -12 0 25 116]; %Crea un polinomio de la forma x4-12x3+0x2+25x+116
» r=roots(p); %Obtiene las raíces del polinomio (Resultado real +
imaginario)
» p2=poly(r); %Regresa el polinomio (Resultado real + imaginario ya
que el polinomio es de la misma forma)
» p2=real(p2) %Suprime la parte imaginaria ya que es cero
» a=[1 2 3];b=[4 5 6]; %Crea dos polinomios a(s) = s2+2s+3 y b(s) = 4s2+5s+6
» c=conv(a, b); %El producto de polinomios es la convolución de los
coeficientes
» [q,r]=deconv(c,a) %Divide el polinomio a/c, donde el cociente queda en q y
el resto en r
» d=a+b; %Suma de polinomios cuando son del mismo tamaño =
suma de vectores
» e=c+[0 0 d]; %Cuando son de diferente grado, el que tiene menor
grado debe de rellenarse con ceros al principio del
polinomio para tener el mismo grado

ó bien realizar una función (archivo-M) en un editor de texto o el editor de Matlab, para
la suma de dos polinomios:

function p=polysuma(a, b)
%POLYSUMA suma de polinomios
%POLYSUMA (a, b) suma el polinomio a y b
%Resultado esta en el polinomio p
echo on; %Visualiza la ejecución de la función,
% lo que no tenga ;
if nargin<2, %Checa el número de argumentos de entrada
%error('No están completos los argumentos'),
%Si se deje el mensaje de error no realizara nada

6
%solo presentara mensaje
b=a
end
a=a(:).' %Asegurarse que las entradas
b=b(:).' %son vectores renglón
na=length(a) %Encuentra la longitud de a y b
nb=length(b)
if nargin<2, %fue un polinomio regresa el mismo polinomio
p=[zeros(1,nb-na) a]+[zeros(1,na)] %pone ceros
else %En caso contrario suma los polinomios
p=[zeros(1,nb-na) a]+[zeros(1,na-nb) b] %pone ceros
end %Termina Función

Después en el espacio de trabajo de Matlab se puede probar de la siguiente forma:

» s=polysuma(c,d); %Llama a la función para sumar dos polinomios


(c y d anteriores)
» s=polysuma(c); %Si falta un argumento devuelve el mismo polinomio
» x=linspace(-1,3); %Se generan 100 puntos de datos entre -1 y 3
» p=[1 4 -7 -10]; %Se utiliza el polinomio x3+4x2-7x-10
» v=polyval(p,x); %Evalúa el polinomio en los valores de x y almacena el
resultado en v
» plot(x,v),title ('x^3+4x^2-7x-10'),grid; %Gráfica resultado

Nota: para cambiar de directorio se hace igual que en el sistema operativo con cd (para
grabar en otro directorio o ver los archivos de otros directorios).

Ejercicios:
1. Crear una función Matlab que, a partir de una matriz dada, genere una matriz
cuadrada añadiendo filas o columnas de ceros, según sea necesario. La función se
llamará cuadra y se guardará en el fichero cuadra.m.

2. Crear una función Matlab que sea capaz de multiplicar dos matrices y obtener la
matriz inversa del resultado La declaración de la función debe ser como la siguiente:

function resultado = calcula (matriz1, matriz2)


Nota: la función debe guardarse como calcula.m.

3. Crear una función Matlab que, tomando como entrada un vector V cualquiera,
represente en una misma ventana (subplot) los dos gráficos siguientes:
· Gráfico 1: valores de cada elemento de V, de cada elemento de V al cuadrado y de
cada elemento de V al cubo (eje y) con respecto al número de orden (eje x).

7
· Gráfico 2: valores de V (eje y) con respecto a los valores de V2 (eje x).
El vector de entrada se pueda insertar como el siguiente:

» V = [0:0.1:1.5] % desde 0 hasta 1.5 en incrementos de 0.1

La declaración de la función debe tener este aspecto:

function dibuja (V)

Nota: la función debe guardarse como dibuja.m

4. Crear un menú desde donde se puedan llamar todas las funciones anteriores, así
como la vista en clase para la suma de polinomios.

También podría gustarte