Está en la página 1de 12

Universidad de Castilla-La Mancha

ETSI Industriales
Una introduccion a MATLAB
Curso 04/05

1. Introduccion. MATLAB es un programa de calculo cientfico de gran versatilidad y


facilidad de uso con un gran numero de herramientas orientadas a una amplia diversidad de
aplicaciones. Una vez iniciado MATLAB , podremos acceder a un completo tutorial de ayuda
mediante el comando helpdesk. MATLAB proporciona tambien un conjunto de demostra-
ciones de algunas de sus posibilidades accesible mediante el comando demo. Por su parte,
en cualquier momento podremos acceder a la ayuda inmediata respecto de cualquier funcion
mediante la orden help funcion.
El elemento basico en MATLAB son las matrices, que son definidas mediante corchetes.
As

>> A=[1 2 3 4 5 6]

A =

1 2 3 4 5 6

define la matriz fila,  


A= 1 2 3 4 5 6
mientras que la orden

>> a=[1 2 3; 4 5 6]

a =

1 2 3
4 5 6

define la matriz con dos filas


1 2 3
a=
4 5 6
Observese que el operador ; separa una fila de la siguiente. Es importante destacar que
MATLAB distingue entre mayusculas y minusculas, siendo por tanto diferentes a de A.
El operador ; al final de una sentencia hace que MATLAB omita la salida. Por otra parte,
si no asignamos un nombre a la matriz definida, esta se asigna de forma automatica a la
variable ans, por ejemplo,

>> [1 2 3; 2 4 5]

ans =

1 2 3
2 4 5

Una de las caractersticas de MATLAB es la facilidad con la que opera con matrices, as el
operador define la matriz traspuesta de la dada,

>> b=a

b =

1 4
2 5
3 6

La suma entre una matriz y un escalar produce lo siguiente,

>> a+2

ans =

3 4 5
6 7 8

pero la orden

>> a+b
??? Error using ==> +
Matrix dimensions must agree.

da lugar a error pues las dimensiones de las matrices no son acordes.


Tambien es posible definir submatrices a traves del operador : del siguiente modo
>> c=a(1:2,2:3)

c =

2 3
5 6

La multiplicacion de matrices se lleva a cabo con el operador *, siempre que las dimensiones
sean compatibles. As,

>> a=[1 2 3; 4 5 6];


>> b=[2 3 1];
>> a*b

ans =

11
29

>> b*a
??? Error using ==> *
Inner matrix dimensions must agree.

Tambien se pueden multiplicar dos matrices elemento a elemento usando el operador .*.
En el siguiente ejemplo, el comando eye(n) define la matriz identidad de orden n:

>> c=a*a

c =

17 22 27
22 29 36
27 36 45

>> d=eye(3)

d =

1 0 0
0 1 0
0 0 1

Notese a continuacion la diferencia entre el operador multiplicacion, con y sin .

>> c*d

ans =

17 22 27
22 29 36
27 36 45

>> c.*d

ans =

17 0 0
0 29 0
0 0 45

Del mismo modo actuan los operadores ./ y .^, que dividen o elevan cada uno de los elementos
de la matriz. Veanse los ejemplos,

>> c^2

ans =

1502 1984 2466


1984 2621 3258
2466 3258 4050

>> c.^2

ans =

289 484 729


484 841 1296
729 1296 2025
el primero de los cuales calcula la multiplicacion de c consigo misma, mientras que el segundo
calcula el cuadrado de cada elemento de c.

1.1. Algebra elemental. MATLAB dispone de diversos comandos para realizar distin-
tos calculos con matrices. El comando inv calcula la inversa de una matriz, siempre que esta
exista, mientras que det calcula su determinate:

>> a=[1 0 -1; 2 0 -1; -1 1 2];


>> inv(a)

ans =

-1 1 0
3 -1 1
-2 1 0

>> det(a)

ans =

-1

