Práctica 0
Práctica 0
Práctica 0
El objetivo de esta práctica es doble. Por una parte se tratará de asentar los conocimientos básicos
de Matlab concernientes al manejo de los diferentes tipos de ficheros, y por otra, analizar los
errores más comunes que se cometen a la hora de programar con dicho software.
donde cada yi es una salida y cada xj es una entrada. Es recomendable incluir la lı́nea end
al terminar la función.
El número de entradas y salidas puede variar en función de las necesidades, pudiendo llegar a
no tener ninguna de ellas dejándose en ese caso los paréntesis/corchetes vacı́os. Al diferencia
del caso anterior, únicamente quedan guardadas en Workspace aquellas variables que hayan
sido llamadas a la hora de ejecutar la función (ver más adelante).
1
SESIÓN 1. NOCIONES BÁSICAS 2
Existe un tipo especial de fichero cuya extensión es “.p”. Este tipo de ficheros habitualmente son o
bien un script o bien una función, pero están precompilados de tal forma que aunquen no podemos
abrirlo y ver el código que hay en el interior, podemos utilizarlos.
Script
Como ya se ha comentado anteriormente en un script se almacenan órdenes que serán ejecutadas.
Un ejemplo de este tipo de archivos es el mostrado en la figura siguiente:
En este ejemplo se definen dos variables a y b en las dos primeras lı́neas y se calcula una nueva
variable c como la suma de las dos anteriores.
Existen dos formas de ejecutar este tipo de ficheros, la primera es presionando el botón Run y la
segunda es escribiendo el nombre del script en la Command Window. Una vez ejecutado, las tres
variables serán guardadas en Workspace y podrán ser usadas más adelante.
Función
Para este caso hemos creado una función como la que aparece en la siguiente figura:
dicha función tiene dos entradas x1 y x2 y dos salidas y1 e y2. Como podemos observar, al ser x1 y
x2 entradas de la función, ninguna de estas dos variables debe ser declarada dentro de la función
(al contrario que ocurrı́a en el script. En este caso no podemos ejecutar el fichero a través del botón
Run, ya que hay variables que están sin declarar y no pueden ser usadas.
Para este primer ejemplo hacemos una llamada a la función, y damos valores x1 = 1 y x2 = 2 a las
variables de entrada. La forma de llamar a la función desde la Command Window es la siguiente:
>> [y1,y2] = func_mat(1,2);
Otra opción es definir previamente las variables y luego hacer la llamada a la función:
>> x1 = 1;
>> x2 = 2;
>> [y1,y2] = func_mat(x1,x2);
Fichero precompilado
Los ficheros precompilados (aquellos con extensión .p) son ejecutados exactamente igual que si
tuviéramos el fichero original, con la única diferencia que no podemos abrirlos para ver el código.
La forma más sencilla de cargar estos ficheros es hacer doble click sobre ellos en Current folder,
sin embargo, esta forma no es para nada aconsejable, ya que aunque guarda las variables
en Workspace, no podrı́amos cargarlas directamente dentro de un script o función. La forma más
recomendable de cargar este tipo de ficheros es mediante la orden load.
Este procedimiento es extrapolable a ficheros de texto que almacenen datos (provenientes de otro
software, por ejemplo).
El primer método para definir una función es mediante la definición de sus variables de forma
simbólica. Existen dos formas diferentes de definir una función de esta forma:
• Primero definimos nuestra variable simbólica y luego definimos la función directamente. Como
ejemplo, vamos a definir una función que calcule el cuadrado de un número:
>> syms x
>> f = x^2;
Para ejecutar la función debemos usar el comando subs. Vamos a evaluar la función en x = 2,
obteniendo:
>> subs(f,x,2)
ans
4
• La segunda forma consiste en incluir en la definición de la función las variables de las que
depende. Como ejemplo, definimos una función que calcule el cuadrado de un número:
>> syms x
>> g(x) = x^2
SESIÓN 1. NOCIONES BÁSICAS 4
Para ejecutar la función, simplemente incluimos dentro del paréntesis el valor de la variable:
>> g(2)
ans
4
Para ambos casos, si nuestra entrada es un escalar, la salida que nos devuelve será un escalar.
Por otra parte, si la entrada fuera un vector una matriz, la salida serı́a también un vector o matriz
con las mismas dimensiones. No obstante, debemos tener cuidado ya que este tipo de funciones
hacen las operaciones término a término.
El segundo método es mediante la definición de una función anónima. Como ejemplo, vamos a
definir una función que nos calcule el cuadrado de una entrada:
Para ejecutar esta función simplemente tenemos que hacer la llamada incluyendo el valor de la
variable dentro del paréntesis:
>> f(2)
ans
4
A diferencia de la función simbólica, las funciones anónimas sı́ que tienen en cuenta la dimensión de
la entradas, de tal forma que si las dos entradas son matrices y la función multiplica ambas, la salida
será el producto habitual de matrices. Tenemos que tener en cuenta por lo tanto las dimensiones de
las entradas y, en tal caso, utilizar los operadores oportunos: “.*” en lugar “*” si queremos hacer
la multiplicación término a término, “./” en lugar de “/” si queremos la división, etc.
Existe un serie de errores que se cometen de forma habitual y que debemos saber identificar:
• >> 2*x
Undefined function or variable ’x’.
No podemos usar ninguna variable si no la hemos definido previamente.
• >> a = [1 2]; b = [1 1];
>> a*b
Error using * Incorrect dimensions for matrix multiplication..
SESIÓN 1. NOCIONES BÁSICAS 5
14. Crea una función con una entrada y dos salidas. La entrada debe ser un vector que almacene
las coordenadas cilı́ndricas (r, θ, z) de un punto. La primera salida debe ser un vector que
almacene las coordenadas cartesianas (x, y, z) de dicho punto y la segunda, un vector que
almacene las coordenas esféricas (r, θ, ϕ) del mismo.
15. Crea una función con tres entradas y seis salidas. Las tres entradas deben representar las
coordenadas esféricas de un punto (r, θ, ϕ). Las tres primeras salidas deben almacenar las
coordenadas cartesianas del mismo (x, y, x) y las tres últimas, sus coordenadas cilı́ndricas
(r, θ, z).
16. Crea una función que calcule la nota media. Debe tener una única salida (tu nota media) y
un número de entradas determinado por ti mismo.
Extra:
1. Crea una función que realice un cambio de coordenadas cualquiera. La función debe tener
una salida y 3 entradas. La primera entrada debe ser un vector con dos o tres componentes
que almacenen las coordenadas de un punto y la salida deben ser un vector de dos o tres
componentes con las nuevas coordenadas de dicho punto. La segunda entrada debe ser un
número:
• Un 1 si las coordenadas introducidas en la primera entrada son cartesianas.
• Un 2 si las coordenadas introducidas en la primera entrada son polares o cilı́ndricas.
• Un 3 si las coordenadas introducidas en la primera entrada son esféricas.
La tercera entrada debe ser un número:
• Un 1 si queremos almacenar en el vector de salida las coordenadas cartesianas corre-
spondientes a las coordenadas introducidas en la primera entrada.
• Un 2 si queremos almacenar en el vector de salida las coordenadas polares o cilı́ndricas
correspondientes a las coordenadas introducidas en la primera entrada.
• Un 3 si queremos almacenar en el vector de salida las coordenadas esféricas correspon-
dientes a las coordenadas introducidas en la primera entrada.