programacion matlab

37
PROGRAMACIÓN DE MATLAB UNIVERSIDADNACIONAL DEINGENIERIA FACULTAD DEINGENIERIA ELECTRICA YELECTRONICA KRAQ

Upload: marc-llanos

Post on 16-Jun-2015

695 views

Category:

Technology


6 download

DESCRIPTION

matlab

TRANSCRIPT

Page 1: Programacion matlab

PROGRAMACIÓN DE MATLAB

UNIVERSIDADNACIONAL DEINGENIERIA FACULTAD DEINGENIERIA ELECTRICA YELECTRONICA

KRAQ

Page 2: Programacion matlab

PROGRAMACIÓN DE MATLAB Funciones de conversión

int2str

num2str

str2double

str2num

mat2str

Convierte un numero entero en cadena de caracteres

Convierte un numero real en cadena de caracteres, con cuatro cifras decimales por defecto

Convierte una cadena de caracteres , que seria una representación de caracteres ASCII de un valor real o complejo a un número de doble precisión

Convierte una cadena de caracteres , que seria una representación de caracteres ASCII de un valor numérico

Convierte una matriz a cadena de caracteres

>> num2str(pi) ans = 3.1416

>> num2str(pi,8) ans = 3.1415927

Page 3: Programacion matlab

0 10 20 30 40 50 60 70 80 90 1000

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1DESVIACION = 0.27799

PROGRAMACIÓN DE MATLAB q=rand(1,100); dsv=std(q); desv1=num2str(dsv); plot(q); title(['DESVIACION = ',desv1]);

a='8'; st=str2num(a); z=st+15 z = 23

Page 4: Programacion matlab

PROGRAMACIÓN DE MATLAB Operadores relacionales

Page 5: Programacion matlab

PROGRAMACIÓN DE MATLAB Operadores lógicos

Operador Ejemplo

& A&B

| A|B

~ ~A

xor Xor(A,B)

Page 6: Programacion matlab

• Como ya se mencionó en el primer caso te devuelve un valor numérico. • En el segundo caso el texto tecleado como respuesta se lee y se devuelve sin evaluar, con lo que se almacena la cadena nombre

PROGRAMACIÓN DE MATLAB Lectura y escritura interactiva de variables Comando de entrada: input Permite escribir un mensaje en la línea de comandos de MATLAB y recuperar como valor de retorno un valor numérico o el resultado de una expresión tecleada por el usuario. Después de imprimir el mensaje, el programa espera que el usuario teclee el valor numérico o la expresión.

>> n=input('Teclee el número de ecuaciones: ')

>> nombre=input('¿Cómo te llamas?','s')

Page 7: Programacion matlab

los vectores

