UNIVERSIDAD DE ANTIOQUIA - docentes.unal.edu.co · 1.3. Matrices complejas Matlab maneja con la...

21
1 UNIVERSIDAD DE ANTIOQUIA FACULTAD DE INGENIERÍA DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Profesores: Henry Sarmiento Héctor Botero Curso básico de Matlab Objetivo general: Al terminar el curso usted estará en capacidad de desarrollar y explicar programas en MATLAB, en los cuales se utilicen funciones de MATLAB, funciones que usted ingenie, manejo de matrices y vectores, gráficas en dos y tres dimensiones; con la característica que estos programas tendrán cero errores. Adicionalmente usted será capaz de interpretar las ayudas que ofrece MATLAB para utilizar funciones que no sean vistas en el curso. MATLAB (Matrix Laboratory) es un programa matemático que manipula matrices y vectores ágilmente. El programa fue creado en la empresa Math Works de los estados unidos. Además de contar con la manipulación matemática es posible adicionar una serie de módulos para diferentes áreas del conocimiento como son: -Sistemas de control Control system toolbox Análisis, diseño y simulación de sistemas de control automático. -Identificación de sistemas en el dominio de la frecuencia Frequency-domain system identification toolbox Modelación de sistemas lineales basada sobre las medidas de respuesta en frecuencia del sistema. -Lógica difusa Fuzzy logic toolbox Análisis, diseño y simulación de sistemas con inferencia difusa. -Análisis espectral de alto orden High order spectral analysis toolbox Análisis de señales originadas por procesos no lineales o que contienen ruido no Gaussiano. -Procesamiento de imágenes Image processing toolbox Diseño de filtros digitales, análisis estadístico, operaciones sobre el color y la morfología, transformaciones 2-D. -Modelos de control predictivo Model predictive control toolbox Aplicaciones de control que contienen muchas entradas y muchas salidas variables, algunas con restricciones. Aplicaciones a problemas de ingeniería química.

Transcript of UNIVERSIDAD DE ANTIOQUIA - docentes.unal.edu.co · 1.3. Matrices complejas Matlab maneja con la...

1

UNIVERSIDAD DE ANTIOQUIAFACULTAD DE INGENIERÍA

DEPARTAMENTO DE INGENIERÍA ELÉCTRICAProfesores:

Henry SarmientoHéctor Botero

Curso básico de Matlab

Objetivo general:

Al terminar el curso usted estará en capacidad de desarrollar y explicar programas en MATLAB, enlos cuales se utilicen funciones de MATLAB, funciones que usted ingenie, manejo de matrices yvectores, gráficas en dos y tres dimensiones; con la característica que estos programas tendrán ceroerrores. Adicionalmente usted será capaz de interpretar las ayudas que ofrece MATLAB parautilizar funciones que no sean vistas en el curso.

MATLAB (Matrix Laboratory) es un programa matemático que manipula matrices y vectoreságilmente.El programa fue creado en la empresa Math Works de los estados unidos.Además de contar con la manipulación matemática es posible adicionar una serie de módulos paradiferentes áreas del conocimiento como son:

-Sistemas de controlControl system toolboxAnálisis, diseño y simulación de sistemas de control automático.

-Identificación de sistemas en el dominio de la frecuenciaFrequency-domain system identification toolboxModelación de sistemas lineales basada sobre las medidas de respuesta en frecuencia del sistema.

-Lógica difusaFuzzy logic toolboxAnálisis, diseño y simulación de sistemas con inferencia difusa.

-Análisis espectral de alto ordenHigh order spectral analysis toolboxAnálisis de señales originadas por procesos no lineales o que contienen ruido no Gaussiano.

-Procesamiento de imágenesImage processing toolboxDiseño de filtros digitales, análisis estadístico, operaciones sobre el color y la morfología,transformaciones 2-D.

-Modelos de control predictivoModel predictive control toolboxAplicaciones de control que contienen muchas entradas y muchas salidas variables, algunas conrestricciones. Aplicaciones a problemas de ingeniería química.

2

