Está en la página 1de 10

Universidad Nacional de Misiones

SINTAXIS EN MATLAB
Dr. Ing. Aldo Luis Caballero MSc. Ing. Corina Feltan
ltima versin: agosto de 2013

Se desarrollan a continuacin una serie de programas para ejemplificar funciones


en Matlab, especialmente las que se utilizan con bifurcaciones y bucles.
Funciones definidas por el usuario
Se pueden crear funciones similares a las conocidas por el usuario, por ejemplo
magic(2) crea una matriz cuadrada 2x2 con valores al azar. Para esta funcin
tenemos un argumento de entrada 2, y valores de retorno o argumentos de salida,
cmo se muestra a continuacin, si se escribe lo siguiente en la ventana de
comandos:
>> Matriz = magic(2)
Matriz =
1
3
4
2

Para crear funciones definidas por el usuario tenemos varias opciones: crear una
funcin con el comando function o utilizar las referencias de funcin, por ejemplo
si queremos que una funcin halle la edad ingresando como variable de entrada el
ao de nacimiento suponiendo que se tiene como referencia el ao 2013
Escribimos en la ventana de comandos
edad = @(x)(2013-x);
Luego para saber la edad de Nina por ejemplo: Nina = edad(1998) lo que devolver
como argumento de salida la edad
Otra forma es creando un fichero llamado edad_1.m cuya primera lnea es la
siguiente
function [e1,e2,e3en] = edad_1(x1,x2,x3xn) donde edad_1 es el nombre de la
funcin, EL FICHERO CREADO Y LA FUNCIN DEBEN TENER UGUAL
NOMBRE, las x son las variables de entrada, en nuestro caso el ao de
nacimiento y la variable e de salida nos devolver la edad pedida

function e = edad_1(x1,x2)
Juan Manuel de Rosas 325 Tel/Fax (+54 3755) 422 179 422 170 www.fiobera.unam.edu.ar e-mail: facing@fiobera.unam.edu.ar
CP3360 Ober Misiones Argentina

Sintaxis en MATLAB

anio = x1;
nombre = x2;
e = 2013 - anio ;
disp(['la edad de ' nombre ' es de ' num2str(e) ' aos'])
luego se escribe en la pantalla de comandos
edad_1(1998,'Nina');
Tenga en cuenta que el nombre es una cadena de caracteres y debe ir entre
comillas simples.
Luego usted se da cuenta que el programa no siempre da la respuesta correcta
especialmente si la persona a la que estamos calculando su edad todava no
cumpli aos al da de la fecha, por lo que usted se dispone a programar algo que
sirva, bueno si sirve no siempre es tan fcil de hacer, antes de pasar al programa
vamos a ver otro conceptos

Bifurcaciones
Una bifurcacin es una estructura selectiva, se usa para realizar operaciones
cuando se cumple una condicin, esto se consigue mediante la sentencia if

Falso

Condicin
Verdadero

Sentencias

if condicin
sentencias
end
Puede ser que se tengan varias opciones, por lo que se utiliza una bifurcacin
mltiple, en la que pueden concatenarse la cantidad de condiciones que se desee.

MODELACIN EN INGENIERA Ao 2013

Sintaxis en MATLAB

Falso

Condicin
Verdadero

Verdadero

Condicin1
Sentencias 2

Sentencias 1

Sentencias 1

Falso

Verdadero

Condicin 2
Falso

Sentencias 3

Sentencias 2

