Sunteți pe pagina 1din 11

ScriptsyFunciones

Matlab nos permite guardar cdigo en archivos para poder hacer


programas grandes de manera ordenada y organizada. De esta manera
podemos escribir codigos grandespara probarlosy no tenerquereescribir
todosnuestroscomandosparaprobarlosdenuevo.

Podemos crear un nuevo archivo dando click en el cono de Nuevo enla


parte superior de la pantalla (con un +) y dando click en Nuevo Script.
TambinconelatajoCtrl+N

Dentro del archivo podemos escribir todoslos comandos quenecesitemos


usarparanuestrocmputo.Parapoderejecutarlos,debemosdeguardarel
archivo. Esto se hace en la pestaa de Editor de la parte superior de
Matlab. Se da click en Guardar y se elige un nombre para elarchivoy la
ubicacindondevaaestarguardadoelarchivo.

ParallevaracaboloscomandosescritosenunarchivolasesindeMatlab
debede estarubicada en lamismacarpetaenlaqueestnuestroarchivo.
Prestemos atencin al rea del lado izquierdo de la pantalla que tiene
como nombre Directorio Actual. En esta se muestra el contenido de la
carpetadondeseencuentralasesindematlab.

Para cambiarla damos click en el cono de la carpeta semiabierta conla


flecha para abajo (Buscar por carpeta). En la ventana que se abre,
navegamos hacia la carpeta en donde guardamos el archivo .m que
creamosy damos clickenaceptar.Nuestroarchivodebedeaparecerenel
readeCarpetaActual.

Ya que estamos ubicados en la carpeta correcta, podemos escribir el


nombre de nuestro archivo en la lnea de comandos. Se ejecutarn todos
loscomandosdelarchivoenelordenenelqueaparecen.

Muchas veces podemos escribir muchos comandos en un archivo y crear
un programa muy grande. La mayora de las vecescuando hacemoseso,
el cdigo se vuelve confuso y difcil de leer. Para ayudarnos a entenderlo
al regresar a trabajar o que otra persona que lo lea lo entienda, le
aadimos comentarios. Matlab no toma en cuenta los comentarios al
ejecutarelcdigodentrodetuarchivo.

Se acostumbra que los comentarios expliquen qu hacen las lneas de


cdigo que los suceden, justificando las decisiones que se tomaron al
escribirelcdigo.

Para agregar un comentario a tu cdigo, escribe una lnea que empiece


con elsmbolo %.Todo loque escribas en esa lneaser uncomentarioy
Matlabloignoraralejecutarelcdigo.

EntradaySalidaBsica(BasicI/O)

Cuando ejecutamos cdigodentrode unarchivo,esteseejecutacompleto
automticamente. Lo nico que podemos saber de lo quhizo esel valor
que tienen las variables al final de la ejecucin de ese cdigo. Muchas
veces esto no es suficiente, ms que nada cuando el cdigo no est
calculando lo que nosotros deseamos calcular y tenemos que corregir
errores dentro de ste (debuggear). Lo que hacemos en estos casos es
usar funciones para que se impriman en la terminal cadenas de texto o
valores de funciones que describa lo queesthaciendoelcdigomientras
lohace.Aspodemosvisualizarconclaridaddndeestelproblema.

Ya hemos visto una manera de imprimir resultados de comandos en la


lnea de comandos. Cada vez que se realiza un comando sin escribir al
final, se imprime el resultadodeesecomandoantecedidodelavariableen
donde seguardese resultado(si no asignamos nosotrosuna variable se
guardaenans).

Sin embargo muchas veces esta manera de imprimir valores es muy


imprctica y desordenada. Msquenadacuandoestamosoperandosobre
matrices muy muy grandes. En estos casos usamos las funciones de
Matlab para imprimir en pantalla solo los valores que nosotros queramos
ver,enelformatoquenosotrosqueramos.

La primera de estas funciones es disp . Esta funcin recibe como