-Análisis y síntesis MUMu analysis and synthesis toolboxHerramientas especializadas para el análisis y síntesis de control optimo H(infinito) y u-analisis.Análisis y diseño de sistemas de control robusto multivariable para sistemas lineales.

-Fundación NAGNAG foundation toolboxIncluye 200 funciones de cálculo numérico para la solución de problemas de condiciones defrontera, optimización, ajuste de curvas y superficies, y otras aplicaciones.

-Redes neuronalesNeural networks toolboxFunciones para analizar y diseñar redes neuronales. Las redes neuronales son arquitecturas decomputo, inspiradas en el sistema nervioso biológico, las cuales son útiles en aplicaciones donde unanálisis formal es extremadamente complicado o imposible, tal como reconocimiento de imágenes eidentificación y control de sistemas no lineales.

-Diseño de control no linealNonlinear control design toolboxDiseño de sistemas de control lineal y no lineal, usando técnicas de optimización en el dominio deltiempo. Incluye una interface gráfica para observar el comportamiento de las restricciones ysintonizar los parámetros del controlador.

-OptimizaciónOptimization toolboxComandos para la optimización de funciones lineales o no lineales e incluye las restricciones. Unproblema de optimización puede ser visualizado como el intento de encontrar el punto mas alto omas bajo en un paisaje encerrado por una cerca. Un algoritmo de optimización puede serdesarrollado para explorar a través del paisaje y buscar desde la topología los puntos extremos.

-Teoría de realimentación cuantitativaQuantitative feedback theory toolboxDiseño de sistemas de control en el dominio de la frecuencia utilizando QTF para sistemas conincertidumbre.

-Control robustoRobust control toolboxAnálisis y diseño de sistemas de control que son robustos con respecto a las incertidumbres que sepuedan presentar en el mundo real.

-Procesamiento de señalesSignal processing toolboxColección de funciones M de MATLAB para el procesamiento de señales.Este modulo incluye representación de señales y sistemas, cálculo de respuestas temporales y enfrecuencia, diseño de filtros, transformada de Fourier, identificación de sistemas.

3

-SimulinkSimulink toolboxAmbiente gráfico para el análisis, diseño y simulación de sistemas de control lineales y no lineales.Este permite trabajar con sistemas continuos, sistemas discretos, sistemas con múltiple tiempo demuestreo y sistemas híbridos.

-Simulación en tiempo realSimulink real time workshopSimulación en tiempo real e implementación de estrategias de control sobre hardware en tiempo real. Generación de códigos desde los bloques de Simulink para aplicación en sistemas de tiempo real.

-Spline toolboxInterpolación segmentaria que utiliza aproximaciones polinómicas. El método se origino utilizandouna lamina de plástico delgada llamada curvígrafo, que en ingles es spline, y con el cual se trazancurvas entre puntos.

-EstadísticaStatistic toolboxContiene un grupo de comandos para el análisis de datos estadísticos; simulación de Monte carlo yherramientas para el análisis de probabilidades.

-Matemática simbólicaSymbolic math toolboxContiene un conjunto de funciones para realizar cálculos simbólicos basados en Maple. La versiónextendida soporta programas en Maple y adiciona otros comandos.

-Identificación de sistemasSystem identification toolboxConjunto de herramientas para la estimación e identificación de sistemas. La identificación es unaforma de obtener el modelo matemático de un sistema físico (como un motor eléctrico) basado en elregistro de las señales de entrada y de salida del sistema.

-Otros...

Cada uno de estos módulos se conoce internacionalmente como TOOLBOX y son programas que sepueden adicionar al paquete básico de MATLAB que será visto en este curso.

Nota:

Este curso es del tipo tutorial. Por lo tanto le recomendamos que cuando lo lea, tenga al frente uncomputador en el cual MATLAB este funcionando correctamente.Los comandos que debe teclear se identificaran con >> y se distinguen porque tienen un fondo, estesímbolo NO lo tiene que escribir.De otro lado, los programas que se anexan tienen un encabezado que los identifica como tales.

4

1. INGRESO DE DATOS

