Está en la página 1de 33

Universidad Nacional Agraria La Molina

Facultad de Ingeniera Agrcola


Departamento de Recursos Hdricos

Anlisis Numrico
(Aplicaciones con MATLAB)

Programacin
con MATLAB

Jess Abel Meja Marcacuzco, Ph.D.


Lima - Per
PROGRAMACIN CON MATLAB

MATLAB proporciona un lenguaje de programacin


de alto nivel y muy poderoso, con un ambiente
computacional interactivo, que incluye estructuras de
datos, funciones, instrucciones de control de flujo,
manejo de entradas/salidas e incluso programacin
orientada a objetos.

Los programas de MATLAB se escriben en archivos


con extensin .m que no es otra cosa que un cdigo
MATLAB (scripts) que ejecuta una serie de
comandos o funciones que aceptan argumentos y
producen una salida. Los archivos-M se crean con el
editor del MATLAB o cualquier otro editor de texto.
Editor de texto y Archivos-M

Para crear un archivo-M se utiliza el Editor/Debugger, que


se activa desde la barra de herramientas de MATLAB o
mediante File New M-file y una vez editado el
programa se puede guardar dentro del directorio del
MATLAB u otro directorio mediante File Set Path Add
Folder. Para ver el contenido de un archivo-M se usa el
comando type seguido del nombre del archivo.

La estructura de un archivo-M, puede incluir:

Comentarios, los cuales empiezan con el smbolo %


Instruccin para leer los datos de entrada
Instrucciones a ejecutar
Instrucciones para escribir los datos de salida.
Instruccin end para terminar la funcin
Instruccin For

Esta sentencia permite ejecutar de forma repetitiva un comando o grupo


de comandos varias veces. La forma general de un bucle o lazo for es:

for variable = expresin


instruccin 1
instruccin 2
instruccin n
end

El bucle siempre empieza con la expresin for y termina con end, e incluye
en su interior un conjunto de instrucciones. Dentro de la instruccin for
puede incluirse otras instrucciones de for generndose un for anidado,
como puede verse a continuacin:
N=3;
for I = 1:N,
for J = 1:N,
A(I,J) = 1/(I+J-1);
end
end
Ejemplo 1: Suma de los 10 primeros nmeros enteros
suma = 0;
for i =1:10
suma = suma +i;
end
fprintf ('La suma es: %g',suma)
La suma es: 55

Ejemplo 2: Suma de los nmeros enteros pares entre 1 y 10


suma = 0;
for i = 0:2:10
suma = suma +i;
end
fprintf ('La suma es: %g',suma)
La suma es: 30

Ejemplo 3: Factorial de un nmero entero positivo


n = input ('dar un nmero entero positivo \n');
factorialn=1;
for i = 1:n
factorialn = factorialn*i;
end
fprintf('El factorial de % g es %g', n, factorialn)
El factorial de 5 es 120
Ejemplo 4: Aplicacin de for anidado
1 2
suma aij 3 4
n m
Suma de todos los elementos de una
i 1 j 1
matriz nxm: 5 6

% Suma de los elementos de una matriz nxm (3X2).


n = input ('nmero de filas \n');
m = input ('nmero de columnas \m');
suma = 0;
for i = 1:n
for j = 1:m
fprintf ('elemento %g,%g',i,j);
a(i,j) = input ('de la matriz \n');
suma = suma + a(i,j);
end
end
fprintf ('La suma total es: %g', suma)
La suma total es: 21
Ejemplo 5: Raz cuadrada, cbica y cuarta de los 10 primeros nmeros enteros

clear,clc
disp( ' N cuadrada cubica cuarta ' )
for N=1:10
fprintf(' \n %10.0f ',N)
for R=2:4
raiz(N)=N^(1/R);
fprintf(' %8.5f %8.5f %8.5f\n ',raiz(N))
end
end

N cuadrada cubica cuarta