Por su parte, el comando eig proporciona los autovalores de una matriz, y poly da como
resultado los coeficientes del polinomio caracterstico. Por ejemplo,

>> a=[1 0 -1; 2 1 -1; -1 1 2];


>> eig(a)

ans =

-0.0000
2.0000 + 1.0000i
2.0000 - 1.0000i

donde, como puede observarse, aparecen dos autovalores complejos, 2 + i, 2 i, y el autovalor


0. Si hacemos,

>> poly(a)

ans =
1.0000 -4.0000 5.0000 0.0000

sabremos que el polinomio caracterstico de a viene dado por 3 42 + 5.

1.2. Graficas sencillas. El comando plot permite dibujar una poligonal que une un
conjunto de puntos definidos mediante un par de vectores. Observese el siguiente ejemplo:

>> x=-1:0.3:1

x =

-1.0000 -0.7000 -0.4000 -0.1000 0.2000 0.5000 0.8000

>> y=x.^2

y =

1.0000 0.4900 0.1600 0.0100 0.0400 0.2500 0.6400

en el hemos definido un vector x tomando los puntos que estan entre 1 y 1 con distancia
0,3. y el vector y, calculando los cuadrados de los elementos de x. El comando plot(x,y)
dibuja una poligonal uniendo los puntos del plano con primera coordenada los elementos de
x y segunda coordenada los elementos de y. Entre punto y punto, MATLAB introduce una
recta. La sentencia siguiente

>> plot(x,y,*-)

general el dibujo mostrado en la Figura 1.1.

2. Funciones. MATLAB permite trabajar con expresiones simbolicas de funciones de


forma sencilla, y realizar calculos sobre las mismas. Para definer una funcion usamos el co-
mando inline como mostramos a continuacion:

>> f=inline(exp(x)-x^2 - 3*x)

f =

Inline function:
f(x) = exp(x)-x^2 - 3*x
Figura 1.1. Ejemplo del comando plot

Para calcular el valor de esta funcion en un punto a basta escribir f(a), mientras que es
posible esbozar su grafica en un intervalo [a, b] con la sentencia fplot(f,[a b]).
Por otro lado, el comando fzero(f,a) resuelve la ecuacion f (x) = 0, en el punto mas
cercano al punto a. Si en lugar de dar el punto a damos un intervalo donde se encuentra una
raz, calcula esta:

>> fzero(f,[0,1])

ans =

0.4568

3. El paquete simbolico. Una de los paquetes mas utiles para el calculo con MAT-
LAB lo constituye el paquete simbolico o Symbolic Math Toolbox, que permite realizar calculo
simbolico avanzado, es decir, se puede prescindir de asignar un numero a una variable y
tratarla como una constante generica.
Por ejemplo, si tratamos de calcular el seno de una variable no numerica:

>> y=sin(x)
??? Undefined function or variable x.

obtenemos un error, pues MATLAB no conoce el valor de x. Para declarar una variable como
simbolica usamos la expresion

>> syms x

Ahora podemos evaluar expresiones que contengan a esta variable a traves del comando
simplify.
>> y=sin(x); z=cos(x);
>> simplify(y^2+z^2)

ans =

Tambien es posible definir matrices simbolicas del siguiente modo

>> M=sym([a b; c d])

M =

[ a, b]
[ c, d]

y ahora calcular, por ejemplo su determinante, y polinomio caracterstico:

>> det(M), poly(M)

ans =

a*d-b*c

ans =

x^2-x*d-a*x+a*d-b*c

Con el paquete simbolico podemos calcular lmites, derivadas, integrales impropias, etc. A
continuacion exponemos diversos ejemplos de estos calculos.
Para calcular el lmite
sen(x)
lm ,
x0 x
>> limit(sin(x)/x,0)

ans =

1
o un lmite en infinito:
n3 + 3n2 2n
lm ,
n 3n3 1
>> syms n
>> limit((n^3+3*n^2-2*n)/(3*n^3-1),inf)

ans =

1/3

Tambien es posible definir expresiones simbolicas sin necesidad de declarar la variable