1.1. Ingreso de matrices y vectores

Los datos en MATLAB se ingresan en forma matricial

>>a=[1 2 3 4 5 6]Es una matriz (1*6) con sus elementos separados por espacio.

>>b=[3,4,7,6,4,3]Es una matriz (1*6) con sus elementos separados por coma.

>>c=[1,2,3;4,5,6;7,8,9]Es una matriz (3*3). Las filas se separan con punto y coma.

>>d=[1,2,3 enter 4,5,6 enter 7 8 9]Es una matriz (3*3). Las filas se separan con enter.

1.2. Ingreso de números complejos

Los números complejos se ingresan como:

>>a=2+3*iEs el complejo 2+3*j.

>>b=2+3iEs el complejo 2+3*j.

1.3. Matrices complejas

Matlab maneja con la misma sencillez matrices complejas o reales y operaciones de :-Suma de matrices-Resta de matrices-Multiplicación de matrices-División de matrices

El ingreso de matrices con números complejos sigue las reglas parael ingreso de matrices con números reales y el ingreso de números complejos.

>>h=[3+4*i,3+6*i;6+7*i,9+10*i]Matriz compleja (2*2).

>>j=[3+4i,3+6i;6+7i,9+10i]Matriz compleja (2*2).

>>k=[3,3;6,9]+i*[4,6;7,10]Matriz compleja (2*2).

5

>>reales=real(k)Matriz que contiene la parte real de cada elemento de k

>>imaginarios=imag(k)Matriz que contiene la parte imaginaria de los elementos de k

>>magnitud=abs(k)Matriz que contiene la magnitud de cada elemento de k

>>angulos=angle(k)Matriz que contiene los ángulos de los elementos de k (en radianes)

>>kinv=inv(k)Asigna a kinv la matriz inversa de k.

*******COMANDO MAS IMPORTANTE DE MATLAB******EL COMANDO MAS IMPORTANTE DE MATLAB ES :HELP

Intente ensayar:

>>help inv

2. MANIPULACIÓN DE MATRICES Y VECTORES

Matlab permite jugar con los componentes de una matriz o un vector

>>a=[1 2 3;4 5 6;7 8 9];>>B=a(:,1)Asigna a B la primera columna de a.

>>b=a(1,:)Asigna a b la primera fila de a.

Observe que MATLAB es Case sensitive:DISTINGUE ENTRE MAYÚSCULAS Y minúsculasPreguntémosle por B y por b:

>>b>>BSi ve que son diferentes???

6

Ahora bien, que será:>>c=a(2,:)>>k=[a(1,1:2),a(3,3)];Que es esto?Ensaye.

>>H=[a(1,:);a(3,:)]Matriz (2*3) construida con la primera y la tercera filas de aIntente con otros.

3. MATRICES ESPECIALES

Matlab maneja algunas matrices especiales como:

>>d=zeros(5)Matriz de ceros (5*5)

>>g=zeros(2,3)Matriz de ceros (2*3)Pregúntele a HELP por zeros

>>H=ones(2,3)Matriz de unos (2*3)

>>j=eye(3)Matriz identidad (3*3)

>>l=magic(5)Matriz mágica (5*5)Pregúntele a HELP por magic

>>m=rand(3)Matriz de números aleatorios (3*3)

>>n=rand(2,3)Matriz de números aleatorios (2*3)

!!!!SI TIENE ALGUNA DUDA PREGÚNTELE A HELP!!!HELP SABE MUCHO

4. OPERACIONES SOBRE MATRICES

Definidas las matrices:

>>x=[1;2;3]>>y=[4;5;6]

7

>>a=[9,5;7,3];>>b=[4,8;3,0];

Realicemos operaciones de coquito con x e y .>> x'Transpuesta de x (Que fácil)

>>j=x'Asigna a j la transpuesta de x (j queda de orden (1*3))

>>k=y'Asigna a k la transpuesta de y (k queda de (1*3))

>>l=x+ySuma de matrices

>>m=x-yResta de matrices

>>n=x*yERROR

