Você está na página 1de 19

12/03/2013

Se ver a continuacin una forma sencilla de leer variables desde teclado


y escribir mensajes en la pantalla del PC. Ms adelante se considerarn
otros modos ms generales y complejos de hacerlo.

Funcin input

La funcin input permite imprimir un mensaje en la lnea de comandos


de MATLAB y recuperar como valor de retorno un valor numrico o el
resultado de una expresin tecleada por el usuario.
Despus de imprimir el mensaje, el programa espera que el usuario
teclee el valor numrico o la expresin. Cualquier expresin vlida de
MATLAB es aceptada por este comando. El usuario puede teclear
simplemente un vector o una matriz. En cualquier caso, la expresin
introducida es evaluada con los valores actuales de las variables de
MATLAB y el resultado se devuelve como valor de retorno. Vase un
ejemplo de uso de esta funcin:

1
12/03/2013

n = input('Teclee el nmero de ecuaciones')

Otra posible forma de esta funcin es la


siguiente (obsrvese el parmetro s):

nombre = input('Cmo te llamas?','s')

En este caso el texto tecleado como respuesta se


lee y se devuelve sin evaluar, con lo que se
almacena en la cadena nombre. As pues, en este
caso, si se teclea una frmula, se almacena como
texto sin evaluarse.

Funcin disp

La funcin 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: las
cadenas de caracteres son un caso particular de vectores.
Considrense los siguientes ejemplos de cmo se utiliza:

disp('El programa ha terminado')


A=rand(4,4)
disp(A)

Ejectense las sentencias anteriores en MATLAB y obsrvese la


diferencia entre las dos formas de imprimir la matriz A.

2
12/03/2013

Los ficheros ejecutables son ficheros de texto que incluyen una


serie de comandos Matlab.
Si una tarea Matlab la vamos a ejecutar muchas veces, es buena
idea escribir un fichero con estos comandos para poder
ejecutarlos tantas veces como queramos.

La edicin del fichero ejecutable la realizamos con un editor


cualquiera.
Si nos resulta ms cmodo, podemos utilizar el editor que
incorpora MATLAB y al que invocaremos desde la lnea de
comandos como:

>>edit

Los ficheros ejecutables de MATLAB (llamados ficheros M) deben


tener como extensin .m.

En el ejemplo que damos a continuacin, crearemos


un programa que calcula el factorial de 6:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Este es un programa no muy util,
%que calcula el factorial de 6
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n=6;
fac=1;
for i=2:n
fac=fac*i;
end
Fac

3
12/03/2013

Si guardamos esto en el fichero fac.m en el directorio de trabajo


(o cualquier otro incluido en el path) y tecleamos el comando
fac, obtenemos :

>> fac
fac =
720

Otra forma:

factorial(6)
ans =
720

Para poder calcular el factorial para distintos nmeros


deberemos crea una subrutina o funcin MATLAB.

MATLAB posee un lenguaje de programacin que


(como cualquier otro lenguaje) dispone de
sentencias para realizar bifurcaciones y bucles.
Las bifurcaciones permiten realizar una u otra
operacin segn se cumpla o no una
determinada condicin. La Figura siguiente
muestra tres posibles formas de bifurcacin.

4
12/03/2013

Los bucles permiten repetir las mismas o anlogas operaciones sobre datos distintos.
Mientras que en C/C++/Java el "cuerpo" de estas sentencias se determinaba mediante llaves
{...}, en MATLAB se utiliza la palabra end con anloga finalidad. Existen tambin algunas otras
diferencias de sintaxis.
La Figura muestra dos posibles formas de bucle, con el control situado al principio o al
final del mismo. Si el control est situado al comienzo del bucle es posible que las
sentencias no se ejecuten ninguna vez, por no haberse cumplido la condicin cuando se
llega al bucle. Sin embargo, si la condicin est al final del bucle las sentencias se
ejecutarn por lo menos una vez, aunque la condicin no se cumpla. Muchos lenguajes de
programacin disponen de bucles con control al principio ( for y while en C/C++/Java) y al
final (do while en C/C++/Java). En MATLAB no hay bucles con control al final del
bucle, es decir, no existe la construccin anloga a do ... while.

Las bifurcaciones y bucles no slo son tiles en la preparacin de programas o de archivos


*.m. Tambin se aplican con frecuencia en el uso interactivo de MATLAB, como se ver
ms adelante en algunos ejemplos.

