Tutorial Matlab PDF
Tutorial Matlab PDF
Tutorial de Matlab
Presentamos un tutorial de Matlab, una herramienta potentı́sima, casi estándar para cálculos en
muchas ramas de la Ingenierı́a, y de uso razonablemente simple. Haremos una descripción de los elementos
básicos de Matlab y remitiremos al estudiante interesado en mejorar sus conocimientos del mismo a cualquier
edición del manual de referencia del programa [21]. También es interesante el libro sobre Matlab de Higham
y Higham [16] y una buena referencia en castellano con ejemplos procedentes de problemas de Cálculo
Numérico es el de Quintela [23].
>>cos(5)*2^7.3
ans =
44.7013
Matlab mantiene en memoria el último resultado. Caso de que ese cálculo no se asigne a ninguna variable,
lo hace a una variable por defecto de nombre ans. Si queremos referirnos a ese resultado, lo haremos a través
de la variable ans, y si no se asigna ese nuevo cálculo a ninguna variable, volverá a ser asignado a ans.
>>log(ans)
ans =
3.8000
En este momento cabrı́a preguntarnos si tratamos con un logaritmo decimal o con uno neperiano (natural).
Para saberlo, pedimos ayuda acerca del comando log utilizando:
>>help log
LOG Natural logarithm.
LOG(X) is the natural logarithm of the elements of X.
Complex results are produced if X is not positive.
381
382 Problemas de Cálculo Numérico para ingenieros con aplicaciones Matlab
Aunque en la explicación de las órdenes, los comandos aparezcan en mayúsculas, se deben usar en
minúsculas.
Por defecto, los resultados aparecen con 4 cifras decimales. Si se necesitara más precisión en los resultados,
se puede utilizar la orden format long repitiendo los cálculos:
>>format long
Para recuperar una orden y ejecutarla otra vez o modificarla se usan la flechas arriba y abajo del cursor
⇑, ⇓. Presionemos ⇑ hasta recuperar la orden:
>>cos(5)*2^7.3
ans =
44.70132670851334
Si necesitamos referirnos a determinados cálculos, se asignan a variables y ası́ se pueden recuperar después.
Por ejemplo, podemos recuperar con ⇑ la orden cos(5) · 27.3 y asignar su valor a la variable x editando dicha
orden. Luego podremos utilizarla para otros cálculos.
>>x=cos(5)*2^7.3
x =
44.70132670851334
>>y=log(x)
y =
3.80000318145901
Ejercicio A.1.3 Realizar la siguiente operación: 2.72.1 + log10 108.2 y asignarla a la variable x.
2.1
Ejercicio A.1.4 Realizar la siguiente operación: e2.7 +log10 108.2
y asignarla a la variable t.
Si queremos saber cuánto vale una variable, no tenemos más que escribirla en la lı́nea de comandos y
pulsar Enter.
>>y
y =
3.80000318145901
Como es muy fácil recuperar órdenes previas podemos utilizar esta idea para simular los términos de una
sucesión recurrente. Por ejemplo, xn+1 = cos(xn )
>>x=0.2
x =
0.20000000000000
>>x=cos(x)
x =
0.98006657784124
>>x=cos(x)
x =
0.55696725280964
>>x=cos(x)
x =
0.84886216565827
>>x=cos(x)
x =
Apéndice A: Tutorial de Matlab 383
0.66083755111662
>>x=cos(x)
x =
0.78947843776687
>>x=cos(x)
x =
0.70421571334199
Ejercicio A.1.5 Repetir la operación anterior hasta que se estabilice el cuarto decimal de x de un paso al
siguiente.
Ejercicio A.1.6 Cambiar el formato para que otra vez se vean sólo cuatro decimales.
Ejercicio A.1.7 Empezando por x = 100 repetir la operación
x2 − 81
x=x−
2x
hasta que se converja en el cuarto decimal. ¿Qué relación hay entre el último x y 81?
Ejercicio A.1.8 Definir A como en vuestro documento de identidad o pasaporte. Empezando por x = 100
repetir la operación
x2 − A
x=x−
2x
hasta que se converja en el cuarto decimal. ¿A qué ha convergido la sucesión? 3
Es interesante comentar de este ejercicio que Matlab distingue entre letras mayúsculas y minúsculas en
los nombres de las variables.
A veces es bueno apagar y encender la calculadora para borrar todo y empezar de nuevo. Esto se hace
con la orden clear. Hay que tener cuidado al utilizarla, ya que borra todas las variables que estén en la
memoria sin pedir confirmación.
>>clear
>>x
??? Undefined function or variable ’x’.
Ejercicio A.1.9 Preguntar el valor de A igual que acabamos de preguntar x. ¿Tiene sentido el resultado?
Se puede también definir este vector especificando su primer elemento, un incremento y el último elemen-
to. Matlab rellenará paso a paso sus componentes. Ası́, podemos definir igualmente el vector v como una
secuencia que empieza en 0, avanza de 2 en 2 y que termina en el 8:
>> v = [0:2:8]
v =
0 2 4 6 8
>> v
v =
0 2 4 6 8
Si ponemos ; al final de una lı́nea de comandos, cuando pulsemos la tecla Enter para ejecutarla, se
ejecutará pero no mostrará el resultado en pantalla (se anula el eco en pantalla). Esto es muy útil algunas
veces:
>> v = [0:2:8];
>> v
v =
0 2 4 6 8
Podemos construir el vector v editando directamente entre los corchetes las componentes del vector v:
>>v = [0 2 4 6 8];
>> v
v =
0 2 4 6 8
Es fácil acceder al contenido de una posición del vector, por ejemplo la primera.
>> v(1)
ans =
0
O modificarla:
>> v(1)=-3;
>> v
v =
-3 2 4 6 8
>> v(2)*v(5)^3
ans =
1024
Para trasponer un vector o una matriz se usa el apóstrofo, que es el acento que está en la misma tecla
que el signo de interrogación “?”.
>> v’
ans =
-3
2
4
6
8
Apéndice A: Tutorial de Matlab 385
Como hemos comentado, para recuperar una orden y ejecutarla otra vez o modificarla se usan la flechas
arriba y abajo del cursor ⇑, ⇓. Presionemos ⇑ hasta recuperar la orden:
>> v(1)=-3;
>> v(1)=0;
Al definir ese vector v de 5 componentes, en realidad lo que definimos es una matriz fila de cinco columnas,
o sea, un matriz de 1 × 5. Esto se comprueba preguntando el tamaño de v con la sentencia size:
>>size(v)
ans =
1 5
Ejercicio A.2.2 Definir un nuevo vector que sea el traspuesto de v y aplicar a ese vector el comando size.
¿Es coherente el resultado?
>> A = [ 1 2 3; 3 4 5; 6 7 8]
A =
1 2 3
3 4 5
6 7 8
>> A = [ 1 2 3
3 4 5
6 7 8]
A =
1 2 3
3 4 5
6 7 8
Se puede modificar alguno de los elementos de la matriz A, accediendo a cualquiera de sus posiciones,
por ejemplo:
>> A(2,2)=-9
A =
1 2 3
3 -9 5
6 7 8
>> A(2,2)=4;
O bien que D sea la submatriz cuadrada de orden dos inferior derecha de la matriz A.
>> D=A(2:3,2:3)
D =
4 5
7 8
Una vez que se es capaz de crear y manipular una matriz, se pueden realizar muchas operaciones estándar.
Por ejemplo, calcular su inversa. Hay que tener cuidado y no olvidar que las operaciones son cálculos numéri-
cos realizados por ordenador. En el ejemplo, A no es una matriz regular, y sin embargo Matlab devolverá su
inversa, pues los errores de redondeo durante su cálculo convierten en invertible a dicha matriz.
>> inv(A)
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 4.565062e-18
ans =
1.0e+15 *
-2.7022 4.5036 -1.8014
5.4043 -9.0072 3.6029
-2.7022 4.5036 -1.8014
Con la matriz B sı́ que es posible calcular su inversa:
>>inv(B)
ans =
-3.0000 5.0000 -2.0000
-1.0000 -1.0000 1.0000
2.0000 -1.0000 0
Ejercicio A.3.10 Definir una matriz de nombre B1 como la inversa de B. Multiplicar B por B1 y razonar
la coherencia del resultado.
Hay que comentar que Matlab distingue entre mayúsculas y minúsculas. Este puede ser el origen de
algunas confusiones si se manejan algoritmos complejos.
>> inv(a)
??? Undefined function or variable a.
0 -1.0664 0
0 0 0.0000
>> diag(e)
ans =
14.0664
-1.0664
0.0000
Ejercicio A.4.3 Calcular el producto 14.0664w. ¿Son parecidos? ¿Por qué sı́ o por qué no?
>>v = [1 3 5]’
v =
1
3
5
>>B = [ [1 2 3]’ [2 4 7]’ [3 5 8]’];
>> x = B\v
x =
2
1
-1
>> B*x
ans =
1
3
5
Ejercicio A.5.3 Encontrar la solución del sistema lineal BB t x = v asignando esa solución al vector x.
Podemos crear una matriz aumentada a partir de B y del término independiente y reducirla hasta
convertir el sistema en uno equivalente triangular, efectuando las necesarias transformaciones elementales de
fila
390 Problemas de Cálculo Numérico para ingenieros con aplicaciones Matlab
>>BA=[B v]
BA =
1 2 3 1
2 4 5 3
3 7 8 5
>>BA(2,:)=BA(2,:)-2*BA(1,:)
BA =
1 2 3 1
0 0 -1 1
3 7 8 5
>>BA(3,:)=BA(3,:)-3*BA(1,:)
BA =
1 2 3 1
0 0 -1 1
0 1 -1 2
La segunda fila tiene el elemento diagonal nulo, ası́ que hay que realizar una permutación de filas,
premultiplicando por la identidad permutada:
>>IP=[1 0 0;0 0 1;0 1 0];
>>BA=IP*BA
BA =
1 2 3 1
0 1 -1 2
0 0 -1 1
Ahora ya es inmediato resolver este sistema por sustitución hacia atrás:
Ejercicio A.5.5 Aplicar lo anterior al problema 2.1.
Ejercicio A.5.6 Definir una matriz H de 3 × 3 a partir de las tres primeras columnas de la matriz BA.
Con Matlab es sencillo crear vectores y matrices. La potencia de Matlab nace de la facilidad con la que
se pueden manipular estos vectores y matrices. Primero mostraremos cómo realizar operaciones sencillas,
sumar, restar y multiplicar. Luego las combinaremos para mostrar que se pueden realizar operaciones com-
plejar a partir de estas operaciones simples sin mucho esfuerzo. Primero definiremos dos vectores, los cuales
sumaremos y restaremos:
>> v = [1 2 3]’
v =
1
2
3
Apéndice A: Tutorial de Matlab 391
>> b = [2 4 6]’
b =
2
4
6
>> v+b
ans =
3
6
9
>> v-b
ans =
-1
-2
-3
La multiplicación de vectores y matrices, igual que su suma, sigue las reglas estrictas del Álgebra Lineal.
En el ejemplo anterior, los vectores son ambos vectores columna con tres elementos. No se puede sumar un
vector fila con un vector columna. Se debe recordar que el número de columnas del primer operando debe
ser igual al número de filas del segundo.
>> v*b
Error using == *
Inner matrix dimensions must agree.
>> v*b’
ans =
2 4 6
4 8 12
6 12 18
>> v’*b
ans =
28
Matlab permite realizar las operaciones entre elementos de un vector o matriz de modo muy sencillo.
Supongamos que queremos multiplicar, por ejemplo, cada elemento del vector v con su correspondiente
elemento en el vector b. En otras palabras, supongamos que se quiere conocer v(1) ∗ b(1), v(2) ∗ b(2), y
v(3) ∗ b(3). Serı́a estupendo poder usar directamente el sı́mbolo “∗” pues en realidad estamos haciendo una
especie de multiplicación, pero como esta multiplicación tiene otro sentido, necesitamos algo diferente. Los
programadores que crearon Matlab decidieron usar el sı́mbolo “·∗” para realizar estas operaciones. De hecho,
un punto delante de cualquier sı́mbolo significa que las operaciones se realizan elemento a elemento.
>> v.*b
ans =
2
8
18
>> v./b
ans =
0.5000
0.5000
0.5000
Ejercicio A.6.2 Definir un vector tal que sus componentes sean las de v al cubo.
Una vez que hemos abierto la puerta a operaciones no lineales, ¿por qué no ir hasta el final? Si aplicamos
una función matemática predefinida a un vector, Matlab nos devolverá un vector del mismo tamaño en el
que cada elemento se obtiene aplicando la función al elemento correspondiente del vector original
392 Problemas de Cálculo Numérico para ingenieros con aplicaciones Matlab
>> sin(v)
ans =
0.8415
0.9093
0.1411
>> log(v)
ans =
0
0.6931
1.0986
Saber manejar hábilmente estas funciones vectoriales es una de las ventajas de Matlab. De este modo, se
pueden definir operaciones sencillas que se pueden realizar fácil y rápidamente. En el siguiente ejemplo, se
define un vector muy grande y lo manipulamos de este modo tan sencillo.
>> x = [0:0.1:100]
x =
Columns 1 through 7
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000
......................
Columns 995 through 1001
99.4000 99.5000 99.6000 99.7000 99.8000 99.9000 100.0000
>> y = sin(x).*x./(1+cos(x));
Usando este tratamiento vectorial, se pueden generar gráficos de modo muy sencillo. Damos una muestra
de esto que luego completaremos.
>> plot(x,y)
Ejercicio A.6.3 Definir un vector t cuya primera componente sea −4, que tenga un incremento entre
componentes de 0.05 y termine en el punto 1.
Ejercicio A.6.4 Definir un vector y a partir de cada componente del vector t recién definido
2
y = 5e−t + sin(10t)
>>plot(x,yseno,’go’,x,ytaylor);
La g se refiere al color verde (green), y la o significa que los puntos se van a marcar con un circulito. El
apóstrofo es el que está en la tecla de la interrogación de cierre.
Ejercicio A.7.1 En la ventana en la que aparece la figura, seleccionar Edit, Copy Figure. Abrir un nuevo
documento de Word y pegar la figura en ese documento.
También es buena idea representar la función error:
>>plot(x,abs(yseno-ytaylor),’mx’);
Para que al final del fichero con todas las órdenes aparezca en pantalla el gráfico, una vez que éste ya
ha sido ejecutado alguna vez, se utiliza la orden shg, que hace que la ventana del gráfico se convierta en la
activa. Usemos este comando para utilizar el comando de petición de ayuda help que es muy útil también
por sus referencias cruzadas a otros comandos.
>> help shg
Ejercicio A.7.3 Dibujar la curva t, y del ejercicio A.6.4 con cruces rojas y con una retı́cula incorporada
( grid).
También se puede copiar este gráfico al portapapeles desde la ventana del gráfico, para después pegarlo
en un documento Word por ejemplo, como ya vimos en el ejercicio A.7.1.
permiso de escritura en ese directorio y no pueda guardar ahı́ sus ficheros. En este caso, se pueden guardar en la carpeta que
se desee que después se incorpora a la ruta de búsqueda (path), bien con el comando path o con el icono correspondiente.
394 Problemas de Cálculo Numérico para ingenieros con aplicaciones Matlab
Una vez que se hayan introducido las sentencias, se salva el fichero volviendo a la ventana con la lı́nea
de comando y se teclea en esta lı́nea el nombre del fichero quitando .m. En este caso tutorm.
>>tutorm
??? Undefined function or variable ’h’.
Error in ==> C:\MATLAB\bin\tut.m
On line 13 ==> x=xmin:h:xmax;
Si se trata de llamar al fichero sin haber definido primero la variable h, aparecerá un mensaje de error.
Se deben definir todas las variables que no se definen en el propio fichero y que éste utiliza.
>>h = 0.1;
>>tutorm
>>plot(x,yseno,’rx’,x,ytaylor)
Una vez ejecutada esta instrucción se deberá ver una gráfica como la de la Figura A.1.
1
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
Al teclear tutorm en la lı́nea de comandos, Matlab buscará en los directorios indicados en el path un
fichero llamado tutorm.m. Una vez que lo encuentre lo leerá y ejecutará los comandos como si se hubiesen
tecleado uno detrás de otro en la lı́nea de comandos. Si se desea ejecutar el programa otra vez pero con
un paso diferente, hay que tener cuidado. El programa sobreescribirá los vectores x, yseno e yatylor. Si se
quieren guardar estos vectores hay que especificarlo, almacenándolos en nuevas variables.
>>xp = x;
>>ysenop = yseno;
>>ytaylorp = ytaylor;
>>h = 0.01;
>>tutorm
Tenemos dos aproximaciones; la primera con un paso h de 0.1 que se almacena en los vectores xp, ysenop
e ytaylorp y la segunda relativa a un paso de 0.01 que guardamos en los vectores x, yseno e ytaylor.
Ejercicio A.8.1 Calcular la dimensión que tienen que tener los vectores x y xp y confirmar el resultado
utilizando la orden size.
Ejercicio A.8.2 Crear y ejecutar desde Matlab un fichero que se llame BAIP.m con la secuencia de coman-
dos siguiente
v = [1 3 5]’;
B = [ [1 2 3]’ [2 4 7]’ [3 5 8]’];
BA=[B v]
BA(2,:)=BA(2,:)-2*BA(1,:)
BA(3,:)=BA(3,:)-3*BA(1,:)
IP=[1 0 0;0 0 1;0 1 0];
BA=IP*BA
Ejercicio A.8.3 Pedir ayuda del comando pause e incorporarlo entre algunas lı́neas del ejercicio anterior
para ver todos los pasos de la secuencia de comandos.
Ejercicio A.8.4 Crear y ejecutar desde Matlab un fichero que se llame CURVATY.m con una secuencia de
comandos que realicen las operaciones siguientes:
1. Borrar todas las variables activas de la memoria.
2. Definir un vector t cuya primera componente sea −4, que tenga un incremento entre componentes de
0.05 y termine en el punto 1.
3. Definir un vector y a partir de cada componente del vector t recién definido como:
2
y = 5e−t + sin(10t)
4. Dibujar la curva (t, y) con cruces rojas y con una retı́cula ( grid) incorporada.
>>(2+3*i)*(3-7*i)
ans =
27.0000 - 5.0000i
√
Podemos usar indistintamente el sı́mbolo i, o j para −1. El segundo se usa mucho al tratar con los
desarrollos de Fourier tanto en sus versiones continuas como discretas.
>>(2+3*j)*(3-7*j)
ans =
27.0000 - 5.0000i
Podemos utilizar también la fórmula de Euler para definir la exponencial compleja de modo directo,
ejt = cos(t) + j sin(t). La usaremos a menudo en el capı́tulo de aproximación al tratar del desarrollo en serie
de Fourier y de la DFT.
>>exp(j*5.3)
ans =
0.5544 - 0.8323i
396 Problemas de Cálculo Numérico para ingenieros con aplicaciones Matlab
Ejercicio A.9.1 Calcular el valor del seno y del coseno de 5.3 para comprobar que la fórmula de Euler
está bien usada.
Ejercicio A.9.2 Multiplicar exp(jπ/6) por el complejo 1 − j. Comprobar el resultado realizando manual-
mente las operaciones correspondientes.
Podemos también generar un vector de números complejos de modo similar a como lo hemos venido
haciendo. Con las siguientes lı́neas, dibujamos la parte real de la exponencial correspondiente, una función
de periodo 3. Para ello usamos la función real, que asocia al número complejo su parte real.
% complejos.m
clear;
t=-1:0.001:2;
w0=2*pi/3;
a=0.5+0.3*j;
fhat=a*exp(j*w0*t);
plot(t,fhat);
axis([-1.5 2.5 -0.8 0.8]);
shg;
>>complejos
Warning: Imaginary parts of complex X and/or Y arguments ignored.
> In complejos.m at line 6
Ejercicio A.9.3 Modificar complejos.m para representar la función suma de dos exponenciales de periodos
2 y 3 y factores 1 − j y 2 − 3j, respectivamente.
Ejercicio A.9.4 Pidiendo ayuda sobre la orden real, obtener la parte imaginaria de f hat en complejos.m.
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1.5 −1 −0.5 0 0.5 1 1.5 2 2.5
>>syms x
Ahora podemos definir una función que dependa de x y cuya integral queramos calcular:
>>f=cos(x)^2;
>>int(f)
ans=
1/2*cos(x)*sin(x)+1/2*x
Podemos también definir una matriz que dependa de x y de una nueva variable y:
>>syms y
>> A=[x y x-y
2 x^2 y
-x -y 0]
A =
[ x, y, x-y]
[ 2, x^2, y]
[ -x, -y, 0]
Y podemos calcular su determinante de modo simbólico:
>> det(A)
ans =
-2*y*x+2*y^2+x^4-x^3*y
Podemos evaluar este determinante para valores reales de x e y asignando valores a esas variables y
utilizando después la orden eval :
>> x=2.41
x =
2.4100
>> y=-3.2
y =
-3.2000
>> eval(det(A))
ans =
114.4301
En el momento en que hemos asignado valores a las variables, éstas dejan de ser sı́mbolos. Si queremos
que vuelvan a serlo tenemos que hacerlo de modo explı́cito
>>syms x
2
Ejercicio A.10.2 Definir una función f como e−x .
Ejercicio A.10.3 Pedir ayuda de la función diff y calcular la derivada de f . Evaluar esta derivada para
x = −3.327.