>>o=x.*yHace la multiplicación elemento por elemento(Este es el efecto del punto)

>>p=x'*yMultiplica la transpuesta de x por y Resultado(1*1)

>>q= x'.*yERROR

>>r=x*y'Matriz x por y transpuesta Resultado (3*3)

>>s=x.*y'ERROR

>>t=x*2Cada elemento de x por 2

>>u=x.*2Igual al anterior

>>v=x.\yCada elemento de y dividido por cada elemento de x(división de matrices)

>>w=a\b

8

En w queda a^(-1)*b

>>ww=b/aEn ww queda b*a^(-1)

>>aa=2\xCada elemento de x dividido por dos

>>bb=2.\yCada elemento de y dividido por dos

>>d=x./yCada elemento de x dividido cada elemento de y

>>e=x^yERROR

>>f=x.^yCada elemento de x elevado a la cada elemento de y

>>g=x^2ERROR

>>h=x.^2Cada elemento de x elevado a la dos

>>i=2^xERROR

>>j=2.^x2 elevado a la cada elemento de x

5. GENERAR SECUENCIAS DE DATOS

Matlab permite generar vectores de forma sencilla

>>a=(1:10)

>>b=[1:10]Genera la secuencia 1 2 3 4 ...10 (vector (1*10)),este vector queda almacenado como a y como b.

>>c=[1:2:10]Genera la secuencia 1 3 5 7 9 vector (1*5)Inténtelo para que no se aburra leyendo !!

La forma general es:

9

nombre=[inicio:incremento:final]

Ejemplo:Si se tiene una función dependiente del tiempoy(t)=3+seno(t)y se quiere evaluar para 0<t<4*pi>>t=[0:pi/32:4*pi]nombre(t)=[inicio(0):incremento(pi/32):final(4*pi)]>>y=3+sin(t)genera un vector llamado y>>plot(t,y)grafica los resultados

6. POLINOMIOS

En Matlab los polinomios se ingresan como vectores p(x)=x^2+3x+2Se ingresa como:>>p=[1 3 2]también>>p=[1,3,2]

Observe que se ingresan los coeficientes del polinomio comenzando por el de mayor orden hasta elde menor orden.q(x)=4x^3+5x+1>>q=[4 0 5 1]Que facilidad !!

6.1. Suma de polinomios

Para sumar polinomios los vectores deben tener el mismo tamaño.EjemploSumar los polinomios:p(x)=3x^2+2x+1q(x)=6x+3En Matlab la suma será:

>>p=[3 2 1];

>>q=[1 3];

>>suma=p+qERROR

Los vectores que almacenan los polinomios deben tener las mismas longitudes. Se procede entoncescomo:>>p=[3 2 1];>>q=[0 1 3];

10

>>result=p+qY ahora si se obtiene el resultado correcto que usted estará en capacidad de interpretar.

6.2. Resta de polinomios

>>resta=p-qSe conservan las mismas reglas que en la suma pero con el signo menos.

6.3. Multiplicación de polinomios

La multiplicación polinómica es ejecutada por la función CONV la cual hace la convolución de losdos arreglos. La convolucion es una operación matemática que opera sobre sucesiones; en el caso dedos sucesiones hechas a base de coeficientes, la sucesión resultante representa los coeficientes delpolinomio que se obtiene cuando se multiplican los polinomios originales; por eso el nombre deCONV.Multipliquemos los polinomios p y q>>mutiplic=conv(p,q)La multiplicación de mas de dos polinomios requiere el uso repetido del comando conv.

6.4. División de polinomios

La división de polinomios se efectúa con la función deconv. Cuando el resultado de la división esincompleta se debe a la aparición de un residuo.En Matlab la división de los polinomios p y q será:>>[div,resd]=deconv(p,q)el resultado obtenido en la variable div es el cociente de la división, y el resultado obtenido en resdserá el residuo.

6.5. Derivada de un polinomio

Matlab ofrece un comando para derivar polinomios. Si se desea la derivada de p respecto a x, seescribirá:>>derivada=polyder(p)