En su forma ms simple, la sentencia if se escribe en la forma siguiente (obsrvese que a diferencia de


C/C++/Java la condicin no va entre parntesis, aunque se pueden poner si se desea):
if condicion
sentencias
end

Existe tambin la bifurcacin mltiple, en la que pueden concatenarse tantas condiciones como se desee, y que
tiene la forma:

if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else %opcin por defecto, cuando no se cumplan las condiciones 1,2,3
bloque4
end

Donde la opcin por defecto else puede ser omitida: si no est presente no se hace nada en caso de que no se
cumpla ninguna de las condiciones que se han revisado.

5
12/03/2013

Operadores Lgicos:

Para crear condiciones debemos conocer


tanto los operadores relacionales como los
operadores lgicos.

Ejemplo de uso de if:

nro = input('Ingrese un nmero positivo: ');


if mod(nro,2)==0
disp('es par');
else
disp('es impar');
end

Ejemplo de uso de if/elseif:

nro = input('Ingrese un nmero positivo: ');


if nro==1
disp('Ud. ingreso 1');
elseif nro==2
disp('Ud. ingreso 2');
elseif nro==3
disp('Ud. ingreso 3');
else
disp('El nmero es mayor que 3');
end

6
12/03/2013

Programa donde ingresan 4 notas por teclado, se elimina la menor y saca el


promedio

n1 = input('ingrese la primera nota = ')


n2 = input('ingrese la segunda nota = ')
n3 = input('ingrese la tercera nota = ')
n4 = input('ingrese la cuarta nota = ')

if (n1<n2 & n1<n3 & n1<n4 )


fprintf('la nota eliminada es: %1.2f\n',n1);
promedio = (n2+n3+n4)/3;
%fprintf('la nota promedio es: %1.2f\n',promedio);
elseif (n2<n1 & n2<n3 & n2<n4 )
fprintf('la nota eliminada es: %1.2f\n',n2);
promedio = (n1+n3+n4)/3;
%fprintf('la nota promedio es: %1.2f\n',promedio);
elseif (n3<n1 & n3<n2 & n3<n4 )
fprintf('la nota eliminada es: %1.2f\n',n3);
promedio = (n1+n2+n4)/3;
%fprintf('la nota promedio es: %1.2f\n',promedio);
elseif (n4<n1 & n4<n2 & n4<n2 )
fprintf('la nota eliminada es: %1.2f\n',n4);
promedio = (n1+n2+n3)/3;
%fprintf('la nota promedio es: %1.2f\n',promedio);
end
fprintf('la nota promedio es: %1.2f\n',promedio);

La sentencia for repite un conjunto de sentencias un nmero predeterminado de


veces.

La siguiente construccin ejecuta sentencias con valores de i de 1 a n, variando de


uno en uno.

for i=1:n
sentencias
end

For anidados:

for i=1:n
for j=1:m
sentencias
end
end

7
12/03/2013

En el siguiente ejemplo se presenta el caso


ms general para la variable del bucle
(valor_inicial: incremento: valor_final);

for i=n:-0.2:1
sentencias
end

Ejemplo A=zeros(10);
for i=1:10
x=0; for j=1:10
for i=1:4
for j=1:4 A(i,j)=rem( i+j, 10);
x=x+1; end;
A(i,j)= x; end
end
end
>> A

>A A=

2 3 4 5 6 7 8 9 0 1
A= 3 4 5 6 7 8 9 0 1 2
4 5 6 7 8 9 0 1 2 3
5 6 7 8 9 0 1 2 3 4
1 2 3 4 6 7 8 9 0 1 2 3 4 5
5 6 7 8 7 8 9 0 1 2 3 4 5 6
8 9 0 1 2 3 4 5 6 7
9 10 11 12 9 0 1 2 3 4 5 6 7 8
13 14 15 16 0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 0

8
12/03/2013

En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados.

La variable j es la que vara ms rpidamente (por cada valor de i, j toma todos sus posibles
valores):

for i=1:m
for j=1:n
sentencias
end
end

Una ltima forma de inters del bucle for es la siguiente (A es una matriz):

for r=A
sentencias
end

En la que la variable r es un vector que va tomando en cada iteracin el valor de una de las
columnas de A.

La sintaxis de la estructura while es la siguiente.

while condicion
sentencias
end