parmetro una cadena de texto y simplemente la imprime en pantalla.
Tambin podemos ingresarel nombrede una variablee imprimir el valor
de esa variable sin imprimir su nombre. En el caso de ingresar un valor
numrico, un vector o una matriz, matlab crear una cadena que describa
esevalorylaimprimirenlalneadecomandos.eg:

X=6.8
Y=4.2
Z=[37215]
disp(LavariableXcontiene)
disp(X)
disp(LavariableYcontiene:)
disp(Y)
disp(strcat(ElvectorZcontiene,num2str(Z)))

En este ejemplo mand a llamarvariasvecesadisp.dispimprimeunsalto


de lnea al final del parmetro. Eso significaquela siguiente vez que algo
se imprima en la lnea de comandos (por ejemplo la siguiente vez que
llamemosadisp),seimprimirenelrenglnsiguiente.

Tambinenlaltimalneaconcatenvariascadenasyvariablesdentrodel
parmetro de disp. Para concatenar una variable numrica, vectorial o
matricial a una cadena, hay que convertirla en una cadena primero. Esto
se hace con la funcin
num2str . Tambin existe la funcin mat2str para
convertirespecficamentevectoresomatricesenunformatodistinto.

Otra funcin para imprimir en pantalla es


fprintf.
Esta funcin es un poco
ms complicada de usar de disp, pero es un poco ms verstil.
Analizmoslaconunejemplo:

X=4.6
Y=5
S=ejemplodecadena
fprintf(ElvalordeXes:%f.ElvalordeYes%d.ElvalordeSes%s\n,X,Y,S)

El primer parmetro que recibe fprintf se llama cadena de formato . En


esta le especficas qu es lo quequieres imprimir y cmo acomodarlo.En
cada lugar donde quieras imprimir el valor deunavariabledebesincluirun
caracter de conversin. Esto es un signo de % seguido de un caracter
que depende dequtipode variable esla que vasaimprimir.fesparaun
flotante, d es para un entero. s es para una cadena. Hay muchos ms
caracteresdeconversinhayquerevisarlosconhelpfprintf.

Despus de la cadena de formato hay que agregar como parmetro las


variablesque van envezdeloscaracteresdeconversinenelordenenel
que aparecen enla cadena de formato.EnelejemploXirdondeest%f,
Yirdondeest%dySirdondeest%s

Otro elemento importante son los caracteres especiales. En el ejemplo


utilic\n. Este es un saltode lnea. fprintfno hace unsaltodelneaalfinal
comodisp. Para quehaga saltos delnea debesdeincluirlosenlacadena
de formato. Hay muchos ms caracteres especiales, habr que revisarlos
enladocumentacin

fprintfyvectores

fprintf maneja de manera especial a los vectores. Por ejemplo si usamos


estalnea:

>>U=[17158]
>>V=[61825]
>>fprintf('valordeV=%d.ValordeU=%d\n',V,U)
valordeV=6.ValordeU=1
valordeV=8.ValordeU=2
valordeV=5.ValordeU=1
valordeV=7.ValordeU=1
valordeV=5.ValordeU=8
>>

fprintfrecorre losvaloresde V y Uy para cada unodelosvaloresimprime


la cadena de formato con los valores en vez de los caracteres de
conversin correspondientes. Tambin funciona con matrices
recorrindolasporcolumnas

M=[372851]
fprintf('valorenmatriz=%d',M)
valor en matriz = 3valor en matriz = 8valor en matriz = 7valor en matriz = 5valor en
matriz=2valorenmatriz=1>>

Input

Las funciones que hemos visto sonpara mostrarvaloresguardadosenlas


variables en la pantalla para que nosotros, usuarios de matlab, podamos
verlas. Sin embargo, qu tal si queremos ir ingresando valores en las
variables mientras el programa se est ejecutando? Podemos hacer esto
conlafuncininput.

La funcin input va a pausar la ejecucin delprogramay vaaesperarque


ingresemos un valor con el teclado y pulsemos enter. Despus de hacer
eso,inputguardaresevalordondeloasignemosyseguirlaejecucin



