Práctica 1: Introducción al entorno de trabajo de MATLAB

Anuncio
Práctica 1: Introducción al entorno de trabajo de
MATLAB*
1.
Introducción
MATLAB constituye actualmente un estándar dentro de las herramientas del análisis numérico, tanto por su gran capacidad y sencillez de manejo
como por su enorme versatilidad y difusión. En esta primera sesión el objetivo es aprender los fundamentos del: operaciones básicas, gráficos elementales, etc. Al final de la sesión debemos estar en condiciones de crear también
ficheros guión (“script”) y funciones sencillas.
Dadas las caracterı́sticas especiales de esta primera práctica no existe estudio previo. Sin embargo, se recomienda disponer de algún medio de almacenamiento externo donde guardar los ficheros relacionados con las prácticas.
2.
Trabajo de laboratorio
2.1.
Espacio de trabajo de MATLAB
Al iniciar una sesión MATLAB observaremos el espacio de trabajo como
en la Figura 1, compuesto por varias ventanas. La más grande de ellas, que se
encuentra a la derecha, es la ventana de comandos. Una vez que MATLAB
está listo para funcionar aparece la señal de espera de entrada (“prompt”)
en forma de >>.
Podemos modificar la carpeta activa seleccionándola en la pestaña de
“Current directory”. Ahora los ficheros de su carpeta activa son visibles
desde MATLAB, en la ventana superior izquierda.
Para finalizar la sesión bastará con teclear exit o quit, o simplemente
cerrar la ventana de MATLAB (indistintamente). El programa se cerrará y
volverá a la pantalla principal de Windows.
Observaciones 1 Tenga en cuenta que:
*
MATLAB es marca registrada de The MathWorks, Inc.
Práctica de ordenador I
2
Figura 1: Entorno de MATLAB.
Es conveniente también hacer uso intensivo de la ayuda de MATLAB
accediendo a ella desde el menú o tecleando en la ventana de comandos
help <palabra clave> para la ayuda sobre el comando especificado
por <palabra clave>. Por ejemplo,
>> help help
invoca la ayuda sobre la propia ayuda en lı́nea.
Se pueden usar las flechas ↑ y ↓ para evocar los comandos introducidos
anteriormente.
Las letras mayúsculas y las minúsculas para MATLAB no son equivalentes: valor y Valor son dos variables diferentes. Los nombres de las
variables tienen que comenzar con una letra, pueden contener hasta
63 caracteres (letras, números y barra baja, pero no signos de puntuación). También se prohı́be usar las palabras reservadas
for end if while function return elseif case otherwise
switch continue else try catch global persistent break
como nombre de variables.
Teclear el nombre de una variable hará que MATLAB devuelva su
valor.
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
3
Un punto y coma (;) al final final de cualquier expresión suprime la
salida del resultado por la pantalla (pero no la evaluación de dicha
expresión).
En MATLAB se puede usar tanto paréntesis ( ) como corchetes [ ], pero éstos tienen significados diferentes: los paréntesis sirven para agrupar expresiones e indicar los argumentos de funciones, mientras que
los corchetes especifican listas, vectores y matrices.
Cualquier cálculo se puede abortar pulsando Ctrl-C.
2.2.
Operaciones básicas en MATLAB
La forma más sencilla de usar MATLAB es hacerlo funcionar como si se
tratara de una gran calculadora. Las operaciones disponibles son: + (suma),
- (resta), * (producto), / (división), ˆ (exponenciación).
Por ejemplo, tecleando:
>> 3+2
MATLAB responderá con el resultado de la operación:
ans = 5
Ejercicio 1 Evalúe las siguientes expresiones:
1. 186 × 31
2. 124312 − 5478
3. 174560,4
4. 711/134
El resultado de las operaciones es asignado por defecto a la variable ans (de
“answer”), pero puede asignarse a otras variables. Éstas pueden tener cualquier nombre que cumpla con las reglas habituales (caracteres alfanuméricos,
empezando por una letra). Por ejemplo, tecleando:
>> x=12/2
se realiza la operación indicada y asigna el resultado a x: x = 6. La variable
conserva su valor a lo largo de toda la sesión, salvo que se le asigne otro o
se le prive de valor por medio de
>> clear x
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
4
Observe la gran particularidad de MATLAB: a diferencia de muchos otros
lenguajes de programación, aquı́ no se requiere declarar variables de antemano.
Varios comandos de MATLAB pueden ir en una misma linea, separados
por una coma o un punto y coma (recuerde que el último suprime la salida
del resultado por pantalla; ası́, si únicamente desea que se asigne el valor,
pero no quiere ver el resultado, basta con añadir un ; después de la orden).
Por ejemplo, si efectuamos:
>> z=36-7;
el resultado se asignará a z, pero no se mostrará por pantalla. Para inspeccionar posteriormente el valor de z bastará con teclear el nombre de la
variable:
>> z
a lo que MATLAB responderá con: z = 29.
Casi todas las funciones elementales (y muchas de las funciones especiales) se encuentran incluidas en MATLAB: las funciones trigonométricas:
sen, cos, tan, acos, asin, atan, los logaritmos: log, log10, la función exponencial: exp, la raı́z cuadrada: sqrt, las funciones hiperbólicas: sinh, cosh,
etc. Para usar cualquiera de estas funciones se debe colocar el argumento
entre paréntesis. Por ejemplo:
>> y=log(18*z+x);
asignará a la variable y el resultado de la operación anterior. Tecleando
>> y
obtendremos como respuesta: y = 6.2691.
MATLAB conoce también varias constantes universales, como pi= π,
la unidad imaginaria i ó j, etc. Recuerde que por defecto MATLAB realiza todas la operaciones ajustándose a el estándar IEEE, doble precisión.
No podemos variar esta caracterı́stica salvo tengamos instalado el Symbolic Math Toolbox, que implementa la función vpa (de “variable precision
arithmetics”).
Ejercicio 2 Realice las siguientes operaciones:
1. [sen(π/8)]ln 5 ;
p
2. 1 + (arctan 1)2 ;
3. e3,7
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
2.3.
5
Matrices y vectores
Al igual que para el rey del “Principito” todas las personas eran sus
súbditos, para MATLAB todas las variables son matrices; en particular, los
escalares son matrices 1 × 1. En realidad, MATLAB proviene de “MATrix
LABoratory”.
Las matrices se indican por corchetes, los elementos de una misma fila
se separan mediante “,” (o también espacios) y las filas se separan con “;”
(o saltos de lı́nea). Por ejemplo al teclear:
>> A=[2, -1, 4; 6, 9, -4; 0, 2, 1]
obtenemos la matriz A:
A =
2 -1 4
6 9 -4
0 2 1
Los vectores son matrices de una sola fila (vectores fila) o columna (vectores columna). Por ejemplo,
>> b=[7 3 4 9 2 11];
es un vector fila de 6 elementos.
Se puede acceder a los elementos de una matriz (o vector) a través de su
ı́ndice; MATLAB enumera los subı́ndices comenzando con el 1. Por ejemplo,
A(2,1) es el elemento de la segunda fila y primera columna de A:
>> A(2,1)
ans =
6
y
>> b(4)
devolverá como resultado el cuarto elemento del vector b (no importa si c
es un vector fila o columna):
ans =
9
La asignación se realiza por medio del signo “=”; por ejemplo, escribiendo
>> b(3)=18
hace que MATLAB asigne al tercer elemento de b el valor 18:
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
6
b =
7 3 18 9 2 11
Ejercicio 3 Ahora modifique el vector b de forma que su segundo elemento
tome el valor del quinto.
La creación de un vector con valores equiespaciados se simplifica si utilizamos el operador dos puntos, “:” La sintaxis
<inicio>:<incremento>:<final>
nos permiten generar un vector con valores <inicio>, <inicio>+<incremento>,
<inicio>+2<incremento>, . . . , hasta llegar a <final>. De omitirse, el <incremento>=1.
Por ejemplo, se puede ejecutar
>> v=1:-0.3:-1
v=
1.0000 0.7000
0.4000
0.1000
-0.2000
-0.5000
-0.8000
El operador “:” sirve también para especificar un rango de subı́ndices de un
vector o una matriz. Por ejemplo,
>> b(2:4)
ans=
3 18 9
extrae los elementos con los ı́ndices 2, 3 y 4, mientras que
>> A(1:2,2:3)
ans=
-1 4
9 -4
devuelve el menor de A correspondiente a la intersección de las filas 1, 2 y
columnas 2, 3. Si simplemente especificamos “:”, MATLAB lo interpreta
como “todo el rango de valores”, es decir, toda una fila o columna. Por
ejemplo, con
>> A(3,:)
se obtiene la tercera fila de la matriz A:
ans =
0 2 1
Ejercicio 4 Asigne a la variable k el valor de la segunda columna de A.
Ejercicio 5 Usando la ayuda de MATLAB averigüe el significado y la sintaxis del comando linspace. Use ese comando para generar el vector v,
creado más arriba.
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
2.4.
7
Operaciones con matrices y vectores
Como se ha dicho antes, MATLAB interpreta todas las variables como
matrices, y las operaciones habituales (*,+,-) entre ellas las entiende por
defecto como operaciones matriciales.
Ası́, se pueden sumar o restar vectores o matrices siempre que tengan
las mismas dimensiones; por ejemplo:
>> a=b; b+a
da como resultado
ans =
14 6 36 18 4 22
La transposición en MATLAB se indica por medio del apóstrofe (’); en realidad, se trata de transposición hermitiana: todo elemento se cambia además
por su complejo conjugado. Por ejemplo,
>> c=a’
c =
7
3
18
9
2
11
El operador * es por defecto una multiplicación matricial, de modo que para
llevarse a cabo requiere que las dimensiones de las matrices (o vectores) sean
las apropiadas.
>> c*a
ans =
49
21
126
63
14
77
21
9
54
27
6
33
126
54
324
162
36
198
63
27
162
81
18
99
14
6
36
18
4
22
77
33
198
99
22
121
>> a*c
ans =
588
Ejercicio 6 Calcule la norma euclı́dea (kbk2 =
vector b, usando la multiplicación * de MATLAB.
Andrei Martı́nez Finkelshtein
p
|b1 |2 + · · · + |bn |2 ) del
Práctica de ordenador I
8
Si se desean efectuar operaciones con vectores o matrices elemento a
elemento, se debe agregar un punto (.) antes del operador para indicarlo.
Ası́, por ejemplo, la división de dos vectores no es una operación definida.
Sin embargo, puede calcularse la división elemento a elemento, Ejemplo:
>> a./b
ans =
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
o elevarse todos los elementos de un vector al cuadrado,
>> a.^2
ans =
49
9
324
81
4
121
Ejercicio 7 Introduzca los vectores f=[3,8,-2,15,3] y g=[4,0,4,-12,2]
y calcule su producto elemento a elemento.
La mayorı́a de las funciones elementales aplicadas a un vector se realizan
elemento a elemento:
>> log(a)
ans=
1.9459
1.0986
2.8904
2.1972
0.6931
2.3979
√
Ejercicio 8 Calcule los valores de n, para n = 1, 2, . . . , 16, asignando la
tabla resultante a la variable raices.
2.5.
Gráficas
MATLAB le permite presentar sus resultados en forma gráfica, en una
gran diversidad de formatos. Dado un vector fila o columna puede utilizarse
la función plot para mostrar el gráfico del vector en pantalla. Por ejemplo,
>> plot(raices);
√
dibujan los valores de n, n = 1, 2, . . . , 16 en la ventana gráfica, como se
muestra en la Figura 2.
Observe que, si no se especifica lo contrario, MATLAB siempre
asume los valores de las abscisas igual a los subı́ndices del vector de
datos, es decir, 1, 2, 3, . . .
une los puntos de la gráfica.
Si queremos especificar los valores de las abscisas, debemos usar dos vectores.
Por ejemplo, para representar la secuencia siguiente:
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
9
4
3.5
3
2.5
2
1.5
1
0
2
4
6
8
10
12
14
16
Figura 2: Gráfica de raices.
n
s(n)
-1
2
0
-4
1
-2
2
6
3
-1
4
1
podrı́amos seguir los pasos:
>> x=-1:4; s=[2,-4,-2,6,-1,1];
>> plot(x,s);
donde -1:4 indican el inicio y el final de la secuencia s. Vea el resultado en
la Figura 3.
Para representar gráficamente una función y = f (x) se siguen los mismos
pasos: generar un conjunto de puntos de muestra y dibujarlos con plot, por
ejemplo,
>> x=<inicio>:<inc.>:<final>;
>> y=f(x);
>> plot(x,y);
Mientras más puntos tomamos, más fiel es la gráfica, pero mayor es el volumen de datos y más se tarda en obtenerlos o procesarlos.
Ejercicio 9 Dibuje la gráfica de y = cos(x), x ∈ [0, 3], tomando los valores
de la abscisa
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
10
6
5
4
3
2
1
0
−1
−2
−3
−4
−1
−0.5
0
0.5
1
1.5
2
2.5
3
3.5
4
Figura 3: Resultado de plot(x,s);
(a) x = 0, 1, 2, 3;
(b) x = 0, 0,01, 0,02, . . . , 3;
Existen múltiples comandos para modificar el gráfico una vez construido.
Por ejemplo, si fuera necesario, puede añadirse una rejilla a la gráfica usando
la instrucción grid; o etiquetar los ejes por medio de xlabel (para el eje de
abscisas) e ylabel (para el eje de ordenadas).
El resultado de
>> plot(raices);
>> xlabel(’n’); ylabel(’Raiz cuadrada de n’);
>> grid
se observa en la Figura 4.
MATLAB ofrece además la posibilidad de presentar varias gráficas al
mismo tiempo en pantalla, ası́ como de realizar gráficas tridimensionales. Si
desea más información sobre gráficas puede teclear ”help plot”desde la lı́nea
de comandos de MATLAB. Se recomienda también ejecutar grafdemo para
ver una demostración de diferentes posibilidades gráficas de MATLAB.
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
11
4
3.5
Raiz cuadrada de n
3
2.5
2
1.5
1
0
2
4
6
8
n
10
12
14
16
Figura 4: Gráfica especificando ambos ejes, con rejilla.
2.6.
Ficheros
Con lo que se ha visto hasta ahora, MATLAB no es más que una calculadora cientı́fica muy potente, que permite obtener resultados tecleando
directamente los comandos apropiados. Cuando el número de operaciones
a realizar es grande, o deben repetirse varias veces, puede resultar cómodo
introducir todas esas ordenes en un fichero. Lo que hace MATLAB tan
potente es su lenguaje de programación.
Todas las instrucciones, escritas en el lenguaje de MATLAB, se deben
almacenar en ficheros ASCII con la extensión “.m”. Además, éste puede
contener tantas lı́neas de comentarios como queramos, precediendo cada
una de ellas por el signo de %. Para editar un fichero .m, podemos teclear
en MATLAB edit <nombre> (o bien seleccionarlo con doble click en la
ventana de “Current directory”).
Los ficheros con la extensión .m se dividen en dos clases:
1. los ficheros de definición de función;
2. los ficheros “guión” o “script”.
Los segundos no son otra cosa que una transcripción de una secuencia de
comandos que podrı́amos ir tecleando consecutivamente para llegar al reAndrei Martı́nez Finkelshtein
Práctica de ordenador I
12
sultado. Esta es la forma más habitual de trabajar con MATLAB y salvo
que se trate de instrucciones muy cortas, se debe utilizar scripts y no teclear
directamente en la ventana de comandos.
Por ejemplo, para generar el último gráfico construido era equivalente
crear un fichero con la extensión .m, por ejemplo, grafico.m, con el contenido:
plot(raices);
xlabel(’n’); ylabel(’Raiz cuadrada de n’);
grid
y ejecutarlo desde MATLAB tecleando el nombre (sin extensión), grafico,
o directamente desde el editor de MATLAB pulsando la tecla F5.
En cuanto a las funciones, otra gran virtud de MATLAB es que casi
todas ellas están “a la vista”, escritas en el propio lenguaje del sistema, de
modo que las podemos examinar y modificar a nuestra conveniencia (¡aunque
no se recomienda hacerlo si no estamos totalmente seguros!).
Ejercicio 10 La instrucción legendre de MATLAB calcula la función de
Legendre asociada. Examine cómo está implementada esa función, que se
almacena en el fichero legendre.m, pero por favor, ¡no la modifique!
También existe la posibilidad de crear nuevas funciones. La principal
ventaja de las funciones es que permiten variables locales y parámetros de
entrada y salida. Para declarar una función de forma que MATLAB sea
capaz de entenderlo, deben cumplirse los requisitos siguientes:
1. La función debe estar contenida en un fichero .m cuyo nombre debe
coincidir con el de la función (recuerde la función legendre).
2. La primera lı́nea ejecutable del fichero (comentarios aparte) debe seguir la sintaxis:
function [y1,y2,...]=<nomfunc>(x1,x2,...)
donde x1,x2. . . son los parámetros (variables) de entrada e y1,y2,. . . son
los parámetros de salida.
MATLAB admite construcciones del tipo for, while e if. La sintaxis para
cada una de ellas puede obtenerse tecleando help for, help while o help
if según el caso. Por ejemplo, el siguiente código calcula el valor de 10!:
>> f=1; for k=2:10, f=f*k; end
Ejercicio 11 Escriba la función misuma, que acepte dos argumentos de entrada y devuelva como resultado la suma de ambos. Después escriba la función fibo que haga una llamada a misuma y que, dado el parámetro n en la
entrada, nos devuelva los n primeros miembros de la sucesión de Fibonacci.
Andrei Martı́nez Finkelshtein
Práctica de ordenador I
13
MATLAB nos permite guardar todas las variables en un fichero para
poder recuperarlas posteriormente. Para ello basta con teclear:
>> save <nombref>
con lo que todas las variables se guardan el fichero cuyo nombre (sin extensión) se haya especificado. Posteriormente se pueden recuperar los datos
con:
>> load <nombref>
load y save también pueden usarse sin especificar el nombre de un fichero; en ese caso MATLAB envı́a los datos a un fichero por defecto llamado
matlab.mat. Si sólo se quieren salvar algunas variables (digamos por ejemplo x e y) basta con hacer:
>> save <nombref> x,y
Para más opciones sobre load o save teclee help load o help save desde
la lı́nea de comandos de MATLAB.
Andrei Martı́nez Finkelshtein
Descargar