if condicin 1
sentencias 1
elseif condicin 2
sentencias 2
else
sentencias 3
end
Ahora si podemos realizar el siguiente programa para determinar la edad de la
incauta ta o abuela que nunca quiso decirnos su edad.
clc, close all
fecha.dia = input( 'ingrese el da de su nacimiento = ' );%muestra un mensaje en
la ventana de comandos para que el usuario ingrese lo que se le pide que ser el
valor que recupera el programa
fecha.mes = input( 'ingrese el nmero del mes de su nacimiento = ' );
fecha.anio = input( 'ingrese el ao de su nacimiento con cuatro dgitos = ' );
f_actual = date; % nos da la fecha actual como una cadena de caracteres
[Y,M,D] = datevec(f_actual); % trasformamos en nmeros la fecha
if M > fecha.mes; % el mes del cumpleaos ya pas (ya cumpli aos)
e = Y - fecha.anio;
elseif M < fecha.mes % el mes del cumpleaos no pas (todava no cumpli aos

MODELACIN EN INGENIERA Ao 2013

Sintaxis en MATLAB

e = Y - fecha.anio -1;
else M == fecha.mes; % si cumple este mes
if D >= fecha.dia % ya cumpli aos, su da de cumpleaos ya pas
e = Y - fecha.anio;
else

% todava no paso su da de cumpleaos

e = Y - fecha.anio -1;
end
end
h = msgbox(['

''

tens ' num2str(e) ' aos '],'EDAD','help') ; %caja de dilogo

Puede verse que se utiliz para la variable fecha: fecha.dia; fecha.mes; fecha.anio
(no puede utilizarse la letra en Matlab)
Esta forma de llamar a las variables crea una estructura que agrupa datos bajo el
mismo nombre en nuestro caso fecha
>> fecha
fecha =
dia: 15
mes: 12
anio: 1998
Por lo que con nuestro programa podemos ver que Nina tiene 14 aos.
Sentencia switch
Realiza una funcin anloga a if con bifurcacin mltiple. Su forma general es la
siguiente
switch expresin
case caso 1
sentencias 1
case caso 2
sentencias 2
otherwise
sentencias 3
ejemplo:
programa que identifica si el nmero entero ingresado es par o impar
disp(' programa que identifica si un nmero entero es par o impar ')
disp( ' ' ) % dejamos un espacio para realizar un interlineado
n = input(' ingrese el valor de x = ');
v = mod(n,2); % nos da el resto de la divisin x/2

MODELACIN EN INGENIERA Ao 2013

Sintaxis en MATLAB

switch v
case 0 % es divisible por 2 y su resto es 0
disp( ' ' )
disp(['
''
EL VALOR x = ' num2str(n) ' es PAR ']) %imprime un mensaje
si el nmero es par num2str(n) convierte al nmero n en una cadena de
caracteres
otherwise
disp( ' ' )
disp(['
end

''

EL VALOR x = ' num2str(n) ' es IMPAR ']) ;

Bucles
Son estructuras iterativas que se repiten un nmero determinado de veces
(sentecia for) o hasta que sea necesario (while)

Sentencia for
En esta sentencia las operaciones se repiten un nmero fijo de veces que viene
determinado por la longitud del vector i
for i = 1:n
setencias
end
Sentencia while
Las sentencias se siguen ejecutando mientras haya algn elemento verdadero, el
bucle se termina cuando todos los elementos de condicin sean falsos
Sentencia break
Hace que termine la ejecucin de un bucle ms interno de los que comprenden a
dicha sentencia
Ahora con lo aprendido podemos mejorar nuestro fichero edad_1.m

function e = edad_1(d,m,a,n)
f_actual = date; % nos da la fecha actual como una cadena de caracteres
[Y,M,D] = datevec(f_actual);
if M > m;
e = Y - a;
elseif M < m
e = Y - a -1;

MODELACIN EN INGENIERA Ao 2013

Sintaxis en MATLAB

else M == m;
if D >= d
e = Y - a;
else
e = Y - a -1;
end
end
h = msgbox([n ' tiene ' num2str(e) ' aos '],'EDAD','help') ;
y escribimos en la ventana de comandos
edad_1(2,12,1995,'Lucy'); que nos devuelve el siguiente cuadro de dilogo

Ejemplo
% programa que pide al el usuario que ingrese un nmero y lo compara con un
% numero al azar generado por la computadora y el usuario debe ingresar
% tantas veces el nmero hasta que lo adivine
clc
num = input(' ingresa un nmero del 0 al 10 = '); disp(' ')
n_azar = rand *10;
n_ent = fix(n_azar);
if num == n_ent
disp( 'acertaste!!')
break % el programa se interrumpe porque el usuario acert en nmero
else
disp ('no acertaste sos un perdedor :( ')
disp(' ')
disp( ['el nmero era ' num2str(n_ent)]),disp(' ')
while num ~= n_ent % se ejecutaran las sentencias hasta que acierte el nmero
num = input(' ingresa un nmero del 0 al 10 = '); disp(' ')
n_azar = rand *10;
n_ent = fix(n_azar);

MODELACIN EN INGENIERA Ao 2013

Sintaxis en MATLAB

if num == n_ent
disp( 'acertaste!!')
break
else
disp ('no acertaste sos un perdedor :( ')
disp(' ')
disp( ['el nmero era ' num2str(n_ent)]), disp(' ')
end
end
end
El siguiente programa es una variante del anterior que pregunta cuntas
oportunidades quiere para adivinar y se ejecuta el programa tantas veces cmo el
usuario desee o adivine el nmero, lo que ocurra primero.
disp('adivine el nmero' )
disp(' ')
oport = input('cuntas oportunidades quiere? = ' );disp(' ')

for i = 1:oport
num = input(' ingresa un nmero del 0 al 10 = '); disp(' ')

n_azar = rand *10; % genera nmeros al azar


n_ent = fix(n_azar); % toma slo el valor entero de los nmeros generados al azar
if num == n_ent
disp( 'acertaste!!')
break
else
disp ('no acertaste sos un perdedor :( ')
disp(' ')
end

Regresin
En clase se vieron varios ejemplos de programacin del mtodo de los mnimos
cuadrados. Matlab tiene varias funciones programadas para ajustes de curvas, la
funcin:
P = ployfit(x,y,n) realiza un ajuste polinmico de grado n a los puntos dados (x,y)
dando cmo salida los coeficientes del polinomio en potencias descendentes
= + + + +

MODELACIN EN INGENIERA Ao 2013

Sintaxis en MATLAB

cftool (Curve Fitting Tool) abre una ventana que nos permite encontrar el ajuste de
curva deseado.

Otra opcin que tiene Matlab es realizar un ajuste de curva mediante la opcin
lsqcurvefit cuya sintaxis es la siguiente:
x = lsqcurvefit(curva,xo,xdatos,ydatos)
donde:
curva = es la funcin a ajustar y a la que vamos a encontrar los coeficientes y la
creamos como una referencia de funcin o una funcin definida por el usuario

por ejemplo si queremos ajustar los siguientes datos:

t= [0 1 2.01 3.01 4 5 6 7.01 8.01 9];


tita= [150 -131.1 114.6 -100.3 87.7 -76.6 67 -58.6 51.2 -44.8];
a la funcin : cos
A = tita(1);
Ti= @(a,tp)A*cos(a(1).*tp).*exp(-a(2)*tp); % funcin a ajustar
w= 3; b= 0;xo= [w b]; % condiciones iniciales
ab= lsqcurvefit(Ti,xo,t,tita);
w= ab(1) ; b=ab(2);
T= t(1):.01:t(length(t));
Tita= A*cos(w*T).*exp(-b*T);
plot(t,tita,'*r',T,Tita,'b'), grid on
xlabel('t')
ylabel('tita')
dando como resultado el ajuste de la curva mostrado con la lnea azul y
los puntos rojos son los datos.

MODELACIN EN INGENIERA Ao 2013

Sintaxis en MATLAB

Solucin numrica de ecuaciones: Mtodo de la biseccin

a = 0; b = 1; x = a:0.01:b; fx = exp(-x) - x ;
fx = exp(-x) - x; %funcin que queremos encontrar una raz
plot(x,fx), grid on
ead=0.01; E=1; x = (a+b)/2; k = 1;
while E>ead
fx = exp(-x)-x;
fa = exp(-a)-a; %funcin evaluada en a
fb = exp(-b)-b; % funcin evaluada en b
if fx*fa < 0 ;
b = x;
fb = fx;
else
MODELACIN EN INGENIERA Ao 2013

Sintaxis en MATLAB

fx*fb < 0;
a = x;
fa = fx;
end
E = abs((fb-fa)/2);
xi(k) = x ; fxi = exp(-xi(k))-xi(k); k = k + 1; % se arma un vector
para graficar las sucesivas races
x = (a+b)/2
end
raiz = x
hold on, plot(xi,fxi,'r.'), grid on

MODELACIN EN INGENIERA Ao 2013

10

También podría gustarte