6.6. Evaluación de polinomios

Matlab también permite evaluar polinomios para un valor o unos valores determinados de susargumentos:Ejemplo: Evaluar el polinomio p para x=0,1,2,3,4

Esto en Matlab será:>>x=[0:1:4];>>valores=polyval(p,x)El resultado es un vector que contiene las evaluaciones pedidas.

6.7. Raices de polinomios

Para encontrar las raíces de un polinomio se utiliza el comando ROOTSEncontremos las raíces de q

11

>>raizq=roots(q)

6.8. Construir un polinomio a partir de sus raíces

Matlab permite reconstruir un polinomio cuando se conocen sus raíces.Reconstruyamos q>>qr=poly(raizq)

7. GUARDAR EL TRABAJO REALIZADO

7.1. Guardar el espacio de trabajo

Las matrices o vectores que usted ingrese en el espacio de trabajo, pueden ser guardadas. Para estoutilice el comando SAVE NOMBRE, donde nombre indica el nombre deseado para el espacio detrabajo.También puede salvar el espacio de trabajo con el comando SAVE WORKSPACE AS... que seencuentra en la barra de menú.Ejemplo:Se ingresan las siguientes matricesPrimero que nada, borremos los datos que se tengan:>>clearAhora ingresemos dos matrices:>>a=[1 2;3 4];>>b=[5,1;6,2];Para guardar estas matrices se hace:>>save ensayoy las matrices a y b quedaran guardadas en el archivo ensayo.mat

7.2. Recuperar un espacio de trabajo guardado

Las matrices y vectores que han sido guardados en un espacio de trabajo pueden ser recuperadasmediante el comando LOAD NOMBRE, donde NOMBRE indica el nombre con el cual se guardó elespacio de trabajo que se desea recuperar.Ejemplo:Cargar el espacio de trabajo que se guardó en el numeral 7.1.>>load ensayoPara estar seguros de que se ha recuperado el espacio de trabajo correcto se escribe el comandoWHOS:>>whos!!Pregúntele a help por whos!!

7.3. Guardar la sesión

Guardar la sesión significa que todo lo que usted ha escrito queda almacenado en un archivo quepodrá recuperar cuando lo desee.

12

Con esta opción usted guardara hasta los errores que cometa y todos los mensajes que aparecen enla pantalla.Para realizar esto se utiliza el comando DIARY.Ejemplo:Guardar en un archivo todo lo que se escribirá a continuación.

>>diary viejitoEn el archivo viejito quedara guardado lo que se escriba desde aquí hasta que aparezca diary off>> matriza=[1,2,3;4,5]>>a=[1 2 3]>>a*b>> b=[4;5;6];>>c=a*b>> diary off

Hasta aquí quedara guardado lo que se ha escrito, con todo y errores. Además quedan los mensajesde error que entrega el programa.Usted puede seguir guardando texto en viejito. solo escribiendo de nuevo diary on y luego cuandono quiera guardar mas texto escriba diary off.

7.4. Recuperar la sesión

Ahora bien, lo que usted ha guardado con el comando diary, lo puede recuperar solo abriendo elarchivo viejito desde un editor de texto.Lo que obtendrá será lo siguiente:

a=[1,2,3;4,5]

??? All rows in the bracketed expression must have the samenumber of columns.

a=[1 2 3]

a =

1 2 3

a*b

??? Undefined function or variable b.

b=[4;5;6];

c=a*b;

diary off

13

8. GRÁFICAS SIMPLES

Matlab es un programa que cuenta con poderosas subrutinas para realizar gráficas en dos o tresdimensiones. Sin embargo nos limitaremos a realizar una gráfica en dos dimensiones:Ejemplo:Graficar la función y=seno(x), para 0<=x<=2*pi.Para realizar la gráfica primero se debe definir el eje de las abcisas:>>x=[0.0:.1:2*pi];y luego evaluar para cada valor de x:>>y=sin(x);Ahora construir la gráfica:>>plot(x,y)Pongamos adornos:>>title('Mi primera grafiquita en Matlab')>>xlabel('Abcisa')>>ylabel('Ordenada')

