23
Operadores relacionales y lógicos

Clase 10

Embed Size (px)

Citation preview

Page 1: Clase 10

Operadores relacionales y lógicos

Page 2: Clase 10

Algunos ejemplos adicionales con la matriz A de mas arriba A=[1 2;0 3];

A

isfinite(A)

isvector(A) %A no es vector ya que posee filas y columnas y eso es una matriz

Esto lo puedo hacer en el script como esta arriba o lo puedo realizar en el comando de Windows.>>>>B = 1:3 %este si es un vector isvector(B)

Page 3: Clase 10

Además una condición puede constar de una o mas operaciones relacionales. Estas normalmente están concatenadas con expresiones lógicas cuya verdad o falsedad sigue las leyes de la lógica formal. Los operadores lógicos de MATLAB son los siguientes:

Algunos ejemplos >> x=[-1 1 1]; y=[ 1 2 -3]; >> x>0, y>0 %aquí compara los valores del vector si son mayor a 0 si no son asi asigna el valor 0 como quedo abajo

X y

>> x>0 & y>0 %aquí hace un comparación y acuérdense que & es que ambos deben ser verdadero por eso en la posición 1 y 3 los valores son 0

>> x>0 | y>0 % como bien se sabe o con uno de los dos que sea positivo el valor de retorno es 1

Page 4: Clase 10

MÁS COMANDOS DE PROGRAMACIÓN

FuncionesEstamos acostumbrados a trabajar con funciones del tipo y=f(x) donde f(x) es una expresión matemática en términos de la variable x. Se calcula un valor de y (salida) cuando se proporciona un valor de x (entrada) en la expresión. MATLAB define muchas funciones como sin(x), sqrt(x), etc.Podemos definir nuestras propias funciones guardarlas en un fichero y usarlas de un modo semejante a las funciones predefinidas. En muchos casos las funciones son los componentes básicos dentro de un programa de ordenador. Habitualmente, un programa se subdivide en tareas y cada una de ellas es llevada a cabo por una función, a esta forma de resolver los problemas se denomina programación estructurada.La principal ventaja de las funciones es la posibilidad de reutilizar el código en otros programas distintos al cual fueron definidas.La entrada y la salida puede ser una o varias variables, cada una de ellas puede ser un escalar, un vector o una matriz de cualquier tamaño.

Page 5: Clase 10

Definición de una funciónLas funciones se crean del mismo modo que un script seleccionado en el menú File/New/Function y se guardan en un fichero que tiene el mismo nombre que la función y extensión .m

Page 6: Clase 10

La primera línea en el editor es la definición de la función que comienza con la palabra clave function

nombre_funcion, es el nombre significativo que se le asigna a la función y coincide con el nombre del fichero de extensión .m en el que se guarda el código de dicha función. Las reglas para nombrar un función son las mismas que para las variables, los nombres no deben de incluir espacios, ni se pueden utilizar plabras reservadas por MATLAB.

variables_entrada, es el conjunto de parámetros que se le pasa a la función. Los nombres de las variables van entre paréntesis y separadas por coma.variabales_salida, es el valor o conjunto de valores de las variables devueltos por la función. Las variables de salida van después de la palabra reservada function entre corchetes cuadrados y separados por comas si hay varios.sentencias, líneas de código que tomando los valores de los parámetros de entrada calculan mediante expresiones los valores que devuelve la función.end, marca el final de la función es opcional (salvo en las funciones anidadas) pero es conveniente acostumbrarse a ponerlo al finalizar la función.

Page 7: Clase 10

EjemplosSuma de dos númerosEmpezaremos por una función suma que realiza la siguiente tarea, suma de dos números x e y y devuelve la suma z=x+yDefinición de la función

function [z] = suma(x,y)%Esta función suma dos números x e y%y devuelve el resultado de la suma en z z=x+y; %efectúa la sumaend

Page 8: Clase 10
Page 9: Clase 10

Llamada a la funciónLa llamada a la función se puede hacer desde la ventana de comandos>> suma(2,3)ans = 5

Otro ejemplo

function [x,v] = caida_libre(t) v=40-10*t; x=200+40*t-5*t^2;end %lo mismo lo gurdamos como caida_libre.mEn la ventana de comandos se llama a esta función caida_libre, pasándole un tiempo t=2 s, del siguiente modo

>> [pos,vel]=caida_libre(2) % solo que aquí acuérdense que la varible necesita dos valores por eso pos, vel