1 1.00000 1.00000 1.00000
2 1.41421 1.25992 1.18921
3 1.73205 1.44225 1.31607
4 2.00000 1.58740 1.41421
5 2.23607 1.70998 1.49535
6 2.44949 1.81712 1.56508
7 2.64575 1.91293 1.62658
8 2.82843 2.00000 1.68179
9 3.00000 2.08008 1.73205
10 3.16228 2.15443 1.77828
Instruccin While

Esta instruccin o sentencia permite ejecutar de forma repetitiva un comando


o grupo de comandos un nmero determinado de veces mientras se cumple
una condicin lgica especificada. La sintaxis general de este bucle es:

while condicin
instrucciones
end

El bucle siempre empieza con la sentencia while seguida de una condicin, y


termina con end, e incluye en su interior todo un conjunto de instrucciones.

Ejemplo: Volumen de esfera cuyo radio, r, vara de 1 a 5

r=0;
while r < 5
r = r +1;
vol = (4/3)*pi*r ^ 3;
fprintf ('El radio es %g y el volumen es %g. \n',r,vol)
end
Instruccin If-end

La declaracin if-end se usa para cambiar la secuencia en que se ejecutan


las instrucciones, satisfaciendo algunas condiciones los valores de las
variables generados durante el programa. Esta instruccin tiene la forma:

if condicin
instrucciones
End

La condicin del if tambin puede contener operadores lgicos. Si la


condicin no se cumple, el programa ejecuta la instruccin despus de end. A
continuacin se presenta un ejemplo del Uso de if y end:

% El programa pide la calificacin para indicar si aprob o reprob un curso


calif = input ('Dame la calificacin:\n');
if calif >=10.5
fprintf ('Felicidades, ests aprobado')
end
if calif<10.5
fprintf ('Lo siento. Ests reprobado')
end
Instruccin If-else-end

El uso de else permite al programador el uso de un solo if en muchos casos


para ejecutar dos conjuntos de instrucciones. La forma del if-else-end es:

If condicin
Instrucciones 1
else
Instrucciones 2
end

Las instrucciones 1 se ejecutan si la condicin es cierta, y las instrucciones 2


si la condicin es falsa. Se ve que el if-else-end sustituye a dos if-end. A
continuacin se presenta un ejemplo de uso de if, else y end

% El programa pide la calificacin para indicar si aprob o reprob un curso


calif = input ('Dame la calificacin:\n');
if calif >= 10.5
fprintf ('Felicidades, ests aprobado')
else
fprintf ('Lo siento, ests reprobado')
end
Instruccin Elseif

Las sentencias if, al igual que las sentencias for, pueden ser
anidadas. Cuando se anidan varias sentencias if se utiliza la
sentencia elseif, cuya sintaxis general es la siguiente:

if condicin 1
instrucciones 1
elseif condicin 2
instrucciones 2
elseif condicin 3
instrucciones 3
.
elseif condicin n
instrucciones n
end
La sintaxis anidada anterior es equivalente a la sintaxis sin anidar siguiente:
if condicin1
instrucciones 1
else
if condicin2
instrucciones 2
else
if condicin3
instrucciones 3
end
end
end

Ejemplo de if, elseif y end

% El programa pide la calificacin para indicar si aprob o reprob un curso


calif = input ('Dame la calificacin:\n');
if calif >= 10.5
fprintf ('Felicidades, ests aprobado')
elseif calif < 10.5
fprintf ('Lo siento, ests reprobado')
end
Instrucciones Switch-Case

La instruccin switch-case se usa cuando queremos verificar si una expresin


es igual a algn valor determinado. No se puede usar para verificar una
condicin como a>5 o b3. Sin embargo, encuentra aplicaciones en muchas
situaciones donde se requiere ejecutar declaraciones distintas dependiendo
del valor de una expresin. La sintaxis es

switch expresin (escalar o cadena)


case valor 1
instruccin 1
case valor 2
instruccin 2
.
otherwise
instruccin (ejecuta si no cumple ningn caso)
end

A continuacin se presenta un ejemplo de una funcin que devuelve 1.0, 1 u


otro nmero segn sea la entrada:
Ejemplo: Uso de la instruccin switch-case