Ahora hagamos otra gráfica:Se recuerda del paraboloide hiperbólico ó la famosa silla de montar del cálculo ?La función del paraboloide hiperbólico es:

(y^2/a^2)-(x^2/b^2)=cz

Es decir:

z=((y^2/a^2)-(x^2/b^2 ))/c

>>a=2;>>b=3;>>c=4;>>x=[-7.5:.5:7.5];>>y=x;>>[X,Y]=mesgrid(x,y);>>Z=((Y.^2./a^2)-(X.^2./b^2 ))./(c);>>mesh(X,Y,Z)

Ahora bien, tuvo problemas para realizar la gráfica?Veamos como solucionar los problemas facilmente.

9. PROGRAMAS EN MATLAB

Hasta ahora se ha trabajado en el espacio de trabajo de Matlab, ahora veremos como hacer unprograma.

14

Los programas en Matlab se escriben en un lenguaje especial llamado Lenguaje m el cual secompone de los comandos de Matlab. Es decir no es necesario ser un programador experto pararealizar programas con Matlab.Los programas se escriben en algún editor de texto y se les asigna un nombre con la extensión .M.Luego los programas se pueden ejecutar desde el espacio de trabajo tecleando el nombre delprograma.Ejemplo:Realizar el programa que gráfica la silla de montarPrimero se debe abrir un editor de texto. Matlab tiene su propio editor al cual se puede accesar conlos comandos:FILENEWM-FILEa los cuales se accede desde la barra de menú.El programa escrito queda de la forma:

%Programa para realizar el gráfico de la silla de montar con % se ponen %comentariosa=10; %Se definen las constantesb=10;c=1;x=[-7.5:.5:7.5]; %Se delimita el rango para el eje xy=x; %El rango de y será el mismo de x[X,Y]=meshgrid(x,y); %Se crea un espacio tridimensional para graficar

Z=((Y.^2./a^2)-(X.^2./b^2 ))./(c); %Se evalua la variable zmesh(X,Y,Z) %Se grafican los resultadosview(-30,-160) %Se ubica el punto de visualización%Fin del programa

Cualquier duda sobre los comandos utilizados consulte con help.

10. CONTROL DE FLUJO

El control de flujo es extremadamente poderoso porque este hace que cálculos pasados sirvan pararealizar cálculos futuros. Matlab ofrece tres estructuras para la toma de decisiones o control de flujo:

10.1. Loop PARA (for)

En un loop for un grupo de comandos es ejecutado un número predeterminado de veces. La formageneral es:

for x=arreglo comandosend

Ejemplo:Programa que calcula el seno de x para x entre 0 y pi con intervalos de 1

15

%Programa que ejemplifica la utilización del FORfor n=1:pi x(n)=sin(n);end%Fin del programa

Ejemplo:

%Ejemplo de activación del reloj y retardo insertado por un FORt=[0:1:8000]; %se crea un vectortiempo1=clock; %se asigna el primer tiempoh=sqrt(t); %calcula un vector h como la raiz cuadrada del

%vector ttiempo2=clock; %se asigna el segundo tiempo

%el tiempo de ejecución fue:

ejecucion1=etime(tiempo2,tiempo1)

%ahora utilizando el fortiempo3=clock;for i=1:8001 j(i)=sqrt(t(i));endtiempo4=clock;ejecucion2=etime(tiempo4,tiempo3)%Fin del programa

Tarea:Resuelva el mismo problema utilizando los comandostic y toc

10.2. Loop MIENTRAS (while)

Las instrucciones se ejecutan cíclicamente mientras se cumpla la condición.

while condición instrucccionesend

10.3. Condicional if

Las instrucciones1 se ejecutan si se cumple la condición 1, en caso contrario, si se cumple lacondición 2 se ejecutan las instrucciones 2, si no se cumple ninguna de estas condiciones seejecutan las instrucciones 3.

if condicion1 instruccciones1

16

elseif instruccciones2else instruccciones3end