Page 10: Clase 10

ERROR Este comando tiene la estructura: “error( ‘mensaje’ )” dentro de una función o un archivo de comandos, aborta la ejecución y despliega el mensaje declarado en el argumento, terminando el programa y retornando el control al teclado. Ejercicio 1: Cree el archivo de función “produdcruz.m” con las siguientes líneas de comandos:

function c = produdcruz(a,b);% prodcruz(a,b) calcula el producto cruz a x bif nargin~=2 % Si no hay dos argumentos de entradaerror( 'Lo siento, necesita dos vectores de entrada' )enddisp ( 'Otros cálculos' )end En la ventana de comandos si ingresamos datos sale disp. En el segundo sale la función

error.>> produdcruz(3,3)Otros cálculos>> produdcruzError using produdcruz (line 5)Lo siento, necesita dos vectores de entrada

Page 11: Clase 10

RETURN El comando simplemente devuelve el control al que invoca la función.

function barranimada(t0,tf,x0);% barrabunada crea una animación de péndulo con una barradisp ( '¿Quiere ver el diagrama de fase?' )ans=input( 'Presione 1 para SI, 0 para NO' )if ans==0 % Si la entrada es ceroreturnelsedisp( 'Despliega el diagrama de fase' ) % Programa para el diagrama de faseendend

Page 12: Clase 10

INPUT INTERACTIVO Los comandos: “input”, “keyboard”, “menu” y pause pueden ser usados dentro del archivo de comando o de función como una entrada interactiva.

Input El comando “input( ‘instrucción’ )”, despliega el texto colocado dentro del argumento y espera una entrada por parte del usuario desde el teclado. Ejemplos: n=input( ‘Ingrese el número de repeticiones’ ). Pide al usuario el número de repeticiones de un proceso y guarda la entrada en la variable “n”. mas=input( ‘Más simulaciones? S/N’ , ‘S’ ). Pide al usuario escribir “S” para si y “N” para no, almacena la entrada como una cadena de caracteres en la variable “mas”.

Page 13: Clase 10

Keyboard El comando “keyboard” dentro de un archivo de comandos o de función, retorna el control al teclado en la línea de instrucciones donde el comando es declarado. La ejecución del archivo es interrumpido. El símbolo de la ventana de comandos cambia de “>>” a “k>>” que muestra el estado especial. En este punto, usted puede revisar las variables ya calculadas, cambiar sus valores, o ejecutar cualquier comando valido. El control es retornado al archivo al escribir en la ventana de comandos “return” y luego la tecla “enter”.

Esta función es útil para la depuración de archivos de comandos o de función. Algunas veces, durante la ejecución de un archivo, usted podría querer verificar algunos resultados intermedios, graficarlos, o si los cálculos están dirigidos en la dirección correcta y luego dejar que la ejecución del archivo continúe.

Page 14: Clase 10

% ejemtecl: archivo de comandos para ejemplificar el comando keyboardA=ones(10) % Crea una matriz de 10 x 10 con valores 1 como elementosfor k=1:10disp(k) % Despliega el valor de kA(:,k)=k*A(:,k); % Reemplaza la k-ésima columna de Aif k==5 % Cuando k = 5keyboard % Retorna el control al tecladoendend

Page 15: Clase 10

Menu El comando “menu(‘nombre_menu’, ‘opcion1’, ‘opcion2’, . . .)” crea un menú de pantalla con el “nombre_menu” y lista las opciones del menú. El usuario puede seleccionar alguna de las opciones usando el ratón o la selección desde el teclado. La utilización de este comando crea una atractiva ventana de menú con botones.

% Graficando un circulor=input('Introduzca el radio deseado');theta=linspace(0,2*pi,100);r=r*ones(size(theta)); % hace que r tenga el mismo tamaño de thetacoord=menu('Grafica del círculo', 'Cartesiana', 'Polar');if coord==1 % Si la primera opción del menú es seleccionadaplot(r.*cos(theta),r.*sin(theta))axis('square')else %si la segunda opción del menú es seleccionadapolar(theta,r);end

Page 16: Clase 10

Pause El comando “pause” detiene temporalmente el proceso en curso. Este comando puede ser utilizado de manera opcional de una de las formas siguientes: pause Detiene el proceso en curso y espera a que el usuario de la señal para continuar. Presionando cualquier tecla, se reinicia el funcionamiento del archivo. Pause(n) Detiene el proceso en curso, realizando una pausa de “n” segundos; luego de este tiempo se reinicia la ejecución del archivo.