% El programa pide la calificacin para indicar si aprob o


reprob un curso
% en funcin de datos preestablecidos
calif = input ('Dame la calificacin:\n');
switch calif
case {11,12,13,14,15,16,17,18,19,20}
fprintf ('Felicidades, ests aprobado')
case {0,1,2,3,4,5,6,7,8,9,10}
fprintf ('Lo siento, ests reprobado')
otherwise
fprintf ('No fue suficiente, faltan datos')
end
Instrucciones Continue y Break

La instruccin continue pasa el control a la iteracin siguiente


en el bucle for o while en el cual aparece ignorando las
restantes instrucciones en el cuerpo de bucle. La instruccin
break finaliza la ejecucin de un bucle for o while en el cual
aparece continuando la ejecucin en la siguiente instruccin
fuera del bucle.

Instruccin Return

En ocasiones en que es necesario terminar la ejecucin del


programa, antes de finalizar, se usa la instruccin return. De
este modo, en el momento en que la funcin o programa
encuentra un return, interrumpir la ejecucin y regresar el
control al programa o funcin.
FUNCIONES

Las funciones especficos se definen mediante el comando


function. La sintaxis es la siguiente:

function parmetros de salida = nombre de la funcin(parmetros de entrada)

Ejemplo 1: Definimos la funcin fun1(x)= x3-2x+cosx, creando


el correspondiente archivo-M de nombre fun1.m:

function p = fun1(x)
p = x^3-2*x+cos(x);

El parmetro de salida es p; en nombre de la funcin fun1 y el


parmetro de entrada x. Ejecutando esta funcin, se obtiene:
>> fun1(2)
ans =
3.5839
Ejemplo 2: Funcin que calcula el factorial de n y crea el
archivo factorial.m

function x = factorial (n)


factorial = 1;
if n = = 0
factorial = 1;
else
for i = 1:n
factorial = factorial*i;
end
end
x = factorial

Al ejecutar esta funcin se obtiene:


>>factorial(5)
ans =
120
Ejemplo 3: La funcin factorial (n) se puede reescribir tambin
como una funcin recursiva:

% Funcin fact_rec.m
function x = fact_rec(n)
if n ~=1
x = n*fact_rec(n-1);
else
x = 1;
end

Al ejecutar esta funcin se obtiene:

>> fact_rec(5)
ans =
120
Ejemplo 4: La funcin factorial(n) ahora puede ser parte de otro programa o
puede ser usada repetitivamente sin necesidad de reescribir el cdigo cada
vez que la usemos.

% Archivo programa.m que calcula el factorial de n, verificando si este es


entero o negativo
n = input ('Dame un entero n\n');
error = 0;
if floor (n)~= n % verifica si es entero
error = 1; % n no es entero
end
if n<0 % verifica si n es negativo
error = 2; % n es negativo
end
if error ==1
fprintf ('El nmero que me diste no es entero\n')
elseif error ==2
fprintf ('El nmero que me diste es negativo\n')
elseif error ~=1&&error~=2
x = factorial (n);
fprintf ('El factorial de %g es %g.\n',n,x)
end
Al correr el programa para los valores de n: -6, 5 y 1.4, se
obtiene:

>> programa
Dame un entero n
-6
El nmero que me diste es negativo

>> programa
Dame un entero n
5
El factorial de 5 es 120.

>> programa
Dame un entero n
1.4
El nmero que me diste no es entero
Ejemplo 5: Solucin de una ecuacin de segundo grado: ax2 +
bx + c = 0; cuyas salidas son: x1 y x2:

function[x1,x2]=ecuacion2(a,b,c)
d=b^2-4*a*c;
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);

Al correr esta funcin obtenemos, para la ecuacin x2 + 2x + 3 =


0, resulta:

>> [x1,x2]=ecuacion2(1,2,3)
x1 =
-1.0000 + 1.4142i

x2 =
-1.0000 - 1.4142i
Ejemplo 6: Uso de una funcin para ver si un nmero es > 0 < 0:

% Programa principal2.m
x = input ('Dar valor de x: \n');
y = mayor_menor (x);
fprintf ('Termina la corrida. \n')

La funcin mayor_menor es:

% Funcin mayor_menor.m
function y = mayor_menor (x)
if x < 0
fprintf ('x es menor a 0 \n')
y = x;
return
else
fprintf ('x es mayor o igual a 0 \n')
end
y = x;
>> principal2
Dar valor de x:
15
x es mayor o igual a 0
Termina la corrida.

>> principal2
Dar valor de x:
0
x es mayor o igual a 0
Termina la corrida.

>> principal2
Dar valor de x:
-10
x es menor a 0
Termina la corrida.
Variables de funciones

Las variables del programa principal y de una funcin son


independientes aunque tengan el mismo nombre. En
general pueden tener distintos valores, a menos de que
sean declaradas como argumentos de la funcin.

Ejemplo 1: Verificar cmo se pasan las variables entre


subrutinas. Las funciones no tienen declaradas todas las
variables como argumentos de entrada o salida.

Para ello se crean los archivos: primero de la funcin


prueba.m y del programa principal.m

En la siguiente transparencia se presentan los respectivos


archivos:
% Funcin prueba.m para ver variables
function y = prueba(x)
fprintf ('Entrando a la funcin prueba \n')
a = 10;
b = 20;
c = 30;
y = 5;
fprintf ('Estoy dentro de la funcin prueba \n')
fprintf ('Las variables de la funcin prueba son: \n a=%g \n b=%g \n c=%g
\n',a,b,c)
fprintf ('Saliendo de la funcin prueba \n')

% Programa principal.m invoca la funcin prueba con las mismas variables


a = 50;
b = 60;
c = 70;
fprintf ('Las variables del programa principal son: \n a=%g \n b=%g \n c=%g
\n',a,b,c)
y = prueba (1);
fprintf ('Estoy de regreso en el programa principal \n');
fprintf ('Las variables del programa principal son: \n a=%g \n b=%g \n c=%g
\n',a,b,c)
Al correr el programa principal vemos que los valores de a, b y c
declarados antes de la funcin prueba no se pasan a la funcin y al
regresar al programa principal, tampoco se pasan de la funcin al
programa principal ya que no se declararon.

>> principal
Las variables del programa principal son:
a = 50
b = 60
c = 70
Entrando a la funcin prueba
Estoy dentro de la funcin prueba
Las variables de la funcin prueba son:
a = 10
b = 20
c = 30
Saliendo de la funcin prueba
Estoy de regreso en el programa principal
Las variables del programa principal son:
a = 50
b = 60
c = 70
Ejemplo 2: Paso de variables de un programa principal a una
funcin

Para pasar valores del programa principal a una funcin,


consideremos la siguiente funcin:

%Funcin prueba1
function y = prueba1(a,b,c)
a = a*2;
b = b*3;
c = c*4;
y = 5;
fprintf ('Estoy dentro de la funcin prueba2 \n')
fprintf ('Las variables de la funcin prueba2 son: \n a=%g \n
b=%g \n c=%g \n',a,b,c)
fprintf ('Saliendo de la funcin prueba2 \n')
Ahora usamos esta funcin dentro del siguiente programa
principal1:

%Archivo principal1
a = 50;
b = 60;
c = 70;
fprintf('Las variables antes de la funcin prueba2:\n a=%g\n
b=%g \n c=%g\n', a, b, c)
p = prueba1(a,b,c);
fprintf('De regreso al programa principal \n');
fprintf('Las variables del programa principal son: \n a=%g \n
b=%g \n c=%g \n', a, b, c)

Al correr el programa obtenemos lo siguiente:


>> principal1
Las variables antes de la funcin prueba1 son:
a = 50
b = 60
c = 70
Estoy dentro de la funcin prueba1
Las variables de la funcin prueba1 son:
a = 100
b = 180
c = 280
Saliendo de la funcin prueba1
De regreso al programa principal1
Las variables del programa principal1 son:
a = 50
b = 60
c = 70

Notamos que los valores de a = 50, b = 60 y c = 70 se pasan a la funcin,


ah se modifican. Al regresar al programa se mantienen en los valores
originales. Esto quiere decir que podemos pasar valores de variables de
un programa principal a una funcin, pero no a la inversa.
MANEJO DE ARCHIVOS

Los archivos de datos pueden ser creados por MATLAB o por algn otro
programa, permitiendo intercambiar datos entre estos programas. Por
ejemplo, se pueden crear datos con Excel y luego usados por MATLAB para
realizar clculos y graficarlos y viceversa. Una ventaja de usar archivos con
los datos de entrada/salida es que pueden ser almacenados y usados
nuevamente.

Abrir y cerrar archivos

MATLAB abre un archivo con el comando fopen cuya sintaxis es:


fid = fopen (nombre del archivo, licencias)

Despus de terminar de usar los datos de un archivo, este debe cerrarse con
el comando fclose que tiene la sintaxis:

status = fclose(fid)
Donde fid es un identificador (handle) del archivo que se acaba de abrir o
cerrar.
Cuando se abre un archivo este identificador empieza con el valor 3 ya que
los identificadores de -1 a 2 tienen un significado especfico para MATLAB.
Cuando se cierra el archivo la variable status nos da otro identificador para
saber si el archivo se cerr correctamente; un status = 0 indica que se cerr
correctamente y un status -1 indica que no se pudo cerrar el archivo.

Cdigos de licencias para abrir archivos


Licencia Accin
r Abre el archivo existente para leer
r + Abre el archivo existente para leer y escribir
w Abre el archivo existente o crea uno nuevo para escribir
w + Abre el archivo existente o crea uno nuevo para leer y escribir
a Abre el archivo para escribir, aadiendo los nuevos datos al final
a + Abre el archivo para leer y escribir.

Identificadores para archivos


Identificador fid Significado
-1 Error al abrir un archivo no existente
0 Entrada estndar, teclado abierto para escribir (r)
1 Salida estndar, ventana de comandos abierta para aadir
2 datos Error estndar; abierto para aadir datos al final
Escritura de informacin en un archivo

La forma ms simple de escribir en un archivo es usando la instruccin fprintf

>>fprintf('Escribe esto que va a la pantalla')

Para escribir a un archivo se requiere crear y luego abrirlos; por ejemplo:

>>fid1 = fopen('archivo1.txt', 'w');


>>fid2 = fopen('archivo2.txt', 'w);

Escribimos a un archivo indicando su identificador; del modo siguiente:

>>fprintf (fid1, 'aqu escribimos a archivo1.txt \n');


>>fprintf (fid2, 'aqu escribimos a archivo2.txt \n');

Para ver lo escrito en el bloc de notas, primero cerramos los archivos con:

>>fclose(3);fclose(4);

Ahora los podemos abrir con el bloc de notas y observar el contenido


INTERCAMBIO DE DATOS ENTRE MATLAB Y EXCEL

Dado que tanto MATLAB como EXCEL pueden leer y escribir datos en
archivos, es posible que los datos de un archivo creado por MATLAB puedan
ser ledos por EXCEL y viceversa. Para ello MATLAB puede crear archivos
de datos separados por comas (separadores o delimitadores) para que
EXCEL pueda leerlos. Al ejecutar, EXCEL abre el archivo y lee los datos
reconociendo que estos datos no fueron creados por Excel y que estn
delimitados por separadores.

Para que Excel pueda leer, datos generados por MATLAB, seleccionamos
Delimited y presionamos Next y en la ventana de dilogo especificamos la
coma como delimitador (el delimitador por omisin es el Tab). Antes de
presionar el botn de siguiente seleccionamos todos los datos, presionamos
finalizar y Excel importa los datos para procesarlos como Excel.

Para leer con MATLAB datos creados en EXCEL, el formato csv permite el
intercambio de datos entre distintos programas. Excel permite crear archivos
con esta extensin que, por lo tanto, pueden ser ledos por MATLAB,
usando: csvread ('archivo.csv')

También podría gustarte