Donde condicion puede ser una expresin vectorial o matricial.


Las sentencias se siguen ejecutando mientras haya elementos distintos de cero
en condicion, es decir, mientras haya algn o algunos elementos true.
El bucle termina cuando todos los elementos de condicion son false (es decir,
cero).

Ejemplo de uso de while:


nro = input('Ingrese un nmero positivo: ');
i=0;
while i<=nro
disp(i);
i=i+1;
end;

9
12/03/2013

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

nro = input('Ingrese un nmero positivo: ');


i=0;
while i<=nro
disp(i);
i=i+1;
if i==4
break;
end;
end;

A lo mejor queremos controlar en un


condicional que si se da una ocasin muy
excepcional, como algn posible error que
tengamos previsto, el programa no continue
en el condicional, sino que queremos que
salga fuera y se muestre por pantalla algn
mensaje informando del error.

10
12/03/2013

La sentencia switch realiza una funcin anloga a un conjunto de


if...elseif concatenados. Su forma general es la siguiente:

switch expresion
case case_expr1
comandos
case case_expr2
comandos
...
otherwise % opcin por defecto
comandos
end

Por ejemplo si queremos realizar acciones distintas


en funcin del valor de una variable entera podemos
escribir:

A = 1; B = 2;
switch A + B
case 3
disp('el resultado es 3')
case 5
disp('el resultado es 5 ')
otherwise
disp('el resultado ni es tres ni cinco')
end

11
12/03/2013

Grafica vectores

plot(X,Y)
plot(X)
plot(X, Y, simbolo)

b blue . point - solid


g green o circle : dotted
r red x x-mark -. dashdot
c cyan + plus -- dashed
m magenta * star (none) no line
y yellow s square
k black d diamond
w white v triangle (down)
^ triangle (up)
< triangle (left)
> triangle (right)
p pentagram
h hexagram

12
12/03/2013

x=[1:0.1:10];y=sin(x);plot(x,y);

xlabel(eje x); xlabel(eje y);title(funcin


seno); legend(sen x) ;

13
12/03/2013

hold on; hold off;

Permite hacer varios grficos en una sola


pantalla.

Sintaxis:
subplot(abc)
a es filas, b columnas, numero de figura.

14
12/03/2013

Ejemplo:

subplot(221)
x=[0:0.1:10];y=sin(x);
plot(x,y);grid on;xlabel('eje x'); ylabel('eje y');
title('fig 1'); legend('sen x');

subplot(222)
x=[0:0.1:10];y=cos(x);
plot(x,y);grid on;xlabel('eje x'); ylabel('eje y');
title('fig 2'); legend('cos x');

subplot(223)
x=[0:0.1:10];y=10*sin(x);
plot(x,y);grid on;xlabel('eje x'); ylabel('eje y');
title('fig 3'); legend('10sen x');

subplot(224)
x=[0:0.1:10];y=10*cos(x);
plot(x,y);grid on;xlabel('eje x'); ylabel('eje y');
title('fig 4'); legend('10*cos x');

15
12/03/2013

Resuelve simblicamente ecuaciones


algebraicas.

Sintaxis:

[x, y ,z]=solve(eq1',eq2',, var1,var2,)


[x, y ,z]=solve(eq1',eq2',)

16
12/03/2013

Ejemplo:
Resolver el sistema de ecuaciones:

3*x+2*y-z=10
-x+3*y+2*z=5
x-y-z=-1

[x, y ,z]=solve('3*x+2*y-z=10','-
x+3*y+2*z=5','x-y-z=-1')

Un conjunto de lneas de cdigo que cumple


con una tarea determinada: sum, root, pole,
sqrt, ect.

Pueden tener o no entradas y salidas en


general las tienen.

Tienen un sintaxis en cada cdigo.

17
12/03/2013

En MATLAB tienen las sintaxis:

[out1 out2 ]= nombre(in1 in2);

Orden y no perder lo que el cdigo hace.

Ejemplo 1:
function [a b c]=funcion1(X, Y, Z)
a= X +Y + Z;
b= X*Y*Z;
c= [a b X Y Z];

Se llama de la funcin principal o de commad


window.

18
12/03/2013

Ejemplo 2:

function [] funcion2()
D=1;
pause(1);
Diplay(estas en la funcin funcion2);

No hay salidas ni entradas

19

Você também pode gostar