% ejemtecl: archivo de comandos para ejemplificar el comando keyboardA=ones(10) % Crea una matriz de 10 x 10 con valores 1 como elementosfor k=1:10disp(k) % Despliega el valor de kA(:,k)=k*A(:,k); % Reemplaza la k-ésima columna de Aif k==5 % Cuando k = 5pause(2) % Retorna el control al teclado a los 2 segundos si solo se coloca pause al dar enter pasaendend

Page 17: Clase 10

Recursion El lenguaje de programación MatLab soporta recursión, es decir, una función puede llamarse a sí mismo durante su ejecución. Así algoritmos recursivos se puede aplicar directamente en MATLAB.

Page 18: Clase 10

El cálculo del factorial. Observe como se capturan los casos particulares para el0 y el 1. Y el caso de entrada inválida, n<0.% retorna el factorial del número dado

function [] = factorial(n)if n < 0disp('Ingrese un número positivo !')return;end;if (n==0 | n==1)disp('El factorial de ');disp(n);disp('es 1');return;end;mult = 1;for i = 1:n;mult = mult * i;end;disp('El factorial de '); disp(n); disp('es: '); disp(mult);end

Page 19: Clase 10

Input / output MatLab soporta muchos estándares del lenguaje C como archivos con funciones de entrada / salida para lectura y escritura en formatos binarios y archivos de texto. Entre las funciones soportadas se incluyen:

fopen Abre un archivo existente o crea un nuevo archivo fclose Cierra un archivo abierto fread Lee datos binario de un archivo fwrite Escribe datos binarios en un archivo fscanf Lee datos formateados de un archivo fprintf Escribe datos formateados a un archivo sscanf Lee cadenas de caracteres con formato especificado sprintf Escribe datos en un formato de cadena de caracteres fgets Lee una línea desde un archivo, descartando una nueva línea de caracteres fgetl Lee una línea desde un archivo , incluyendo una nueva línea de carateres frewind reinicia un archivo fseek establece el indicador de posición de archivo ftell Obtiene el indicador de posición del archivo en curso ferror Consulta el estado de error de un archivo de entrada / salida

Page 20: Clase 10

% TEMPTABLA – genera y escribe una tabla de temperaturas % Archivo de comandos que genera una tabla de temperaturas Fahrenheit – Celsius % La tabla está escrita en un archivo llamado ‘temperatura.tabla’ % ------------------------------------------------------------------------------------ F= -40:5:100; % Asigna F=[-40 -35 -30 … 100]C=(F - 32)*5/9; % Calcula los valores correspondientes en Ct=[F;C] % Crea una matriz t de dos filasfid=fopen( 'temperatura.tabla', 'w'); % Aquí crea el archivo temperatura con los valores de la matriz de arriba

fprintf(fid,' Tabla de temperaturas\n ');fprintf(fid,' ------------------------ -\n ');fprintf(fid,'Fahrenheit Celsius \n');fprintf(fid, ' %4i %8.2f\n',t,'\n');fclose(fid)

Page 21: Clase 10

En el archivo anterior, el primer comando E/S “fopen” abre un archivo “temperatura.tabla” en el modo de escritura (esto es especificado por “w” dentro del argumento del comando) y asigna el archivo identificador a la variable “fid”. El siguiente comando “fprint” utiliza “fid” para escribir las cadenas de caracteres y los datos en ese archivo. Los datos son formateados de acuerdo a las especificaciones de las etiquetas en el argumento de “fprint”. La instrucción “\n” establece una nueva línea; “4i” representa un campo entero de ancho para 4 dígitos; mientras que “%8.2f” representa un campo de punto fijo de ancho para 8 dígitos enteros y dos dígitos después del punto decimal.

Observe que los datos de la matriz “t” tiene dos filas, mientras que en el archivo de salida muestra la matriz en dos columnas. Esto es porque “t” es leído por columnas y luego escrito en la forma especificado (dos valores en una fila).

Page 22: Clase 10

Ejemplo de uso de while con break (corta el bucle):

nro = input('Ingrese un número positivo: ');i=0;while i<=nrodisp(i);i=i+1;if i==2break;end;end

Page 23: Clase 10

http://www.mathworks.com/help/matlab/functionlist.html