El parmetro que recibe input es el mensaje que muestra en la lnea de
comandos antes de esperar que el usuarioingrese el valor. Este mensaje
no tiene saltode lnea ni espacioal final.input interpretar loqueescribas
comoun valor enmatlab,entonces se pueden ingresar nmeros,cadenas
entrecomillassimplesonombresdeotrasvariablesyadeclaradas.

Tambin puedes usar input(ingrese un valor: ,s). Esto provocar que


todo lo que escriba elusuario sea interpretado como cadena, aunquesea
unnmero.

Funciones

Muchas veces cuando escribimos cdigo pasa que hay que calcular la
misma operacin o realizar el mismo procedimiento muchas veces, solo
con diferentes valores. Por ejemplo calcular una determinante de una
matrizosuinversa.

Matlab nos ofrece funcionespararealizarestastareas.Unafuncinesuna


serie de comandos que calculan cierta operacin sobre un parmetro que
recibenantesdeejecutarse.

Matlab cuenta conmuchsimasfuncionesprefabricadasparaquenosotros


las usemos. Pero en muchos problemas necesitamos repetir muchas
veces un clculo muy especfico para nuestro problema. Por lo tanto
debemoscrearnuestraspropiasfunciones.

Una funcin slola podemos redactar dentro de unarchivo .m.Lasintaxis


paracrearfuncioneseslasiguiente:

functionnombre()
%comandosqueseejecutarncuandoseactivelafuncin
end

La funcin debe de tener el mismo nombre que el archivo en donde la


escribamos. Esto es para que la podamos llamar desde la lnea de
comandosescribiendosunombreseguidodedosparntesis,egfuncion().

Eso no signifique que no podamos declarar varias funciones en un solo


archivo.Porejemplosienunarchivollamadofunciones.mdeclaramos:

functionfunciones()
funcion1()
funcion2()
end

functionfuncion1()
x=5
end

functionfuncion2()
y=9
end

Al escribir en la lnea de comandos funciones() se ejecutar la funcin
funcionesdelarchivo.Estafuncinejecutaasuvezlafuncion1yfuncion2.
Lanicafuncinquedebellamarseigualqueelarchivoeslaprimera.

Parametros

La funcin cmo la escribimos no recibe parmetros. Lo que significaque


solo ejecuta el mismo cdigo en su cuerpo produciendo el mismo
resultado. Los parmetros le aaden variables con valores externos a la
funcinparaqueestalosmanipuleyproduzcaresultadosapartirdeellos.

Para crear una funcin que reciba parmetros, escribimos nombres de


variables dentro de los parntesis. Cada variable est separada por una
coma:

functionejemplo(param1,param2,param3)
%Elcuerpodelafuncinutilizalosparmetros
%comosifueranvariables
ans=param1+param2param3
end

De esta manera podemos ejecutar la funcin con los parametros con los
valores que queramos usar para el clculo. En este caso se llama a la
funcin desde la lnea de comandos de la siguiente manera:
ejemplo(4,7,1). Tambin pueden irvariables existentes enlasesindentro
delosparmetros.egejemplo(4,X,2)

Funcionesconresultado

Las funciones que hemos hecho hasta ahora solo procesan parmetrosy
realizan comandos.Losresultados delosclculosrealizadosdentrodelas
funciones los hemos podido ver reflejados en los valores de las variables
quesedeclaranosemodificandentrodelcuerpodelafuncin.

Hay una manerams estandarizada y ordenada de obtener los resultados
que una funcin calcule: haciendo que la funcin regrese un resultado.
Ya hemos visto funciones que regresan resultados, como las
trigonomtricas. Estas funciones reciben un parmetro (el ngulo) y
devuelven el valor de la funcin trigonomtrica evaluada en ese ngulo.
Como ya hemos visto, ese valor lo podemos guardar en una variable que
nosotrosdeclaremos o,sinolaasignamos,seguardaautomticamenteen
ans.egX=sen(pi/2)

Para crear una funcin que regrese un resultado debemos escribir lo


siguiente:

functionres=ejemploConResultado(param1,param2)
param1=param1*2
res=param1+param2
end

res= despus de la palabra function indica que la funcin regresar lo


que est en la variable res cuando se acabe de ejecutar el cuerpo de la
funcin. Estavariable sepuedellamar como uno desee. Se debe teneren
cuenta que la variable debe de ser declarada dentro del cuerpo de la
funcin,sinoMatlabmarcarunerroralmomentodeejecutarlafuncin.

Dentro de la lnea de comandos podemos ejecutar nuestra funcin


(siempre y cuando se llame de lamismamanera que el archivo.m donde
est escrita) de la misma manera que llamamos las dems funciones:
resultado = ejemploConResultado(2,6). Si no asignamos el resultado de
una funcin que devuelve resultado a una variable, se sobrescribir la
variableansconelresultadodelafuncin.

Funcionesquedevuelvenvariosresultados.Struct

Las funciones anteriores slo devuelven una variablecomoresultado:slo


un nmero, un vector, una matriz o una cadena. Sin embargo, algunas
veces requerimos que las funciones hagan mucho procesamiento y que
calculen muchos tipos de variables y queremos recuperar todas esas
variablescuandolafuncinacabedeejecutarse.Loqueusamosesuntipo
devariablellamadostruct

Un struct nos permite agrupar varias variables en una sola. Escomo una
caja de variables que podemos pensar en ella como otra variable. Las
variables dentro del struct son independientes y podemos usarlas y
asignarlas por separado. De igual manera podemos tratar al struct como
una sola variable y asignarla como parmetro en una funcin o como
resultadodeunafuncin.

Paradeclararunstructseusalasiguientesintaxis:

nombre_del_struct=struct(nombre_var_1,valor_1,nombre_var_2,valor_2,...)

Ejemploconcreto

estructura1=struct(var1,2,var2,8.4,var3,HolaQueHace,var4,[4173.5])

Este comando crea un struct con cuatro variables dentro: un entero, un


flotante, una cadena y un vector. En un struct podemos agrupar tantas
variablescomoqueramosyllamarlasvariablescomoqueramos.

Para obtener una variable dentro de un struct para usarla dentro de un


comando usamoslasiguientesintaxis:estructura1.var1.Estonosdevuelve
la variable llamada var1 dentro de estructura1. Tambin as podemos
actualizar el valor dela variable dentro de laestructura:estructura1.var1=
8

Si queremos agregar una variable a una estructura ya declarada, solo


usamos la siguientesintaxis:estructura1.varNueva=[3570].Estoagrega
la estructura1 una variable llamada varNueva que contiene una matriz de
2x2.

Adicionalmente podemos eliminar variables dentro de una estructura ya


declarada. Esto se hacea partir deunafuncinincluidaenMatlabllamada
rmfield. rmfield recibe como parmetros la estructura de lacual queremos
eliminar una variable (tambin llamada campo) y el nombre de la variable
quequeremoseliminar.eg:rmfield(estructura1,varNueva).

Hay que tener en cuenta que rmfield NO modifica la estructura que le


pasamos como parmetro,si no que crea otra estructura nueva con todas
las variablesdelaestructuraenelprimerparmetroexceptolavariabledel
segundo parmetro. rmfield regresa esta estructura como resultado, as
que siqueremosquenuestra estructura anteriorsesobreescribadebemos
deescribir:estructura1=rmfield(estructura1,varNueva).

Para concluir veamos un ejemplo de funcin que regresa una estructura


comorespuesta:

functionres=funcionConEstructura(param1,param2,param3)
res=struct(var1,param1+4,var2,param2*8,var3,param3+param3)
end

Esta funcin va a calcular unos valores usando los parmetros, agrupar
esos valores en una estructura y regresarla. Entonces al momento de
ejecutarlafuncinyusarsuresultadodebemosdeusaralgocomoesto:

resultadoMultiple=funcionConEstructura(5,7,hola)
resultadoMultiple.var1+2
sin(resultadoMultiple.var2)

S-ar putea să vă placă și