Ejemplo en el que se utiliza if y while:

%Programa para sumar dos polinomios sin importar su orden.homedisp('programa para sumar polinomios')disp(' ')disp('presione enter para continuar')pausek=1;while k=1

homep1=input(' entre polinomio numero 1:'); %sirve para ingresar datosp2=input('entre el polinomio numero 2:');homedisp('el polinomio numero 1es:')p1disp(' ')disp('el polinomio numero 2 es:')p2disp(' ')disp('presione enter para continuar')pauselp1=length(p1);lp2=length(p2);k=lp1-lp2;if lp1==lp2

pt=p1+p2; elseif lp1>lp2 p2=[zeros(1,k),p2]; pt=p1+p2; else p1=[zeros(1,-k),p1]; pt=p1+p2; end

home disp('la suma total es')

pt

disp(' ')k=input('Si desea otra suma teclee 1 sino teclee 0');pause

end %este es el end del while

17

%Fin del programa

No tiene muchos comentarios para que lo piense usted mismo, observe el despliegue en la pantalla.

11. FUNCIONES M

La mayoría de las funciones de MATLAB se llaman funciones M. Un ejemplo de estas funciones esroots. Busque esta función y observe el programa.Así mismo usted puede crear sus propias funciones, de hecho cuando usted hace un programa y loguarda con la extensión .m este queda como una función M la cual puede ser ejecutada con soloescribir su nombre.Ahora bien, el primer grupo de comentarios que usted escriba en la función saldrá en la pantallacuando usted le pregunte a help por esta función.

Ejemplo:Realizar una función M que al ingresarle un grupo de datos calcule la media y el máximo valor delarreglo:

function [media,maximo]=medmax(datos)

%MEDMAX Calcula la media y el máximo de un arreglo.%El arreglo de datos se ingresa en forma de vector fila o columna.%Este es el primer ejemplo de una función.%Esta primera parte de comentarios aparecerá cuando se%invoque help medmax.%Ejemplo:%[med,max]=medmax(vector)%Calcula la media y el máximo de los datos almacenados en vector,%los resultados se encuentran en med y max respectivamente.%Observe que estos comentarios no aparecen cuando se invoca%help medmax por que ya se dejó un renglón en blanco.%n=length(datos);media=sum(datos)/n;maximo=max(datos);%%Termina la función

12. SOLUCIÓN DE ECUACIONES DIFERENCIALES ORDINARIAS

Matlab permite resolver numéricamente una ecuación diferencial o un sistema de ecuaciones. Paraesto utilizaremos dos métodos de solución:- Comando ode23- Métodos de Runge-Kutta

El sistema dinámico que se resolverá consiste en un circuito R-L-C serie con una fuente de tensiónsenoidal

18

R= Resistencia eléctrica [ohm]L= Inductancia [H]C= Capacitancia [F] El circuito eléctrico se ilustra en la siguiente figura:

Donde:R= 100 ohmL= .1 HC= 1 uFV= 1*cos(377*t)

12.1. Comando ode23

Para utilizar el comando ode23 se debe crear primero un archivo M que contenga la ecuacióndiferencial de orden n como un conjunto de n ecuaciones de primer orden así:

function xprima=rlc(t,x)%xprima=rlc(t,x)%Contiene las ecuación diferencial de orden n como%n ecuaciones diferenciales de primer orden.%Las variables de estado son:%x(1)=i(t)%x(2)=Vc(t)

%Los parámetros son:L=.1;R=100;C=1E-6;%La fuente de excitación es:e=1*cos(377*t);%

%Las ecuaciones diferenciales son:xprima(1)=1/L*(e-R*x(1)-x(2));xprima(2)=1/C*x(1);%Termina la M function

Para correr el programa se ejecuta:

>>x0=[0;0];%condición inicial>>[t,x]=ode23('rlc',0,.04,x0];>>i=x(:,1);>>Vc=x(:,2);

19

>>subplot(2,1,1)Acuda a help para averiguar por subplot>>plot(t,i)>>subplot(2,1,2)>>plot(t,Vc)

