Documente Academic
Documente Profesional
Documente Cultură
Comandos B
asicos y Matrices
1.1.
Introducci
on
MATLAB es un lenguaje de alto nivel orientado al desarrollo de calculos cientficos y tecnicos. Integra
calculo, visualizaci
on y programaci
on en un entorno interactivo de facil manejo. Los problemas y las
soluciones se expresan en la notaci
on matematica habitual.
El elemento b
asico de informaci
on es una matriz a la que no hace falta asignar dimensiones con anterioridad. Por tanto, pueden abordarse problemas que requieren una formulacion vectorial o matricial
de un modo m
as f
acil que en un lenguaje tipo FORTRAN o C. Puede realizar una amplia variedad de
graficos en dos y tres dimensiones.
El nombre MATLAB es una abreviatura de Matrix Laboratory.
1.2.
Iniciaci
on a MATLAB
Para entrar en MATLAB, debemos hacer clic dos veces en el icono correspondiente. Para salir, tenemos
dos opciones: (1) en File podemos hacer clic en Exit y (2) podemos teclear quit y pulsar enter.
Una vez que hemos entrado en MATLAB, escribiremos las instrucciones en la ventana de comandos
(Command Window), a la derecha de la pantalla, a partir del smbolo >> (denominado prompt).
En la parte superior izquierda de la pantalla aparece la ventana Current Directory, que muestra
los ficheros del directorio actual y se puede alternar (cambiando la pesta
na inferior) con Workspace,
que contiene informaci
on sobre todas las variables que se han definido en la actual sesion y donde se
pueden ver y modificar las matrices con las que se esta trabajando.
En la parte inferior izquierda tenemos la Command History, que muestra las u
ltimas
ordenes
ejecutadas en la Command Window. Estas ordenes pueden volver a ejecutarse haciendo doble clic
sobre ellas.
Si se quiere salvar en un archivo toda una sesion de trabajo, podemos proceder como sigue:
Iniciamos la sesi
on tecleando:
>> diary nombre.txt
y terminamos la sesi
on tecleando
>>diary off
Automaticamente MATLAB crea un archivo con la denominacion nombre.txt que se encuentra en el
directorio de trabajo. El nombre es opcional, pero un nombre adecuado puede ser poner el mes seguido
de la fecha del da en curso: noviembre15.txt. Si queremos guardar el archivo en un disquete, CD,...,
lo abrimos y en File hacemos clic en Save As para guardarlo en la unidad que deseemos.
MATLAB nos ofrece una ayuda que puede ser de gran utilidad. Si tenemos alguna duda sobre el
funcionamiento concreto de determinada funcion, de la que conocemos su denominacion en MATLAB,
podemos teclear en la ventana de comandos
>> help nombre
y aparece en pantalla la ayuda de MATLAB explicando su funcionamiento.
As, si tenemos alguna duda sobre el funcionamiento de det (funcion determinante), tecleamos
>> help det
Si no fuera suficiente, podemos teclear
>> doc nombre
que nos ofrece una ayuda m
as completa y con ejemplos.
Si no queremos que la ayuda aparezca en la ventana de comandos sino en una ventana especfica,
debemos teclear
>> helpwin nombre
y se abre una ventana con la ayuda.
Tambien podemos buscar la ayuda acudiendo a Help y haciendo clic en MATLAB Help.
1.3.
Operaciones b
asicas y variables
Se puede usar MATLAB como una simple calculadora. Los smbolos que denotan las operaciones suma,
diferencia, producto, cociente y potencia son +, , , / y .
Las operaciones se van realizando por orden de prioridad, primero las potencias, despues las multiplicaciones y divisiones y, finalmente, las sumas y restas. Las operaciones de igual prioridad se llevan a
cabo de izquierda a derecha. Los parentesis son obligatorios para modificar estas prioridades.
Los decimales se denotan con un punto.
Una variable es un nombre simb
olico, formado por hasta 19 dgitos y letras, que identifica una parte
de la memoria y en la que se pueden guardar n
umeros u otros datos.
valor absoluto de x
raz cuadrada de x
exponencial de base e de x
seno de x
coseno de x
tangente de x
cotangente de x
arcoseno de x
arcocoseno de x
arcotangente de x
logaritmo neperiano de x
logaritmo en base 10 de x
resto de la divisi
on entera de m entre n
el n
umero positivo m
as peque
no con que trabaja MATLAB eps =2.2204e-016
redondeo de x hacia +
redondeo de x hacia
redondeo de x hacia 0
redondeo de x hacia el entero mas proximo
short
long
short e
rat
bank
Ejemplos:
>> format short
>> pi
ans =
3.1416
1.4.
Vectores
Si queremos introducir un vector fila v, escribiremos sus componentes entre corchetes separ
andolas
con comas o espacios.
Ejemplo. El vector fila v = (1, 2, 1) se introduce en MATLAB como sigue
>> v=[1 2 -1];
Si no se pone el punto y coma final, al pulsar enter MATLAB muestra en pantalla
v=
1 2 -1
Si se pone el punto y coma, MATLAB guarda en memoria el vector v = (1, 2, 1) pero no lo muestra
en pantalla. MATLAB ejecuta la instruccion en cuestion y no muestra en pantalla el resultado ni los
calculos involucrados.
Es importante tener en cuenta esta caracterstica de MATLAB ya que, si los calculos que debe realizar
MATLAB son numerosos, puede que no nos interese verlos en pantalla.
Si el vector o matriz fila tienen la particularidad de que sus componentes estan igualmente espaciadas,
hay una forma m
as simple de introducirlo. As, el vector v = (1, 3, 5, 7) se puede introducir de la forma
siguiente
>> v=1:2:7;
es decir, se indican, separados por dos puntos, la primera componente, el desfase (que puede ser negativo) de uno al siguiente y el u
ltimo. Cuando el desfase es la unidad se puede omitir. La forma m
as
simple de indicar el vector v = (1, 0, 1, 2, 3) es
>> v=-1:3;
Otra forma de introducir un vector fila con las componentes igualmente espaciadas consiste en indicar
la primera componente, la u
ltima y el n
umero total de componentes.
Ejemplo:
El vector v que tiene 10 componentes igualmente espaciadas siendo 1 la primera y 18 la u
ltima se
indica
>> v=linspace(1, 18, 10);
Si tecleamos
>> w=linspace(18,1,10)
entonces w es el vector con 10 componentes igualmente espaciadas, siendo la primera 18 y la u
ltima
1; es decir, invierte el orden de
>> v=linspace(1,18,10)
Este mismo efecto lo hace la orden
>> w=fliplr(v)
Recuerdese que, si no colocamos al final el punto y coma, aparecera en pantalla una fila de 10 n
umeros
que no son otra cosa que las componentes de v.
>> length(v)
nos da el n
umero de componentes del vector v.
>> sort(v)
Si u y v son vectores,
>> w=[u v] es un nuevo vector
Ejemplo:
>> u=[-1 0 2];v=[3 4 -2 5 1];
>> w=[u v]
w=
-1 0 2 3 4 -2 5 1
Algunas operaciones habituales entre vectores son las siguientes:
>> u+v
>> dot(u,v)
>> cross(u,v)
Operaciones entre un n
umero a y un vector v:
>> a+v
>> a*v
1.5.
Matrices
Para introducir los elementos de una matriz A, escribiremos entre corchetes los elementos de cada fila
separados por un espacio (o por una coma), mientras que las filas se separan con punto y coma.
Ejemplo:
La matriz
A=
2 1 0
3 2 1
1.6.
Pero tambien necesitaremos operaciones como las siguientes: el producto de dos matrices elemento a
elemento, elevar cada elemento de una matriz a un cierto exponente, dividir elemento a elemento una
matriz por otra.
En general, estas operaciones se indicaran anteponiendo un punto al smbolo usado para denotar la
operacion en cuesti
on. En particular:
A.*B
A.^r
A./B
1.7.
a+B
a*B
A/b
1.8.
x + 2y + 2z = 2
Resolver el sistema
3x + y
= 0
x
+ z = 1
Si designamos por A a la matriz de coeficientes, por X a la columna de incognitas y por b a la columna
de los terminos independientes, sabemos que si el determinante de A es no nulo, existe la matriz inversa
A1 y obtenemos que la u
nica soluci
on del sistema es X = A1 b .
MATLAB permite encontrar esta solucion mediante la instruccion A\b:
>> A=[1 2 2;3 1 0;-1 0 1];b=[2;0;1];
>> A\b
ans =
0
0
1
Mas en general, si B es una matriz con un n
umero de filas igual que el n
umero de columnas de A,
A\B nos da la soluci
on del sistema A X = B.
8
Ejemplo:
Resolver los dos sistemas siguientes
2 1 1
x
1
2 1 1
x
1
1 2 1 y = 1 ; 1 2 1 y = 0 .
1 1 2
z
1
1 1 2
z
1
Ambos sistemas tienen la misma matriz de coeficientes, A. Matricialmente, los dos sistemas equivalen
a la igualdad A X = B, donde
x1 x2
1
1
X = y1 y2 y B = 1
0 .
z1 z2
1 1
Podemos resolver los dos sistemas de una vez procediendo como sigue
>> A=[2 1 1;1 2 1;1 1 2]; B=[1 1;1 0;1 -1];
>> A\B
0.25
1
ans = 0.25
0 .
0.25 1
Por otra parte, la instrucci
on B/A nos ofrece la solucion del sistema
X A = B.
Ejemplo:
Resolver el sistema (x y z) A = (1 0 1), siendo A la matriz
1 2
1
1 0 1 .
2 1
1
>> A=[1 2 1;1 0 -1;2 1 1]; b=[1 0 1];
>> b/A
ans = (0.5 0.5 1).
1.9.
Cuando una matriz A se compone de cajas que ya hemos introducido, se puede introducir A de una
manera mas c
omoda como muestra el ejemplo siguiente.
Ejemplo:
Supongamos que ya hemos introducido las matrices:
B=
1
2
!
;C=
1 3
4 1
!
,
entonces la matriz
A=
0
0
2
2
0
0
2
2
0 1 0
0 0 1
1 1 3
2 4 1
10
Captulo 2
Gr
aficos
2.1.
Dibujo de poligonales
Supongamos que se desea dibujar la poligonal de vertices (xi , yi ) con i = 1, .., n. Definimos las matrices
fila x = (x1 , x2 , . . . , xn ) e y = (y1 , y2 , . . . , yn ) que contienen las coordenadas correspondientes y el
comando plot(x,y) dibuja la poligonal.
Si la poligonal es cerrada, el u
ltimo vertice ha de concidir con el primero: (xn , yn ) = (x1 , y1 ).
Ejemplo:
Para dibujar la poligonal cerrada de vertices (0, 0), (2, 1), (1, 3) y (2, 2) tecleamos:
>> x=[0 2 1 -2 0]; y=[0 1 3 2 0];
>> plot(x,y)
y se abre una ventana Figure 1 como la que sigue
2.2.
Gr
afica de una funci
on de una variable
Si se desea obtener la gr
afica de la funcion y = f (x) en el intervalo [a,b], debemos tener presente que
MATLAB dibuja las curvas punto a punto; es decir, calcula los puntos (x, f (x)), para los valores de
x que le indiquemos y representa la poligonal correspondiente. Esta es la razon de haber iniciado el
tema con el dibujo de poligonales. Lo que MATLAB dibuja es una poligonal inscrita a la curva.
11
Por ello, se empieza estableciendo la matriz fila x cuyos elementos son los valores para los que se
computara el valor correspondiente de f (x). Lo usual es tomar puntos igualmente espaciados en el
intervalo [a,b], incluyendo los extremos. Tomando la distancia entre dos valores consecutivos de x
convenientemente peque
na, el aspecto final sera el de una verdadera curva en lugar de una poligonal.
x
Ejemplo: Dibujar la gr
afica de f (x) = cos(x2 ) en el intervalo [2, 4].
3
Para facilitar la comprensi
on, consideramos en primer lugar una poligonal con muy pocos vertices y
despues con un n
umero suficientemente grande para que a la vista se nos muestre como una curva
suave.
a) Tomamos dieciseis valores de x igualmente espaciados entre 2 y 4
>> x=[-2:0.4:4];
>> y=(x/3).*cos(x.^2);
>> plot(x,y)
y resulta
12
Otra forma de conseguir el mismo resultado consiste en usar la orden hold on:
- Si ya tenemos una ventana gr
afica con una curva y queremos dibujar una segunda curva en la misma
ventana, tecleamos
>> hold on
13
y a continuaci
on las
ordenes necesarias para dibujar la segunda curva. En este caso, si no damos otros
argumentos, las dos curvas tendr
an el mismo color.
Si el intervalo donde se quiera dibujar cada curva no es el mismo, se puede conseguir el mismo resultado
de la forma siguiente. Se dibuja primero una de las curvas, se teclea hold on y acto seguido se dibuja
la otra curva.
Ejemplo:
1
Para dibujar f (x) = x sin
en [-1,1] y g(x) = sen(5x) en [0,2]:
x
>> x1=linspace(-1,1,200);
>> y1=x1.*sin(1./x1);
>> plot(x1,y1)
>> hold on
>> x2=0:.05:2; y2=sin(5*x2);
>> plot(x2,y2)
Por el contrario, cuando ya se tiene una ventana grafica abierta y se quiere dibujar una nueva curva
en otra ventana gr
afica, pero sin perder la primera ventana, tecleamos
>> figure
y se abre una otra ventana gr
afica (Figure 2) donde podremos hacer la nueva representacion.
Ejemplo:
sen x
, para x [6, 6]. Se presenta el problema de que para
x
sen x
x = 0 no est
a definida la funci
on, aunque lm
existe y vale 1. Podemos evitar este problema
x0 x
manejando adecuadamente la variable eps.
Si se desea obtener la gr
afica de f (x) =
>> x=-6:0.1:6;
>> t=x+eps;
>> y=sin(t)./t;
>> plot(t,y)
y obtenemos
14
15
Color
amarillo
magenta
rojo
verde
azul
negro
Smbolo
.
Estilo de lnea
lnea de puntos
crculo
mas
estrella
trazo discontinuo
lnea solida
3. Ejes a medida: Si se quiere que la grafica recoja un trozo determinado de la curva elegimos los
intevalos en ambos ejes:
>> axis([xmin xmax ymin ymax])
Para que la escala sea la misma en ambos ejes:
>> axis equal o axis(equal)
Para que la gr
afica sea un cuadrado:
>> axis square
4. Si se quiere que aparezca una rejilla sobre los puntos marcados en los ejes:
>> grid on
o para quitarla:
>> grid off
5. Para dar ttulo a la cabecera del grafico
>> title(lo que se quiera)
2.3.
El comando subplot
subplot(2,2,4)
>> plot(x,sin(4x));title(y=sen(4x))
al final se obtiene
2.4.
Coloreado de polgonos
Ejemplo: Se desea colorear de rojo el recinto que limitan las curvas y = x2 y y = x. Ya que los
puntos de corte de ambas curvas se obtienen para x = 0 y x = 1, procedemos as:
>> x=linspace(0,1,101);
>> y1=sqrt(x);y2=x.^2
>> X=[x fliplr(x)];Y=[y1,fliplr(y2)];
>> fill(X,Y,r)
17
Si se desea escoger un color indicando las coordenadas (en el sistema RGB) se escribe
>>fill(x,y,[r g b])
Los n
umeros r, g y b pertenencen al intervalo [0, 1] y representan las proporciones en que se deben
tomar los colores principales (rojo, verde y azul) para crear el color en cuestion.
2.5.
Si tecleamos
>> ezplot(x.*cos(x),[a b])
obtenemos la gr
afica de f = f (x) sobre el intervalo [a, b].
Esta orden genera de forma muy c
omoda curvas definidas de forma implcita:
18
>> ezplot(f(x,y))
genera la gr
afica de f (x, y) = 0 con x [2, 2] e y [2, 2]. Pone ttulo f (x, y) = 0 a la figura
y a ambos ejes.
Si tecleamos
>> ezplot(f(x,y),[a b])
genera la curva f (x, y) = 0 con x [a, b] e y [a, b].
Si tecleamos
>> ezplot(f(x,y,[xmin xmax ymin ymax])
obtenemos la curva f (x, y) = 0 con x [xmin, xmax] e y [ymin, ymax].
Por ejemplo
>> ezplot(2*(x^2+y^2)^2-25*(x^2-y^2),[-6,6],[-3 3])
genera la gr
afica
La orden
>> ezplot(x,y)
nos genera la curva parametrizada x = x(t), y = y(t) con t [0, 2].
Por ejemplo
>> ezplot(sin(3*t)*cos(t),sin(3*t)*sin(t))
genera la gr
afica
19
La orden
>> ezplot(x,y,[tmin tmax])
nos genera la curva parametrizada x = x(t), y = y(t) con t [tmin, tmax].
La orden hold on se puede aplicar tambien en este caso para incluir nuevas graficas en una figura
previa.
2.6.
Para dibujar una superficie de ecuacion z = f (x, y), se comienza por establecer los intervalos de
variacion de x e y.
Con la orden [x,y]=meshgrid(-2:.1:2;-1:.1:1) MATLAB crea una matriz x con todas sus filas
iguales a -2:.1:2 y una matriz y con todas sus columnas iguales a -1:.1:1; de este modo resultan dos
matrices con la misma dimensi
on.
p
Por ejemplo, si consideramos la funci
on z = |xy|, la orden
>> [x,y]=meshgrid(-1:.5:1,0:.5:1);
produce las matrices
1 .5 0 .5 1
x = 1 .5 0 .5 1 ,
1 .5 0 .5 1
0 0 0 0 0
y = .5 .5 .5 .5 .5
1 1 1 1 1
>> surf(x,y,z)
y obtenemos el gr
afico de la superficie
La orden
>> plot3(x,y,z)
que genera la figura
y la orden orden
>> mesh(x,y,z)
La orden
>> ezplot3(x,y,z)
genera la curva parametrizada x = x(t), y = y(t), z = z(t) con t [0, 2].
Por ejemplo
>> ezplot3(sin(t),cos(2*t),sqrt(t))
nos da la gr
afica
La orden
>> ezplot(x,y,z,[tmin tmax])
nos genera la curva con t [tmintmax].
Por ejemplo
22
2.6.1.
El comando
>> cylinder
Con las
ordenes
>> [x,y,z]=cylinder(5,50);
>> x=1+x;y=2+y;z=2*z;
>> surf(x,y,z)
le pedimos que nos dibuje un cilindro con centro en (1, 2), radio 5, altura 2 y eje OZ tomando
50 puntos.
El resultado es
El comando
>> [x,y,z]=sphere
Si tecleamos
>> [x y z]=sphere;
>> x=-1+3*x;y=3+3*y;z=3*z;
>> surf(x,y,z)
nos representa una esfera con centro en (1, 3, 0) y radio 3.
23
2.6.2.
Curvas de nivel
Supongamos que hemos dibujado una superficie, z = f (x, y), y queremos que en el plano z = 0
aparezcan dibujadas las curvas de nivel.
Si tecleamos
>>hold on
y el comando
>> contour(x,y,z,[c1,c2,c3,...,cn])
aparecen representadas las curvas de nivel f (x, y) = ci , para i = 1, . . . , n.
Ejemplo: Para representar la superficie de ecuacion z = x2 + y 2 con (x, y) [2, 2] [2, 2] y las
curvas de nivel f (x, y) = c, para c = 1, 2, 3.
>> [x,y]=meshgrid(-2:.1:2,-2:.1:2);
>> z=x.^2+y.^2;
>> surf(x,y,z)
>> hold on
>> contour(x,y,z,[1,2,3])
y se obtiene
24
Si solo se buscan las curvas de nivel (no se necesita dibujar la superficie), basta escribir
>> [x,y]=meshgrid(-2:.1:2,-2:.1:2);
>> z=x.^2+y.^2;
>> contour(x,y,z,[1,2,3])
y si se quiere que aparezcan etiquetas sobre cada curva de nivel que reflejen el valor de la constante c,
se usa la funci
on clavel
>> clabel(contour(x,y,z,[1,2,3]))
resultando
Cuando necesitamos representar una superficie y deseamos que aparezcan las curvas de nivel, es muy
comodo usar la orden surfc(x,y,z).
25
Captulo 3
Programaci
on en MATLAB
3.1.
Archivos-M
Los programas en MATLAB se generan mediante archivos con extension .m, que llamaremos archivosM. Las dos modalidades que existen se denominan archivos de guion (o de instrucciones) y archivos
de funcion.
En todos los casos, para generar un archivo -M se debera ir a File New M-File tras lo que
aparece una ventana (Editor-Untitled) donde podemos escribir el programa correspondiente. Una
vez terminado, vamos a File de dicha ventana y haciendo clic en Save As, podemos guardar el archivo
.m con el nombre que le hayamos dado (nombre.m).
Un archivo de guion (script) consiste en una serie de instrucciones a ejecutar de forma interactiva.
Puede ocurrir que en estos se nos pida una serie de valores (inputs).
Por ejemplo para resolver la ecuaci
on de segundo grado ax2 + bx + c = 0 podemos crear el archivo
raices.m siguiente
>> % ra
ces de ax2 + bx + c = 0
determina
media y
desviaci
on t
pica de una fila
de datos $x$
>> n=length(x);
>> med=sum(x)/n;
>> dest=sqrt(sum((x-med).^2)/n);
Puede probarse introduciendo [med dest]=estad(1:20) o [med dest]=estad(rand(100,1)).
Ejemplo 2:
Creamos un archivo de funci
on con el nombre sombrero para a
nadir al listado de funciones que ya
posee MATLAB la funci
on f definida por
sen x
f (x) =
, si x 6= 0, y f (0) = 1
x
>> function y=sombrero(x)
>> % sombrero determina completamente la funci
on
f anterior
>> x=x+eps;
>> y=sin(x)./x;
Una vez creado el archivo sombrero.m, cuando tecleamos sombrero(x), obtenemos el valor de f (x),
si x es un escalar. Si x es un vector o una matriz, obtenemos un vector o una matriz cuyos elementos
son sombrero(x).
Es necesario tener en cuenta que las variables del archivo de funcion son variables locales, no forman
parte del espacio de trabajo general. Cuando se llama a una funcion, MATLAB crea un espacio de
trabajo local para la funci
on y las
ordenes en la funcion no se pueden referir a las del espacio global
a menos que se den como variables de entrada; las variables que no son de salida se borran cuando
termina la ejecuci
on de la funci
on. Puede forzarse un retorno anticipado con la orden return.
El nombre de todo archivo de funci
on debe coincidir con el nombre de la funcion y tiene extensi
on .m
(es decir nombre.m). Recordamos que debe empezar con una letra y, para evitar confusiones, debemos
asegurarnos que no coincide con el nombre de alguna de las funciones de que dispone MATLAB.
Dentro de un archivo de funci
on se pueden crear subfunciones; estas no seran visibles fuera del archivo
de funcion al que pertenecen.
27
3.2.
Operadores de relaci
on
menor que
menor o igual que
mayor que
mayor o igual que
igual a
no igual a
Si se usa uno de estos operadores para comparar dos matrices (o vectores), la comparacion se hace
elemento a elemento, produciendo una matriz con 1 en los lugares que verifican la relacion y 0 en
el resto. Si, por el contrario, se usan para comparar un escalar con un vector o matriz entonces se
compara el escalar con cada elemento del vector o matriz.
Como ejemplo, se puede practicar con
>> A=[1 3 0;0 1 0;1 2 0];B=[1 3 0;0 0 1;0 1 0];
para obtener
>> B>=A, B==A, A=B
3.3.
Operadores l
ogicos
1 0
1 1
28
0 1
0 1
Como se puede ver & coloca un 1 en los lugares donde los elementos correspodientes de ambas matrices
son no nulos y 0 donde al menos uno es 0; | coloca un 1 en los lugares donde alguno de los elementos
correspodientes en ambas matrices es no nulo y 0 donde ambos son 0. Por u
ltimo, crea una matriz
con 1 en los lugares donde los elementos de la matriz a la que se aplica son nulos y 0 en los restantes.
3.3.1.
Funciones l
ogicas
find
Esta funcion determina cu
ales son los ndices de una matriz que verifican determinada expresion l
ogica.
Es muy u
til para crear filtros o matrices de ndices.
Ejemplo:
Sustituir en una matriz m
agica de orden tres los elementos mayores que 5 por 10.
>> A=magic(3)
8 1 6
ans 3 5 7
4 9 2
>> i=find(A>5);
>> A(i)=10
>> A
ans
10 1 10
3 5 10
4 10 2
29
3.4.
Bifurcaciones y bucles
3.4.1.
En su version m
as simple el comando if se usa de la forma siguiente:
>> if condici
on
sentencias
>> end
MATLAB eval
ua the condici
on y, si es cierta, ejecuta las sentencias.
En caso de varios if anidados, cada uno debe finalizar con su correspondiente end.
En la version m
ultiple:
>> if condici
on1
sentencias1
>> elseif condici
on2
sentencias2
....
>> else % esta es la opci
on por defecto, cuando no se cumple ninguna de las condiciones anteriores
sentencias
>> end
Ejemplo:
Supongamos que queremos obtener las races de una ecuacion de segundo grado ax2 + bx + c = 0.
Podemos crear un archivo de instrucciones que nos pida los coeficientes a, b y c y determine las races,
una vez que haya comprobado que son reales. Le daremos el nombre raices.m.
>> %raices determina las ra
ces reales de
ax2 + bx + c = 0 y nos pide los coeficientes
>> a=input(coeficiente a=);
>> b=input(coeficiente b=);
>> c=input(t
ermino independiente c=);
30
>> Delta=b^2-4*a*c;
>> if Delta<0
disp(no hay ra
ces reales)
>> end
>> [(-b+sqrt(Delta))/2*a,(-b-sqrt(Delta))/2*a]
Para entender c
omo funcionan elseif y else, vamos a considerar el mismo ejemplo anterior pero
definiendo una funci
on con distintas salidas seg
un sea el valor del discriminante de la ecuacion:
>> function [x1,x2]=cuadratica(a,b,c)
>> dis=b*b-4*a*c;
>> if dis>0
x1=(-b+sqrt(dis))/(2*a); x2=(-b-sqrt(dis))/(2*a);
disp(dos ra
ces reales)
>> elseif dis==0
x1=-b/(2*a);x2=x1;
disp(una s
ola raiz doble)
>> else
x1=(-b+sqrt(dis))/(2*a); x2=(-b-sqrt(dis))/(2*a);
disp(no hay ra
ces reales)
>> end
elseif eval
ua la expresi
on l
ogica que aparece en su misma lnea si if o los anteriores elseif resultan
falsos. Si dicha expresi
on l
ogica es verdadera se ejecutan las instrucciones siguientes hasta el pr
oximo
elseif o else.
Por el contrario, else no lleva expresi
on logica a evaluar y MATLAB realiza las instrucciones siguientes
hasta end si las expresiones l
ogicas de if y los elseif anteriores son falsas.
3.4.2.
Sentencia for
1
.
i+j1
3.4.3.
Sentencia while
Su sintaxis es la siguiente:
>> while expresi
on
instrucciones
>> end
Mientras que la expresi
on que controla while sea verdadera, se ejecutan todas las instrucciones comprendidas entre while y end.
Ejemplo:
Si queremos calcular el menor n
umero natural n tal que n! tiene 100 dgitos, ordenamos
>> n=1;
>> while prod(1:n)<1e100
n=n+1;
32
>>end
>> n;
3.4.4.
Sentencia break
Esta instrucci
on se usa para terminar un for o un while antes de que la ejecucion sea completa. Si
este no es el caso, se usar
a el comando return.
Ejemplo:
Supongamos que, a partir de k = 1, se desea determinar un vector w con un n
umero de componentes
2
menor o igual que 10, no negativas y de la forma 24 k .
>> k=1;
>> w(1)=24-k^2;
>> for k=2:10
a=24-k^2;
>> if a>=0
w(k)=a;
>> else
>> break
>> end
>> end
>> w
El programa anterior determina el vector w = (23, 20, 15, 8). El bucle for se termina cuando k = 5 ya
que w(5) = 1, y la expresi
on l
ogica del if, a>=0 es falsa por lo que MATLAB ejecuta la instrucci
on
break que termina el for, aunque no se ha llegado al final (k = 10).
3.4.5.
Sentencia continue
Este comando pasa el control a la siguiente iteracion en un for o un while, sin realizar las instrucciones
que siguen antes de end.
Ejemplo:
Determinamos un vector y cuyas componentes sean de la forma
x = 0:
>> k=0;
>> for x=-1:.2:1
>> if x==0
>> continue
33
senx
, para x = 1 : .1 : 1, exceptuando
x
>> end
>> k=k+1;
>> y(k)=sin(x)/x;
>> end
>> y
34
Captulo 4
C
alculo Simb
olico
4.1.
Variables simb
olicas
En los captulos anteriores hemos visto como se puede usar MATLAB como una calculadora potente
que act
ua sobre n
umeros para obtener tambien resultados numericos. Vamos a ver en este captulo
que tambien podemos pedirle a MATLAB que opere con expresiones matematicas en lugar de con
n
umeros, proceso que denominamos matematica simbolica.
El toolbox de matem
atica simb
olica es una coleccion de herramientas (funciones) para calcular lmites,
derivar, calcular primitivas, resolver ecuaciones, optimizar, calcular integrales definidas, operar con
matrices y determinantes simb
olicos, resolver sistemas lineales y un largo etcetera. Esta herramienta
esta construida sobre el paquete de software Maple.
Las variables simb
olicas se crean con la instruccion syms. Una vez declaradas las variables simb
olicas,
se pueden definir funciones simb
olicas. Por ejemplo
>> syms x a % Hemos declarado estas dos variables como simbolicas
>> f=x*sin(x/a);
Notese que en el c
alculo simb
olico se prescinde del punto que se antepona con algunas operaciones
para indicar que dicha operaci
on se haca coordenada a coordenada. Si en alg
un momento dudamos
si una funcion es de datos o simb
olica se puede recurrir a la instruccion class. Si tecleamos
>> class(x)
y pulsamos enter, obtenemos
ans
sym
4.2.
Derivaci
on
4.3.
C
alculo de primitivas
>> syms x
>> f=log(sqrt(x));
>> F=int(f)
Para funciones de varias variables,
>> syms x y
>> f=cos(x/y)/y^2;
>> F=int(f)
nos devuelve
sin(x/y)/y
cuya derivada parcial con respecto a x es f , mientras que
>> F=int(f,y)
nos devuelve
-1/x*sin(x/y)
4.4.
C
alculo de integrales definidas
Z
Si queremos calcular
1p
1 x2 , dx
>> syms x
>> f=sqrt(1-x^2);
>> I=int(f,0,1)
Tambien se pueden calcular integrales impropias:
Z +
El valor de
ex dx se obtiene tecleando
1
>> int(exp(-x),1,Inf)
mientras que
>> int(log(x),0,1)
Z 1
nos da el valor de
ln(x) dx.
0
La funcion rsums permite evaluar, de forma interactiva, las sumas de Riemann de una integral definida.
Su sintaxis es la siguiente: rsums(f,[a,b]).
Z 1
2
Ejemplo: Si queremos evaluar
ex dx tecleamos
0
>> rsums(exp(-x^2),[0,1])
y, tras pulsar enter, obtenemos la ventana grafica
37
4.5.
C
alculo de lmites
h0
>> f=(sin(x+h)-sin(x))/h;
>> a=limit(f,h,0)
Ejemplo 2:
Calcular lm
x0+
1 + e1/x
1 e1/x
>> syms x
>> f=(1+exp(1/x))/(1-exp(1/x));
>> limit(f,x,0,right)
Obtengase el otro lmite lateral y concl
uyase si existe o no el lmite ordinario.
Ejemplo 3:
1 x
Calcular lm
1+
x+
x
>> syms x
>> f=(1+(1/x))^x;
>> limit(f,x,Inf)
La orden int es m
as flexible que las diff y limit en el sentido de que puede introducirse la funci
on
directamente mediante una cadena de caracteres.
38
4.6.
El polinomio de Taylor
La grafica de la funci
on aparece en trazo continuo de color azul. Pulsando en el boton N se puede ir
cambiando el orden del polinomio.
39
4.7.
Resoluci
on de ecuaciones
Para encontrar las soluciones de una ecuacion ( o sistema) algebraica, MATLAB dispone de la funci
on
solve.
>> solve(a*x^2+b*x+c) calcula las soluciones de la ecuacion de segundo grado.
>> solve(a*x^2+b*x+c,b) resuelve la ecuacion en b.
Tambien resuelve ecuaciones simb
olicas conteniendo el signo igual:
>> solve(tan(x)=x+1)
o para resolver un sistema
>> [x,y]=solve(x+2*y=1,x^2-y^2=2)
con resultado
x=
1/3 2/3 71/2
1/3 + 2/3 71/2
y=
2/3 + 1/3 71/2
2/3 1/3 71/2
Para ecuaciones en general, MATLAB dispone de la funcion fzero que puede usarse de dos formas
diferentes.
(a) Partiendo de un intervalo [a,b] que contenga a la raz que buscamos:
Por ejemplo para encontrar en el intervalo [/6, ] una raz de la ecuacion sen x x2 = 0.
Sea f (x) = sen x x2 . Como f (/6) = 2 /36 1/2 = 0.2258 < 0 y f () = 2 > 0, el Teorema
de Bolzano nos asegura que hay una raz de la ecuacion en el intervalo en cuestion. Para encontrarla,
procedemos como sigue
>> fzero(sin(x)-x^2,[pi/6,pi])
ans
0.8767.
(b) Partiendo de un valor cercano a la raiz que buscamos:
Para determinar una raz de la ecuaci
on sen x = cos(2x) con el dato x0 = .
>> fzero(sin(x)-cos(2*x),pi)
ans =
2.6180
o con el dato x0 = /2
40
>> fzero(sin(x)-cos(2*x),pi/2)
ans =
0.5236
Para polinomios puede utilizarse la orden roots cuyo argumento es un vector que contiene los coeficientes del polinomio ordenados en potencias decrecientes.
Por ejemplo, para obtener las races del polinomio p(x) = x3 + x + 1 tecleamos
>> roots([1 0 1 1])
y obtenemos
ans =
0.3412 + 1.1615i
0.3412 - 1.1615i
-0.6823
4.8.
Optimizaci
on de funciones de una variable
Para calcular el valor de x donde se produce el mnimo de la funcion y = f (x) en el intervalo [a, b]
podemos usar la orden fminbnd.
Por ejemplo, para determinar el mnimo de f (x) = ex (cos x sen x) en el intervalo [0, ], tecleamos
>> xmin=fminbnd(exp(-x)*(cos(x)-sin(x)),0,pi)
para obtener
xmin =
1.5708
El punto donde alcanza el m
aximo la funcion y = f (x) en el intervalo [a, b] es el mismo donde alcanza
el mnimo la funci
on y = f (x) en el intervalo [a, b].
>> xmax=fminbnd(exp(-x)*(-cos(x)+sin(x)),0,pi)
xmax =
0
Si queremos conocer el valor mnimo y el valor maximo de la funcion en el intervalo [a, b] procedemos
as
>> ymin=subs(f,xmin);ymax=subs(f,xmax);[ymin ymax]
para obtener
ans =
-0.2079
1.0000
41