previamente,

>> f=exp(z^3)+sin(z)^2

f =

exp(z^3)+sin(z)^2

y despues es posible, por ejemplo, derivar:

>> diff(f)

ans =

3*z^2*exp(z^3)+2*sin(z)*cos(z)

En algunos casos la lectura de la salida que proporciona MATLAB no es muy legible. El


comando pretty genera en ocasiones una visualizacion mas usual.
Si nuestra expresion depende de constantes o mas variables, es posible especificar la va-
riable de derivacion del siguiente modo:

>> f=a*exp(a+x)/sin(a*x)

f =

a*exp(a+x)/sin(a*x)

>> diff(f,a)
ans =

exp(a+x)/sin(a*x)+a*exp(a+x)/sin(a*x)-a*exp(a+x)/sin(a*x)^2*cos(a*x)*x

>> pretty(ans)

exp(a + x) a exp(a + x) a exp(a + x) cos(a x) x


---------- + ------------ - -----------------------
sin(a x) sin(a x) 2
sin(a x)
La integracion se lleva a cabo con el comando int. Es posible hacer integrales definidas o
indefinidas:
>> f=a*exp(a*x);
>> int(f,x)

ans =

exp(a*x)

>> int(f,x,0,1)

ans =

exp(a)-1

Es importante observar que el calculo de una integral definida mediante la ultima sentencia
es un calculo simbolico, de manera que integrales como la siguiente
>> int(exp(x^2),x,0,1)

ans =

-1/2*i*erf(i)*pi^(1/2)

no tienen mucho sentido, pues el resultado viene expresado mediante una funcion extrana, ya
2
que no se conoce una primitiva de la funcion ex . Sin embargo, si acudimos al analisis numerico,
MATLAB proporciona varios comandos que permiten obtener aproximaciones numericas de
cualquier integral definida. Por ejemplo, para usar la regla de Simpson tenemos el comando
quad que puede actuar sobre funciones o expresiones simbolicas
>> f=inline(exp(x.^2));
>> quad(f,0,1)

ans =

1.4627

>> quad(x.*exp(x),0,1)

ans =

1.0000

Notese en ambos casos la necesidad de usar los operadores de multiplicacion o exponenciacion


de la forma .* o .^.

4. Programacion en MATLAB . Para finalizar con esta breve introduccion a MAT-


LAB es necesario hablar de los scripts o m-files que nos permiten elaborar programas para
ejecutar en el entorno de MATLAB . Como ejemplo presentamos a continuacion una pequena
implementacion del metodo de Newton:

function y = newton(f,x0)
% f es una cadena de caracteres
% x0 es el punto inicial

df=diff(f);
xk=1;
x=0;
while (abs(xk-x)>1.e-6)
x=x0;
xk = x0 - eval(f)/eval(df);
x0=xk;
end y=xk;

El diseno del programa permite introducir tanto la funcion cuya raz queremos encontrar
como el punto para iniciar el algoritmo. Dado que introducimos parametros en la ejecucion
hemos de formular el m-file como una function, tal y como aparece en la primera lnea. El
dato de salida es la variable y, el nombre del programa (que debe coincidir con el nombre del
fichero m-file) es newton que depende de los parametros de entrada f, que debe ser una cadena
de caracteres y x0 un punto inicial. Las lneas siguientes, comenzando con % son comentarios.
El resto de las lneas son asignaciones y un bucle en el que se itera mediante el metodo de
Newton hasta que la diferencia entre dos iteraciones consecutivas es menor que 106 .
Para poder ejecutar este programa debemos editarlo (MATLAB trae consigo un editor
incorporado) y guardarlo como un fichero con extension .m. Despues, bastara que el fichero se
encuentre en algun lugar en el que MATLAB lo pueda encontrar (en el path), para que pueda
se ejecutado del siguiente modo:

>> newton(exp(x)-x*sin(x),0)

ans =

-0.7271

También podría gustarte