12.2 Método de runge-kutta

En este caso se utilizaran las fórmulas del método de Runge-Kutta de cuarto orden. Es decir, no seutilizara ningún método implícito de Matlab sino que se programará el algoritmo.El primer paso consiste en escribir la ecuación diferencial del sistema en la forma:(d/dt)X=A*X+B*UDonde:X; Estado del sistemaA: Matriz del sistemaB: Matriz de entradaU: Vector de entradaEl sistema queda de la forma:(d/dt)X1=(R/L)*X1+(-1/L)*X2+(1/L)*e(d/dt)X2=(1/C)*X1+0*X2+0*e; Es decir como se hizo en 12.1El programa queda de la siguiente forma:

%PROGRAMA QUE RESUELVE LA ECUACIÓN DE ESTADO %(d/dt)X=AX+BU YGRÁFICA LOS ESTADOS DEL SISTEMA%METODO DE SOLUCIÓN: RUNGE-KUTTA DE CUARTO ORDENhomeclearclcdisp(' ')disp(' PROGRAMA QUE PERMITE RESOLVER LA ECUACIÓN DE ESTADO(d/dt)X=AX+BU UTILIZANDO')disp(' EL METODO NUMÉRICO DE RUNGE-KUTTA DE CUARTO ORDEN')disp(' ')disp(' ')disp(' ! PRESIONE ENTER PARA CONTINUAR ! ')pausehome

format long%ENTRADA DE DATOSR=100;L=.1;C=1e-6;A=[-R/L,-1/L;1/C,0];B=[1/L,0];NO=2; %Orden del sistemaY(:,1)=input('ENTRE EL VECTOR DE ESTADOS INICIALES: ');h=input('ENTRE EL VALOR DE h CON QUE DESEA TRABAJAR: ');N=input('ENTRE EL NUMERO DE PASOS DESEADOS: ');

20

%INICIA EL CICLO PARA EL MÉTODO NUMÉRICOt(1)=0;for k=2:N; E=1*cos(377*t(k-1)); K1=h*(A*Y(:,k-1)+(B.*E)); K2=h*(A*(Y(:,(k-1))+(K1/2))+(B.*E)); K3=h*(A*(Y(:,(k-1))+(K2/2))+(B.*E)); K4=h*((A*(Y(:,(k-1))+K3))+(B.*E)); Y(:,k)=(Y(:,(k-1))+((1/6).*(K1+(K2.*2)+(K3.*2)+K4))); t(k)=(k-1)*h; %SE REPITE EL CICLO DE NUEVO Y AUMENTA k=k+1end%TERMINA EL CICLO CUANDO k=N%MUESTRA LAS GRÁFICASfor i=1:NO plot(t,Y(i,:)) xlabel('Tiempo (s)' ),ylabel(' Variable de estado' ) zoom grid pauseend

13. PROGRAMAS ADICIONALES SOBRE VISUALIZACIÓN

%Programa para hacer una cara feliz%Que debe tener usted al terminar el cursoclear,clf,hold off

dt=pi/20t=0:dt:2*pix=cos(t);y=sin(t);axis('off'),hold onplot(x,y)hold on

for k=0.8:-0.05:0.05 plot(k*0.1*x-0.3,k*0.15*y+0.1) plot(k*0.1*x+0.3,k*0.15*y+0.1)ends1=3*pi/2-1.1;s2=3*pi/2+1.1s=s1:dt:s2;xs=0.5*cos(s);ys=0.5*sin(s);plot(xs,ys)hold off

%Grafica de una esfera en tres dimensiones

21

clear, clfaxis ([-1.5, 1.5, -1.5, 1.5, -1.3, 1.3])view ([1 -0.5 0.31])caxis([-0.8 1.5])colormap hothold onL=[0.5, 0.3, 0.7]; V=[1, 1, 1][x,y,z]=sphere(20);[xn,yn,zn]=surfnorm(x,y,z);% r=specular(xn,yn,zn,L,V);r=diffuse(xn,yn,zn,L);surfc(x,y,z,r)shading interp