PROGRAMACIÓN DE MATLAB Lectura y escritura interactiva de variables Comando de salida: disp Permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero sin imprimir su nombre. En realidad disp siempre imprime vectores y(o matrices La cadena de caracteres

son un caso particular de

z‘) disp(' x y disp(randn(5,3))

x 0.3807 -1.5077 -1.0979 0.0519 -0.4202

y -0.8339 0.1347 -0.0013 -1.3061 0.4361

z 0.1918 0.2571 0.8237 -1.1328 0.7079

Se pueden mostrar datos y matrices

Page 8: Programacion matlab

Comando de salida: disp

Ejercicios :

1. Diseñe un programa en el cual dada una matriz A cuadrada cualquiera de tamaño n ingresado en por el usuario, permita mostrar sus autovalores.

2. Ingrese los parámetros A, f y el tiempo de duración de la siguiente señal; grafíquelo y muestre el valor medio de dicha señal

Lectura y escritura interactiva de variables

PROGRAMACIÓN DE MATLAB

Puede mostrar múltiples items en una misma línea

>> x=[1 2 3 4]; >> disp(['Los valores de x son: ',num2str(x),' viene a ser un array'])

Los valores de x son: 1 2 3 4 viene a ser un array

Page 9: Programacion matlab

Algunos otros comandos utilizados

pause : la ejecución del programa se detiene en esa línea hasta dar a una tecla

return : Interrumpe en esa línea de ejecución de la función, regresando a

donde se le hubiera llamado. Termina un programa si está en la función principal

error(‘mensaje’) : Escribe el mensaje en pantalla y finaliza al ejecución del m-fichero, regresando a donde se le llama (consola u otra función)

PROGRAMACIÓN DE MATLAB

sprintf : Devuelde los datos en una variable cadena,muy parecido a su equivalente en C

>> temp=14; hum=98; >> sprintf('La temperatura en Lima es %g °C con humedad de %g porciento',temp,hum) ans = La temperatura en Lima es 14 °C con humedad de 98 porciento

Page 10: Programacion matlab

Espacio código fuente : EDITOR (M-FILES) Espacio para ejecutar : VENTANA DE COMANDOS

PROGRAMACIÓN DE MATLAB Introducción a la programación

•Todo lenguaje de programación requiere de un espacio de trabajo más

cómodo donde escribir todas las instrucciones. • Cuando escribimos en el intérprete, si nos equivocamos en algo ya no

puedes retroceder, necesitamos también crear funciones, etc. • Por lo tanto requerimos un espacio donde escribir el código fuente y un espacio donde se ejecute.

Page 11: Programacion matlab

Tipos M-files: Archivos Script Archivos function

No olvidar que para comentarios en la programación se debe hace con %

Archivos scripts • Se trata de un editor de texto • Basado en un conjunto de sentencias • Se guarda donde se quiere, de preferencia en la carpeta de trabajo • Se guarda con el nombre que quiera Ud. Su extensión es *.m . • Las variables creadas en este archivo usan el workspace. • También se puede llamar desde la ventana de comandos.

PROGRAMACIÓN DE MATLAB

Introducción a la programación

Page 12: Programacion matlab

Ejemplo function [f,promedio]=mifuncion(x,y) f=y.*(1-y)+x; promedio=sum(f)/length(x);

Recordar que sum devuelve la suma de elementos y length el tamaño

PROGRAMACIÓN DE MATLAB Introducción a la programación Definición de funciones La primera línea de un fichero llamado name.m que define una función tiene la forma: Donde name es el nombre de la función. Entre corchetes y separados por comas van los valores de retorno (siempre que haya más de uno), y entre paréntesis también separados por comas van los argumentos • Presenta las características básicas de una función.

• Tienen que tener el mismo nombre del archivo *.m

Page 13: Programacion matlab

Scripts vs. Funciones

PROGRAMACIÓN DE MATLAB

Page 14: Programacion matlab

function y=z(n) global a y=n*a;

function y=f(x) global a a=24; k=z(4); y=2*x*k;

Las variables globales pueden ser mostrarse en el workspace mediante >> global variable

PROGRAMACIÓN DE MATLAB • Variables Locales Como en todo lenguaje de programación las variables locales se definen sólo en su espacio de trabajo, no se pude apreciar en el workspace

• Variables Globales En la definición de una función (al igual que en cualquier lenguaje de programación) los nombres de las variables son mudos, es decir, se entienden y definen únicamente dentro del fichero, sin relación con las variables exteriores. La única excepción la forman las variables declaradas como globales en ambos contextos.. global variable1 variable2 …

Page 15: Programacion matlab

PROGRAMACIÓN DE MATLAB

function y=recta(x) a=8;%pendiente y=a*x+b; %valor de la recta end >> b=4 b= 4 >> y1=recta1(3) ??? Undefined function or variable 'b'.

function y=recta(x) global b a=8;%pendiente y=a*x+b; %valor de la recta end >> global b

>> whos b Name Size Bytes Class Attributes

b 1x1 8 double global

>> b=12 b= 12 >> y1=recta(3) y1 = 36

function resultado=func(x,y) global e e=sqrt((x+y)/2); resultado=x^2+y^3+e; end

Page 16: Programacion matlab

: < Acción n>

Ejercicio: Calcular la distancia y el punto medio entre dos puntos en el espacio (hacerlo por vectores)

PROGRAMACIÓN DE MATLAB Estructuras de control de Flujo Todos los algoritmos tienes tres estructuras básicas: 1. Estructura secuencial 2. Estructura selectiva 3. Estructura iterativa

1. Estructura Secuencial:

Es aquella en la que la acción (instrucción), sigue a otra en secuencia. < Acción 1> < Acción 2>

Page 17: Programacion matlab

Permiten realizar una u otra operación según se cumpla o no determinada condición. Las siguientes figuras nos muestran tres posibles formas de bifurcación.

2. Estructura Selectiva:

PROGRAMACIÓN DE MATLAB

Page 18: Programacion matlab

Sentencias if… else anidadas que no cumpla ninguna de las condiciones que se han chequeado

Una observación importante: La condición del if puede ser una condición matricial del tipo A==B, donde A y B son del mismo tamaño. Para que la condición se cumpla es necesario que sean igual dos a dos todos los elementos de las matrices A y B.

PROGRAMACIÓN DE MATLAB 2. Estructura Selectiva: Sentencias if… else La sentencia else puede ser omitida: si no está presente no se hace nada en caso de

Page 19: Programacion matlab

PROGRAMACIÓN DE MATLAB 2. Estructura Selectiva:

Sentencias if… else

Ejercicios 1. Calcular las soluciones de la ecuación a*x^2+b*x+c=0, donde a~=0. 2. Calcular el valor absoluto de dos números cualesquiera (sin usar función). 3. Generar un número aleatorio entre -100 y 100, si es positivo menor que 30 es pequeño, si es positivo entre 30 y 80 es mediano, si es positivo entre 80 y 100 es grande. 4. Calcular el área de un triángulo conociendo sus lados. Mostrar su existencia

Page 20: Programacion matlab

PROGRAMACIÓN DE MATLAB 2. Estructura Selectiva: Sentencias swith ….case

Ejercicio 1. Diseñar un programa que ingreses el numero de la semana y te devuelva el nombre de semana. 2. Hacer un multiplexor de funciones

Page 21: Programacion matlab

Conocidas también como estructuras repetitivas, nos permiten repetir una secuencia de instrucciones un número determinado de veces.

3. Estructura Iterativas:

PROGRAMACIÓN DE MATLAB

Page 22: Programacion matlab

Sentencia while

Donde condicion puede ser una expresión vectorial o matricial. Las sentencias se siguen ejecutando. Las sentencias se siguen ejecutando mientras haya elementos distintos de cero en condicion, es decir mientras haya algún o algunos elementos true. El bucle termina cuando todos los elementos de condicion son false (es decir, cero)

Las estructuras del bucle while es

muy similar a la de C/C++/java

3. Estructura Iterativas:

PROGRAMACIÓN DE MATLAB

Ejercicio

1. Calcular de la sumatoria de 1^2+2^2+3^2+4^2+...n^2 2. Calcule :

3. Calcule la suma de los números enteros empezando en 1, hasta que la suma exceda de 100

Page 23: Programacion matlab

Los valores de i van de 1 a n variando de uno en uno, si no se especifica el paso. El vectorValores es un vector con los distintnos valores que tomará la variable i

PROGRAMACIÓN DE MATLAB 3. Estructura Iterativas: Sentencia for La sentencia for repite un conjunto de sentencias un número pre-determinado de veces. La sentencia for de MATLAB es muy diferente y no tiene la generalidad de la sentencia for de C/C++/Java

Page 24: Programacion matlab

En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados. La variable j es la que varía más rápidamente Por cada valor de i, j toma todos sus posibles valores

PROGRAMACIÓN DE MATLAB 3. Estructura Iterativas: El caso más general de la sentencia for, es tomando en cuenta el incremento, el bucle se ejecuta por primera vez desde i =n, y luego va reduciendo de 0.2 en 0.2 hasta llegar a ser menor que 1.

Page 25: Programacion matlab

En la que i es un vector que va tomando en cada iteración el valor de una de las columnas de A. Cuando se introducen iterativamente en la línea de comandos, los bucles for se ejecutan sólo después de introducir la sentencia end que los completa Ejercicios 1. La sumatoria desde x0 hasta xf de la función x^2-3x+21 2. El factorial de un numero

PROGRAMACIÓN DE MATLAB

3. Estructura Iterativas: La última forma de interés del bucle for es la siguiente (A es una matriz)

Page 26: Programacion matlab

% Break clear;clc; DAT=[0 0 0 0 0 1 2 3 4 5 6 7 6 5 4 3 2 1 0 0 0 0 0]; for i=1:length(DAT) if DAT(i)~=0 POS=i; break; end end

PROGRAMACIÓN DE MATLAB Sentencia Break

Al igual que en C/C++/Java, la sentencia break hace que se termine la ejecución del bucle for y/o while más interno de los que comprende a dicha sentencia

Dada una matriz aleatoria A encontrar la posición de su primer elemento igual a cero

Page 27: Programacion matlab

clear; clc; cont=0; while 1 cont=cont+1; alt=randi(6); disp([num2str(cont) '<=' num2str(alt)]) if alt>=cont continue else break end end

1<=1 2<=2 3<=6 4<=1 >>

1<=5 2<=4 3<=6 4<=1 >>

PROGRAMACIÓN DE MATLAB

Sentencia Continue

La sentencia continue hace que se pase inmediatamente a la siguiente iteración del bucle for o while más interno de los que comprende dicha sentencia.

Hacer un programa que muestre un menú de opciones : suma=1, resta=2, multiplicación=3 y división=4. Para dos números ingresados por el usuario y muestre resultados en consola.

Page 28: Programacion matlab

Script: ------------------ ------------------ a=funcion1; ------------------ ------------------ b=funcion2; ------------------ c=funcion3;

--------------- --------------- Funcion2() --------------- ---------------

Funcion3()

--------------- ---------------

Ejercicios 1. A partir del factorial de un número, calcular el combinatorio de m tomados de n en n

Las funciones son invocadas desde el cuerpo de un programa

PROGRAMACIÓN DE MATLAB Introducción a la programación Llamado de funciones en la misma carpeta de trabajo Funcion1()

Page 29: Programacion matlab

% Función primaria function [avg,med] = mediamediana(u) % Encuentra la media y la mediana %con las funciones internas. n = length(u); avg = media(u,n); med = mediana(u,n); function a = media(v,n) %Subfunction % Calcula la media o promedio. a = sum(v)/n; function m = mediana(v,n)% Subfunction % Calcula la mediana. w = sort(v); if rem(n,2) == 1 m = w((n+1)/2); else m = (w(n/2)+w(n/2+1))/2; end

Agregar la desviación estándar

function A(arg1) ... function Aa(a1,a2) ... function Aa1() ... end end .... function Ab() ... function Ab1() ... end ...

function Ab2() ... end ... end .... end

PROGRAMACIÓN DE MATLAB Sub-funciones

Page 30: Programacion matlab

>> varsin = @sin

>> varsin(pi/2)

ans = 1 >> trifun={@sin,@cos,@tan} trifun = @sin @cos @tan

>> trifun{3}(pi/4) ans = 1.0000 >> I=quad(@sin,0,pi) I= 2.0000

PROGRAMACIÓN DE MATLAB Manipulador de funciones (function handles @) Matlab tiene una herramienta para asignar funciones (aunque sería más correcto llamarlos métodos) a variables. Si utilizamos los Function handles para asignar una función a una variable podemos utilizar la función sin hacerlo directamente al igual que operamos los argumentos mediante variables. Un Function handle se denota con la letra @

Page 31: Programacion matlab

>> foo2 = @(x,y) sin(x)*cos(y) foo2 = @(x,y)sin(x)*cos(y) >> foo2(6,2) ans = 0.1163

>> quad(@(x) besselj(2.5,x),0,4.5) ans = 1.1178

La función es anónima porque no tiene ningún nombre fijo, seguirá siendo la misma función independientemente del nombre de

la variable.

PROGRAMACIÓN DE MATLAB Funciones anónimas

Las funciones anónimas constituyen una forma muy flexible de crear funciones sobre la marcha, ya sea en la línea de comandos o en una línea cualquiera de una función o un fichero *.m. La forma general de una función anónima es la siguiente: fhandle=@(argumentos) sentencia_ejecutable

Page 32: Programacion matlab

eval(expresion) expression = [string1, int2str(var), string2, ...] siendo

x=1:5; y=eval('(x+2)./x'); strf='sin(x*(pi/2))‘; z=eval(strf) y= 3.0000 2.0000 1.6667 1.5000 1.4000 z= 1.0000 0.0000 -1.0000 -0.0000 1.0000 for n = 1:10 eval(['A',num2str(n),' = magic(n)']) end

Probar los siguientes códigos for d=1:5 s = ['load August' int2str(d) '.mat']; eval(s) end

for n=1:10

eval(['P',int2str(n),'=n.^2']) end

PROGRAMACIÓN DE MATLAB

La función eval

Evalúa una cadena que contiene una expresión MATLAB, sentencia o llamada a función

Page 33: Programacion matlab

Se puede evaluar una función definida en la misma carpeta de trabajo colocando el nombre como string function y=fcn1(x) y=x*exp(-x^2); end >> feval('fcn1',2) ans = 0.0366

PROGRAMACIÓN DE MATLAB La función feval Evalúa el manejador de función usando el argumento x1,x2,x3,…,xn [y1, y2, ...] = feval(fhandle, x1, ..., xn) [y1, y2, ...] = feval(fname, x1, ..., xn) >> feval(@(x,y)sin(x)*cos(y),pi/6,pi/3)

ans = 0.2500 >> feval(@(x)x*exp(-x^2),2) ans = 0.0366 >> feval(@(x,y)x*y^-2+x^3*y+2,2,3) ans = 26.2222 >> [a,b]=feval(@size,[1 2 3])

Page 34: Programacion matlab

PROGRAMACIÓN DE MATLAB Métodos numéricos

Son la rama de la matemática que se encarga de diseñar algoritmos para a través de números y reglas matemáticas simples, simular procesos matemáticos más complejos aplicados a procesos del mundo real .

Método del Bisección

Consideremos una función no lineal f(x) continua en (a; b), tal que sea intervalo solución, es decir f(a) * f(b) debe ser menor que cero.

1. Halla el pto medio en el intervalo entre a y b. 1. Hallar f(c). 2. Analizar: Si f(a)xf(c) > 0 , entonces a=c. Si f(a)xf(c) < 0 , entonces b=c. 4. Se repite con el nuevo intervalo solución hasta llegar a una precisión deseada.

Page 35: Programacion matlab

PROGRAMACIÓN DE MATLAB Métodos numéricos

Método del punto fijo

Aproxima la solución de la ecuación x=g(x) empezando con un valor inicial de partida p1, y la fórmula de recurrencia es:

Page 36: Programacion matlab

PROGRAMACIÓN DE MATLAB Métodos numéricos

Método del Newton-Raphson

Permite aproximar a una raíz de de f(x)=0 a partir de un valor inicial p1, mediante la fórmula de recurrencia .

Page 37: Programacion matlab