0% encontró este documento útil (0 votos)
88 vistas55 páginas

Matlab

Este manual presenta una introducción a Matlab enfocada en conceptos y comandos básicos. Explica comandos útiles como help, lookfor y diary para obtener ayuda e información sobre Matlab. También cubre operaciones elementales, vectores, matrices, gráficos y funciones. El objetivo es servir como guía sencilla para usuarios nuevos en Matlab.

Cargado por

Francisco Muñoz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
88 vistas55 páginas

Matlab

Este manual presenta una introducción a Matlab enfocada en conceptos y comandos básicos. Explica comandos útiles como help, lookfor y diary para obtener ayuda e información sobre Matlab. También cubre operaciones elementales, vectores, matrices, gráficos y funciones. El objetivo es servir como guía sencilla para usuarios nuevos en Matlab.

Cargado por

Francisco Muñoz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 55

Manual de introducción a Matlab

Jorge Macı́as Sánchez


Departamento de Análisis Matemático
Universidad de Málaga
Imprime: Centro Ocupacional “El Papel”
C/Horacio Lengo, 5 29006-Málaga
Tlfn.: 952 33 37 38
Índice general

Prólogo 1

1. Primeras nociones básicas 3


1.1. Unos primeros comandos útiles . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Operaciones elementales . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3. Operadores de relación . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4. Operadores lógicos y valores booleanos . . . . . . . . . . . . . . . . . . 6
1.5. Bucles: los comandos for y while . . . . . . . . . . . . . . . . . . . . . 6
1.6. Ejecución condicionada: el comando if . . . . . . . . . . . . . . . . . . 6
1.7. Impresión en pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.8. Formatos de salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.9. Valores de algunas constantes . . . . . . . . . . . . . . . . . . . . . . . 8
1.10. Funciones con Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.10.1. Funciones internas . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.10.2. Funciones definidas por el usuario . . . . . . . . . . . . . . . . . 9
1.11. Operaciones con polinomios . . . . . . . . . . . . . . . . . . . . . . . . 11

2. Operaciones con vectores y matrices 13


2.1. Construcción de vectores y matrices . . . . . . . . . . . . . . . . . . . . 13
2.2. Manipulación de matrices y arrays . . . . . . . . . . . . . . . . . . . . . 14
2.3. Operaciones con vectores . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3.1. Otros operadores vectoriales . . . . . . . . . . . . . . . . . . . . 18
2.4. Operaciones con matrices . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5. Algunos comandos útiles . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6. Resolución de sistemas lineales . . . . . . . . . . . . . . . . . . . . . . . 21

3. Representaciones gráficas 23
3.1. Gráficas de funciones discretas . . . . . . . . . . . . . . . . . . . . . . . 23
3.2. Gráficas de funciones analı́ticas . . . . . . . . . . . . . . . . . . . . . . 23
3.3. Algunas opciones gráficas . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.4. Gráficos 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4.1. Curvas en tres dimensiones . . . . . . . . . . . . . . . . . . . . . 27
3.4.2. Superficies 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
IV ÍNDICE GENERAL

4. Cálculo simbólico 31
4.1. Variables simbólicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2. Funciones simbólicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3. Evaluación de funciones simbólicas . . . . . . . . . . . . . . . . . . . . 34
4.4. Resolución de ecuaciones simbólicas . . . . . . . . . . . . . . . . . . . . 34
4.5. Representación gráfica de funciones simbólicas . . . . . . . . . . . . . . 36
4.6. Funciones simbólicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5. Ajuste de curvas e interpolación 39


5.1. Ajuste de curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2. Interpolación 1D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3. Interpolación 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

6. Programación en Matlab 47
6.1. Prealocación de memoria en matrices y vectores . . . . . . . . . . . . . 47

Bibliografı́a 48
Prólogo.

Este manual tiene como único objetivo el de servir de ayuda a toda aquella persona
que desee llevar a cabo su primera aproximación a Matlab, pretendiendo, ante todo,
ser una guı́a sencilla y concisa a este programa de cálculo. Se definen las funciones
y comandos básicos Matlab, y se le proporciona al lector las herramientas básicas
para la realización de programas sencillos y la representación gráfica de las soluciones
obtenidas.
Este texto surge de la necesidad de proporcionarles a los alumnos universitarios de
primer curso de carreras técnicas o cientı́ficas que se enfrentan a una primera asignatura
de métodos numéricos en las que las prácticas en ordenador se realizan con Matlab, de
un manual de referencia sencillo, breve y de carácter muy básico. Una vez que se tiene
ya un conocimiento de mı́nimos sobre este sofware pueden consultarse otros manuales
más completos u otros textos de introducción a Matlab como los que se dan en la
bibliografı́a que se acompaña.

Nota: se trata de un texto en fase de elaboración.

Málaga, 19 de Febrero de 2002.


2 Prólogo
Capı́tulo 1

Primeras nociones básicas

En este capı́tulo haremos un breve repaso a los comandos y operadores básicos Mat-
lab que nos permitan realizar una primera utilización de este paquete informático a un
nivel de iniciación. Veremos cual es la sintaxis esencial para estos primeros comandos
e instrucciones, sin pretender exponer todas sus amplias potencialidades.

1.1. Unos primeros comandos útiles


Damos en primer lugar algunos comandos que nos pueden resultar de gran utilidad
en nuestro manejo de Matlab ya que nos permitirán obtener información “en lı́nea”
acerca de la sintaxis de un determinado comando o encontrar comandos de los cuales
desconocemos su nombre, salvar/recuperar datos, etc. Estos comandos nos serán muy
útiles desde nuestro primer uso de Matlab, sea cual sea el próposito para el cual
vamos a utilizar este programa, es por ello que aparecen en primer lugar.

help
Si conocemos el comando que debemos utilizar y queremos tener más información
acerca de él o su sintaxis haremos uso del comando help, por ejemplo,
>> help det
Este comando también nos puede dar información sobre un tema más general, por
ejemplo,
>> help elfun
para obtener un listado de las funciones matemáticas elementales.
Por último, basta hacer simplemente help para obtener un listado de todos los
temas generales sobre los que Matlab nos proporciona ayuda en lı́nea.

lookfor
Cuando no sabemos cual es el nombre del comando que queremos utilizar podemos
hacer una búsqueda mediante el comando lookfor dando una palabra clave que rela-
cionada con la operación que queremos que el comando Matlab que estamos buscando
4 Primeras nociones básicas

ejecute. La búsqueda se lleva a cabo entre todas las primeras lı́neas de los temas de
ayuda, no siendo por tanto necesario que la palabra clave sea un comando Matlab,
por ejemplo,
>> lookfor eigenvalue

diary
Si queremos poder revisar los resultados de una ejecución o guardar los comandos
de una sesión de trabajo podemos hacer uso del comando diary. Para guadar los datos
en el fichero sesion1 haremos,
>> diary sesion1
cuando queramos concluir la salvaguarda de datos escribiremos diary off, pudiendo
continuar nuestra sesión Matlab o guardar las posteriores salidas en pantalla en un
nuevo fichero.

who y otros
Para saber, en cualquier momento de nuestra sesión de trabajo, cuales son las
variables que hemos definidos hasta ese instante teclearemos who. Si se quiere obtener
una información más detallada sobre estas variables (nombre, dimensiones, espacio
ocupado en memoria y tipo -real, compleja, simbólica, cadena de caracteres, . . . -)
haremos whos.
Para borrar todas o alguna de las variables definidas se utilizará el comando clear.

Otra cuestión importante es que Matlab distingue entre mayúsculas y minúsculas,


por tanto los nombres aux, Aux o AUX corresponden a tres variables distintas, ası́ se
tendrı́a:

>> aux = 24
aux =
24
>> new = Aux - 3
??? Undefined function or variable ’Aux’.
>> new = aux - 3
new =
21

También podemos utilizar comandos unix más usuales desde la ventana Matlab,
como por ejemplo, ls, cd, pwd entre otros.
Por último es útil saber que podemos movernos hacia atrás y hacia adelante sobre
todos los comandos e intrucciones ya introduciadas mediante la teclas de flecha hacia
arriba “↑” y flecha hacia abajo “↓” del teclado y mover el cursor a izquierda y derecha
sobre los caracteres de la instrucción en la lı́nea de comandos con las correspondientes
teclas de flecha a izquierda “←” y flecha a derecha “→”.
1.2 Operaciones elementales 5

save y load
Si queremos guardar los resultados obtenidos tras una ejecución de una o más
variables utilizaremos el comando save, el cual creará un fichero binario (no de texto),
salvo que añadamos la opción -ascii.
>> save fichdatos x y z
guarda en el fichero fichdatos.mat el valor de las variables x, y, z.
La opcion -append nos permite añadir nuevas variables a un fichero ya existente.
Para recuperar los valores de las variables guardadas en un fichero .mat utilizaremos
el comando load,

>> load fichdatos


>> load fichdatos z

este último lı́nea de comando recupera solamente la variable z del fichero de datos
fichdatos.

1.2. Operaciones elementales


Las operaciones elementales en Matlab vienen dada por los sı́mbolos usuales:

+ suma,
− resta,
∗ multiplicación,
/ división,
ˆ eleva a la potencia dada.

1.3. Operadores de relación


En el lenguaje de programación Matlab los operadores de relación vienen dados
por siguientes sı́mbolos:

== igualdad,
<= menor o igual que,
>= mayor o igual que,
∼= distinto que,
< menor que,
> mayor que.
La caracterı́stica diferencial de Matlab respecto a otros lenguajes de programación
reside en el hecho de que estos operadores de relación pueden aplicarse también a
matrices y vectores, realizándose la comparación elemento a elemento y obteniéndose
como resultado una matriz de ceros y unos.
6 Primeras nociones básicas

1.4. Operadores lógicos y valores booleanos


Los operadores lógicos en Matlab vienen dados por,
& operador y (verdadero si las dos proposiciones son ciertas)
∼ operador no (verdadero si la proposición es falsa)
| operador o (verdadero si alguna de las dos proposiciones es verdadera)

Los valores booleanos son 1 para verdadero y 0 para falso.

1.5. Bucles: los comandos for y while


Para realizar la ejecución de un determinado grupo de órdenes un número fijo y
predeterminado de veces se utiliza el comando for.

for i = 1:nmax for k = 2*n:-1:n


... ...
end end

Cuando las operaciones dentro del bucle deben realizarse mientras se verifique una
determinada condición que depende de valores que se obtienen dentro del propio bucle,
entonces debemos hacer uso del comando while:

while nstep <= nmax while (err > eps1) | (rel > eps2)
... ...
end end

Para salir de cualquiera de estos bucles se utiliza el comando break.

1.6. Ejecución condicionada: el comando if


Cuando queremos realizar una serie de comandos sólo cuando se verifica una cierta
condición se utiliza el comando if y de forma más general la estructura if-else-end.

if nstep <= nmax


...
end

if disc == 0
disp(’Una raiz real doble’)
elseif disc > 0
disp(’Dos raices reales distintas’)
else
disp(’Dos raices complejas conjugadas’)
end
1.7 Impresión en pantalla 7

1.7. Impresión en pantalla


La forma más sencilla de imprimir un mensaje en pantalla es mediante el comando
disp que acabamos de utilizar en la sección anterior. Este comando también permite
sacar por pantalla el valor de la variable indicada, por ejemplo,

>> disp(a0)
1
>> disp([a0,b0,alpha])
1.0000 2.0000 1.6543

Por su parte el comando fprintf nos va a permitir llevar a cabo la impresión


de forma conjunta de texto y valores de variables, lo cual será de gran utilidad para
presentar la información que nos proporciona un programa:

>> fprintf(’Una raiz de f en [%d,%d] es: %d\n\n’ ,a0,b0,alpha)


Una raiz de f en [1,2] es: 1.654300e+00

En este caso el formato de impresión viene dado por %d. Los diferentes formatos vienen
determinados por una de las letras d, i, o, u, x, X, f, e, E, g, G, c, s, ası́,
por ejemplo, %6.2f produce un formato con 5 cifras más la coma decimal, con dos cifras
decimales. En todo caso los formatos en Matlab no tienen la rigidez que, por ejemplo,
en Fortran, ya que en el supuesto de que el valor a imprimir no se ajuste al formato
dado se imprimirá igualmente, aunque quizás no en la forma deseada.
Los caracteres \n, \r, \t, \b, \f producen un cambio de renglón, un retorno de
carro, una tabulación, un retroceso (backspace) y un salto de página, respectivamente.
Para ver más claramente las diferencias entre cada una de estas opciones sustituirlas
en el ejemplo anterior y observar el resultado.
De forma más general el comando fprintf escribe datos formateados en un fichero.
Ası́, por ejemplo, si queremos crear un fichero de texto que contenga una tabla de la
función exponencial entre 0 y 1 haremos:

>> x = 0:.1:1; y = [x; exp(x)];


>> fid = fopen(’exp.txt’,’w’);
>> fprintf(fid,’%6.2f %12.8f\n’,y);
>> fclose(fid)

Este fichero contendrá:

0.00 1.00000000
0.10 1.10517092
.....
1.00 2.71828183

Recuérdese que para obtener mayor información sobre cualquiera de estos comandos
basta hacer help comando.
8 Primeras nociones básicas

1.8. Formatos de salida


Todos los cálculos en Matlab se hacen en doble precisión. El comando format se
usa para cambiar entre los distintos formatos de salida.

Sintaxis Value Ejemplo


format Igual que format short 1.3333
format short Punto fijo escalado con 5 dı́gitos 1.3333
format long Punto fijo escalado con 15 dı́gitos 1.33333333333333
format short e Coma flotante con 5 dı́gitos 1.3333e+00
format long e Coma flotante con 16 dı́gitos 1.333333333333333e+00
format short g Mejor entre los dos short 1.3333
format long g Mejor entre los dos long 1.33333333333333
format hex Formato hexagesimal 3ff5555555555555
format + Signo +
format bank Formato punto fijo con 2 decimales 1.33
format rat Aproximación mediante una fracción 4/3

Cuadro 1.1: Comando format

Espaciado
format compact suprime las lı́neas extra,
format loose vuelve a insertar lı́neas extra.

1.9. Valores de algunas constantes


pi número π

i,j unidad imaginaria, i = −1
eps unidad de redondeo
realmax el mayor número en coma flotante (representable en el ordenador dado)
realmin el menor número positivo en coma flotante (idem)
Inf, inf infinito máquina
NaN, nan indeterminación

Ejemplos

>> pi >> i
ans = 3.1416 ans = 0 + 1.0000i
>> format long >> j
>> pi ans = 0 + 1.0000i
ans = 3.14159265358979

>> realmax >> realmin


ans = 1.7977e+308 ans = 2.2251e-308
1.10 Funciones con Matlab 9

1.10. Funciones con Matlab


1.10.1. Funciones internas
Matlab posee un gran número de funciones implementadas a las que basta llamar
mediante el nombre asignado a dicha función junto con el parámetro o parámetros
necesarios. Damos a continuación una lista de alguna de estas funciones. Para obtener
un listado completo de las funciones elementales disponibles hacer help elfun en la
lı́nea de comandos.

sin(x) seno de x,
cos(x) coseno de x,
tan(x) tangente de x,
asin(x) arcoseno de x,
log(x) logaritmo en base e de x,
log10(x) logaritmo en base 10 de x,
exp(x) exponencial de x,
sqrt(x) raı́z cuadrada de x,
abs(x) valor absoluto de x,
sinh(x) coseno hiperbólico de x,
cosh(x) seno hiperbólico de x,
round(x) redondea x a un entero,
fix(x) corta x a un entero,
floor(x) toma el entero más cercano a x por defecto,
ceil(x) toma el entero más cercano a x por exceso.

1.10.2. Funciones definidas por el usuario


Matlab permite la definición de funciones por parte del usuario de forma sencilla,
por ejemplo, si queremos definir la función f (x) = x3 − x + 5 habrá que editar un
fichero Matlab con sufijo .m (a estos ficheros les llamaremos m-ficheros) como el que
se muestra a continuación,

function y=f1(x)
y=x^3-x+5;

Esta función puede ser llamarda por otro programa o función Matlab, o ser uti-
lizada directamente desde la lı́nea de comando. Para evaluar esta función en un punto
podemos hacer
>> y0=f1(5.4);
o bien
>> y0=feval(’f1’,5.4);
Para obtener el cero de f1 más cercano a 5,4 haremos
10 Primeras nociones básicas

>> alpha=fzero(’f1’,5.4);
y para encontrar un cero en un cierto intervalo
>> raiz=fzero(’f1’,[-3,0]);

También podı́amos haber introducido esta función como una función “en lı́nea”
mediante el comando
>> f1 = inline(’x^3-x+5’);
En el caso de introducir la función como una función en lı́nea no tendremos que
poner comillas en la llamada de la función feval ni fzero, es decir, en tal caso es-
cribiremos, por ejemplo, >> raiz=fzero(f1,[-3,0]).
Observemos que la función f1 se ha definido de forma que sólo es aplicable a es-
calares, pero no a vectores o matrices (lo cual constituye una de las grandes potencia-
lidades de Matlab). Para comprobar la afirmación anterior hagamos,

>> x = 0:0.1:1;
>> f1(x) (o bien >> y0=feval(f1,x))
??? Error using ==> inline/subsref
Error in inline expression ==> x^3-x+5
??? Error using ==> ^
Matrix must be square.

Para poder evaluar f1 en vectores o matrices habrá que utilizar en su definición las
operaciones con arrays (dot-operations) que trataremos en el capı́tulo siguiente, pero
de las cuales adelantaremos aquı́ su uso. Ası́, si hacemos,

>> f1 = inline(’x.^3-x+5’);
>> y0=feval(f1,x)

obtendremos los 11 valores que toma la función f1 en los puntos dados por las coorde-
nadas del vector x.
Si queremos definir mediante Matlab una función dada a trozos, como por ejemplo
la función definida por

 x+1
 x≤0
f (x) = 1 − (1/8) x2(3 − x) 0 ≤ x ≤ 2

1/2 x≥2

debemos hacerlo mediante la siguiente sintaxis en un m-fichero,

function y = f(x)
ym = 1.0 - 0.125*x.^2.*(3.0-x);
y1 = (x+1).*(x <= 0);
y2 = ( (x <= 2) - (x < 0) ).*ym;
y3 = 0.5*(x > 2);
y = y1 + y2 + y3;
1.11 Operaciones con polinomios 11

donde, de nuevo, hemos utilizado “operaciones-array”.


Por último una función puede tener uno o varios parámetros de entrada y/o salida.
Mostraremos como ejemplo una función que calcula la media y la desviación estándar
(que serán los valores de salida) de un conjunto de datos que se introducen mediante
el vector x, por ejemplo, x = [ 1 3 5 6 3.4 5.6 3 2 2 ], que será la variable de
entrada.

function [media,dstand] = stad(x)


n = length(x);
media = sum(x) / n;
dstand = sqrt(sum((x - media).^2)/n);

Debe quedarnos claro que, en este ejemplo, es imprescindible la utilizacion de la ope-


ración-array .^2.

1.11. Operaciones con polinomios


Para definir un polinomio en Matlab lo que haremos será dar un vector con sus
coeficientes, ası́ p(x) = x4 − 2x3 + 3x + 4 se introduce como:

>> p=[1 0 -2 3 4]
p = 1 0 -2 3 4

Para calcular las raı́ces de este polinomio haremos

>> r = roots(p)
r = 1.2428 + 1.0715i
1.2428 - 1.0715i
-1.4856
-1.0000

Conocidas las raı́ces podemos reconstruir el polinomio mediante el comando poly,

>> q = poly(r)
q = 1.0000 0.0000 -2.0000 3.0000 4.0000

La multiplicación de polinomios se lleva a cabo mediante el comando conv

>> p = [1 -2 3 4]; q = [1 2 1 4]
>> s = conv(p,q)
s = 1 0 0 12 3 16 16

La división de polinomios se realiza mediante el comando deconv

>> [q,r] = deconv(s,p)


q = 1 2 1 4
r = 0 0 0 0 0 0 0
12 Primeras nociones básicas

Matlab no realiza la suma/resta de polinomios de manera especı́fica para poli-


nomios, ya que esta operación se realiza como una simple suma/resta de vectores. Por
tanto, la única condición que debe verificarse es que los vectores (y consecuentemente
los polinomios) tengan igual dimensión (grado). Esto supone un inconveniente a la hora
de realizar la suma de polinomios arbitrarios ası́, por ejemplo, si hacemos

>> ps = p + s
??? Error using ==> +
Matrix dimensions must agree.

Ası́ pues, para poder sumar estos dos polinomios, habrá que escribir:

>> ps = [0 0 0 p] + s
ps = 1 0 0 13 1 19 20

Por tanto, para realizar esta la suma de polinomios cualesquiera de forma completa-
mente automática habrá que escribir un programa Matlab que lleve a cabo esta tarea.
Sin embargo, todavı́a no estamos preparados para escribir este programa.

Dada su especial simplicidad la derivación de polinomios se realiza mediante un


comando particular, polyder

>> dps = polyder(ps)


dps = 6 0 0 39 2 19

Por último veamos como evaluar un polinomio,

>> polyval(ps,3)
ans = 1166
Capı́tulo 2

Operaciones con vectores y matrices

Con Matlab las variables no tienen que declararse ni dimensionarse previamente


a su utilización (normalmente al principio de cada programa como requieren otros
lenguales de programación). Todas las variables numéricas son matrices en principio
de la dimensión que le demos al inicializarlas o al introducir valores en ellas, siendo en
cualquier caso la gestión de la memoria dinámica, es decir, que en cualquier momento
de la ejecución podemos aumentar o reducir la dimensión de cualquier array.

2.1. Construcción de vectores y matrices


Los valores de los coeficientes de una matriz se introducen por filas de una de las
dos maneras siguientes:
1. >> A=[1 2 3;4 5 6; 7 8 9]

2. >> A=[1 2 3
4 5 6
7 8 9]
Podemos generar algunas matrices particulares de forma sencilla, por ejemplo, si
una determinada matriz debe inicializarse a ceros o a unos haremos
>> B = zeros(3,5);
>> C = zeros(4);
>> D = ones(size(B));
En caso de aparecer un solo parámetro la matriz será cuadrada. En el tercer ejemplo
se genera una matriz de unos del tamaño de la matriz B ya definida.
Para crear vectores se puede actuar de forma análoga o también podemos generar
vectores dando valores para sus coordenadas equiespaciados (útil, por ejemplo, a la
hora de representar las abscisas para una función discreta) de cualquiera de las dos
formas siguientes:
>> x=0:0.1:10;
>> x=linspace(0,10,101);
14 Operaciones con vectores y matrices

Nota: para un espaciado logarı́tmico véase logspace.


Para recuperar las dimensiones de una matriz o vector utilizamos el comando size,
para el caso de vectores podemos también utilizar el comando length.
>> size(A) >> size(x)
ans = ans =
3 3 1 101
>> size(x’) >> length(x)
ans = ans =
101 1 101
Para visualizar el valor un determinado elemento de una matriz o vector tecleare-
mos, por ejemplo,
>> A(2,3) >> x(27)
ans = ans =
6 2.6000
para recuperar el elemento que ocupa la posición (2,3) de la matriz A y la coordenada
27 del vector x, respectivamente.
También se pueden recuperar varios valores al mismo tiempo mediante expresiones
del tipo,
>> x(4:8)
ans =
0.3000 0.4000 0.5000 0.6000 0.7000
>> x(4:2:8)
ans =
0.3000 0.5000 0.7000

>> A(2:3,2) >> A(2:3,:)


ans = ans =
5 4 5 6
8 7 8 9
que nos proporcionan las coordenadas de la cuarta a la octava del vector x, las coor-
denadas cuarta, sexta y octava del vector x, y los elementos en las posiciones (2,2) y
(2,3) de la matriz A, respectivamente.

2.2. Manipulación de matrices y arrays


Las posibilidades que Matlab nos proporciona en la manipulación arrays de números
es inmensa. Intentaremos dar aquı́ una idea sobre algunas de estas posibilidades me-
diante diversos ejemplos.

En primer lugar definamos dos vectores a y b,


2.2 Manipulación de matrices y arrays 15

>> a = 1:5, b =1:2:9


a =
1 2 3 4 5
b =
1 3 5 7 9
Podemos crear una matriz que tiene a estos vectores por filas:
>> M = [a;b]
M =
1 2 3 4 5
1 3 5 7 9
o bien crear un vector resultado de la “concatenación” de los dos vectores,
>> c = [a b]
c =
1 2 3 4 5 1 3 5 7 9
Pero también son posibles otras manipulaciones más sutiles, ası́
>> d = [0 b(1) a(2:2:4) b(4) 0]
d =
0 1 2 4 7 0
>> N = [a(2:2:4);b(2:2:4)]
N =
2 4
3 7
donde, por ejemplo, a(2:2:4) representa los elementos del vector a desde la segun-
da a la cuarta tomadas con un paso 2, es decir, se toman sólo la segunda y cuarta
componente.
También podemos modificar el valor de un solo coeficiente de una matriz,
>> A(3,3)=33
A =
1 2 3
4 5 6
7 8 33
En el caso de que queramos añadir un coeficiente en una posición que supera las
dimensiones de la matriz, entonces la matriz se rellena de ceros para las posiciones sin
determinar,
>> A(2,5)=24
A =
1 2 3 0 0
4 5 6 0 24
7 8 33 0 0
16 Operaciones con vectores y matrices

Volvamos a reconstruir nuestra matriz A de referencia,

>> A=[1 2 3; 4 5 6; 7 8 9];

Si, por ejemplo, queremos invertir el orden de las filas de la matriz haremos

>> B=A(3:-1:1,:)
B =
7 8 9
4 5 6
1 2 3

donde los dos puntos indican que se toman todas las columnas, es decir, serı́a equiva-
lente, en este caso, a escribir 1:3.
Si quisieramos construir una matriz que fuese el resultado de tomar todas las filas
de A y sólo las dos primeras columnas y añadirle la primera y tercera columnas de B
harı́amos

>> C=[A(:,1:2) B(:,[1 3])]


C =
1 2 7 9
4 5 4 6
7 8 1 3

Para extraer de esta última matriz una matriz 2 × 2 con los coeficientes de la segunda
y tercera filas y las columnas primera y tercera harı́amos

>> B=C(2:3,[1 3])


B =
4 4
7 1

También podemos utilizar un array ya existente para extraer submatrices de una matriz
dada, por ejemplo,

>> C=[1 3] >> C=[3 1]


C = C =
1 3 3 1
>> B=A(C,C) >> B=A(C,C)
B = B =
1 3 9 7
7 9 3 1

Para construir un vector a partir de la matriz A que sea el resultado de ir tomando sus
columnas de forma consecutiva harı́amos (donde tomamos la traspuesta para tener un
vector fila en lugar de un vector columna).
2.3 Operaciones con vectores 17

>> v=A(:)’
v =
1 4 7 2 5 8 3 6 9

Para eliminar la segunda columna de A, escribirı́amos

>> A(:,2)=[]
A =
1 3
4 6
7 9

si ahora queremos eliminar la segunda fila a la matriz resultante,

>> A(2,:)=[]
A =
1 3
7 9

y, por último, para sustituir la segunda fila de la matriz anterior con los coeficientes
del vector C escribirı́amos

>> A(2,:)=C
A =
1 3
3 1

2.3. Operaciones con vectores


Además de las operaciones usuales que involucran vectores Matlab presenta algu-
nas operaciones con vectores especı́ficas que pueden ser de gran utilidad. Consideremos
para los ejemplos que daremos a continuación dos vectores u y v y un escalar a,

>> a = 2;
>> u = [ 1 2 3 ];
>> v = [ 2 4 1 ];

Operaciones con escalares


Operación Descripción Resultado
u+a suma a a cada componente de u [3 4 5]
a*u multiplica por a cada componente de u [2 4 6]
u/a dividide por a cada componente de u [0.5 1 1.5]
a./u divide a entre cada componente de u [2 1 0.66]
u.^a eleva a a a cada componente de u [1 4 9]
a.^u eleva a a cada componente de u [2 4 8]
18 Operaciones con vectores y matrices

Operaciones entre vectores


Operación Descripción Resultado
u+v suma usual de vectores [3 6 4]
u.*v multiplicación componente a componente [2 8 3]
u./v división componente a componente [0.5 0.5 3]
u.\ v división inversa componente a componente [2 2 0.3333]
u.^v potenciación componente a componente [1 16 3]

Observemos cual es el resultado de la operación ∗ (producto) para los vectores u y


v dados:

>> u*v
??? Error using ==> *
Inner matrix dimensions must agree.

En el caso de que u sea un vector fila y v un vector columna, entonces el operador ∗


denota el producto escalar entre vectores, ası́, haciendo uso del operador transposición,
tendrı́amos:

>> u*v’
ans =
13

y haciendo

>> u’*v
ans =
2 4 1
4 8 2
6 12 3

2.3.1. Otros operadores vectoriales


Matlab implementa muchos otros operadores vectoriales entre ellos destacamos
algunos:

Operador Descripción Resultado


sum(u) suma todas las componentes de u 6
prod(v) multiplica todas las componentes de u 8
dot(u,v) producto escalar 13
cross(u,v) producto vectorial [-10 5 0]
max(u) componente de valor máximo 3
2.4 Operaciones con matrices 19

2.4. Operaciones con matrices


Los operadores matriciales de Matlab son:
+ suma,
- resta,
* multiplicación,
/ división usual,
\ “división inversa”,
^ potenciación,
’ traspuesta conjugada,
.’ traspuesta sin conjugación.

Además de estos operadores matriciales usuales, tendremos las operaciones elemento


a elemento definidas por el operador antecedido por un punto.

.* multiplicación elemento a elemento,


./ división usual elemento a elemento,
.\ “división inversa” elemento a elemento,
.^ potenciación elemento a elemento.

Veamos algunos ejemplos:

>> A = [ 1 2 0; 4 5 6 ; 7 8 9]
A =
1 2 0
4 5 6
7 8 9

>> B = A’
B =
1 4 7
2 5 8
0 6 9

Obsérvese la diferencia entre la multiplicación de matrices como operación matricial


usual:

>> C = A*B
C =
5 14 23
14 77 122
23 122 194

y la multiplicación elemento a elemento:


20 Operaciones con vectores y matrices

>> D=A.*B
D =
1 8 0
8 25 48
0 48 81

Análogamente obsérvese la diferencia entre la potenciación como operación matricial,


A2 = A A:

A2=A^2
A2 =
9 12 12
66 81 84
102 126 129

y la potenciación elemento a elemento, A.^2=A.*A,

AA=A.^2
AA =
1 4 0
16 25 36
49 64 81

2.5. Algunos comandos útiles


Destacamos a continuación otros comandos que pueden resultar útiles.
det(A) determinante de A,
rank(A) rango de A,
inv(A) matriz inversa de A,
trace(A) traza de A,
norm(A) norma de A,
cond(A) número de condicionamiento de A,
poly(A) polinomio caracterı́stico de A,
eig(A) cálculo de autovalores de A (equivalente a roots(poly(A))),

Recordemos hacer help comando para tener más detalles sobre cada uno de estos
comandos ası́ como sobre sus sintaxis.

>> D = inv(A)
D =
-0.3333 -2.0000 1.3333
0.6667 1.0000 -0.6667
-0.3333 0.6667 -0.3333
2.6 Resolución de sistemas lineales 21

>> d = det(A)
d =
9

>> rank(A)
ans =
3

2.6. Resolución de sistemas lineales


Matlab nos permite resolver de forma sencilla y eficiente, sin preocuparnos del
método que utiliza, sistemas lineales de la forma

A x = b.

Para ello, en primer, lugar habrá que introducir la matriz A de coeficientes y el vector
b conteniendo el segundo miembro de alguna de las formas que se han visto en este
capı́tulo. Por ejemplo, si tomamos la matriz A ya definida y cuyo determinante hemos
visto que es distinto de cero, y como segundo miembro tomamos
>> b = [3; 4; 6]
b =
3
4
6
A continuación podemos resolver el sistema lineal de varias maneras. Una serı́a uti-
lizando la matriz inversa, aunque este método no es en general recomendable, ya que
el cálculo de la inversa de una matriz sólo debe realizarse si se necesita explı́citamente.
>> x = inv(A)*b
x =
-1.0000
2.0000
-0.3333
La forma más adecuada y eficiente de resolver un sistema lineal es mediante la uti-
lización del operador ”división”(\) o del operador ”división inversa”(/). Ambos ope-
radores producen idénticos resultados salvo que el primero nos proporciona un vector
columna y el segundo un vector fila.
>> x = A\b >> x = b’/A’
x = x =
-1.0000 -1.0000 2.0000 -0.3333
2.0000
-0.3333
22 Operaciones con vectores y matrices
Capı́tulo 3

Representaciones gráficas

En este tema daremos los comandos básicos para realizar unas primeras representa-
ciones gráficas con Matlab. Evidentemente no trataremos todas las potencialidades
de Matlab en el campo gráfico que son muy amplias.

3.1. Gráficas de funciones discretas


En primer lugar Matlab permite representar fácilmente las gráficas de datos
numéricos almacenados en vectores o en matrices mediante el comando plot. Estos
datos pueden ser el resultado de la evaluación de una función analı́tica o datos que se
leen de un fichero. La sintaxis básica del comando plot es simple:

>> x = [0 1 2 3 4 5];
>> y = [3 5 -2 1 0 4];
>> plot(x,y)

Si no se indica nada plot une los puntos de la gráfica mediante una lı́nea continua
negra. Para cambiar el tipo de lı́nea o el color escribiremos, por ejemplo,

>> plot(x,y,’xg’)

para obtener los datos de la gráfica marcados con una equis y en color verde. Para ver
las posibilidades disponibles ver la tabla 3.1.

3.2. Gráficas de funciones analı́ticas


Resulta evidente que para representar gráficamente una función definida analı́tica-
mente habrá que discretizarla en primer lugar y luego representar la función en los
puntos considerados mediante el comando plot o, de forma más automática, sin necesi-
dad de discretización previa por parte del usuario, mediante el comando fplot. Ası́, si
queremos representar gráficamente la función cos x en el intervalo [0, π] haremos, por
ejemplo,
24 Representaciones gráficas

Sı́mbolo Color Sı́mbolo Tipo de lı́nea Sı́mbolo Tipo de lı́nea


y amarillo . puntos s cuadrados
m magenta o cı́rculos d diamantes
c cian x equis (x) ^ triángulos
r rojo + mases (+) v triángulos
g verde * asteriscos (*) < triángulos
b azul - lı́nea continua > triángulos
w blanco : lı́nea de puntos p pentagrama
k negro -. punto-guión h hexagrama
– lı́nea de guiones

Cuadro 3.1: Estilos y colores para las representaciones gráficas. Comando plot.

>> x = 0:0.1:2*pi;
>> y = cos(x);
>> plot(x,y)

O también

>> x = linspace(0,2*pi,101);
>> plot(x,cos(x))

Para realizar la gráfica mediante el comando fplot escribirı́amos

>> fplot(’cos(x)’,[0 2*pi])

sin necesidad de especificar los puntos de la discretización del eje de abscisas.

3.3. Algunas opciones gráficas


Repasemos ahora de forma rápida algunas de las principales opciones gráficas que
nos proporciona Matlab. En primer lugar veamos que comandos nos permiten incluir
texto en los ejes de la gráfica. Para ello debemos utilizar los comandos xlabel e ylabel.
Si lo que queremos es escribir un texto en la parte superior de la figura utilizamos el
comando title.

>> xlabel(’coordenada x’)


>> ylabel(’coordenada y’)
>> title(’Grafica de la funcion f(x)=cos(x)’)

Podemos añadir una cuadrı́cula a la gráfica de forma automática mediante el co-


mando grid on y eliminarla tecleando grid off. El comando grid sin más acti-
va/desactiva esta opción gráfica.
Para controlar la apariencia y escalado de los ejes de forma más personalizada
contamos con el comando axis. Ası́ axis([xmin xmax ymin ymax]) fija los lı́mites
3.3 Algunas opciones gráficas 25

de representación para la gráfica a la que hace referencia. Otras opciones para este
comando son:

axis tight ajusta los ejes a los valores de los datos


axis equal toma iguales factores de escala en ambos ejes
axis image igual que axis equal pero ajustando los ejes a los datos
axis square hace que los ejes formen un cuadrado
axis normal deshace los efectos de axis square y axis equal y elimina
toda restricción en el escalado
axis off elimina el texto de los ejes, la cuadrı́cula y devuelve el escalado
automático
axis on restablece el texto de los ejes, marcas y cuadrı́cula
axis auto vuelve a los parámetros de escalado por defecto
axis manual mantiene el escalado fijo al activar el comando hold y realizar
posteriores gráficas

Si queremos añadir texto en una posición de la figura cualquiera dada utilizaremos


la orden text(x,y,’texto’), donde (x,y) representa las coordenadas del punto medio
del texto en su extremo izquierdo (como unidades se toman las de los ejes de la gráfica).
El comando gtext sirve para la colocación de texto en la gráfica en la posición que
indiquemos mediante el ratón. Además podemos poner una leyenda a todas o algunas
de las curvas representadas en una gráfica mediante el comando legend como veremos
en el ejemplo de la figura 3.1.
Para ampliar una parte de la gráfica tecleamos zoom en la ventana de comandos y
luego cliquearemos con el ratón en la zona de la gráfica que queremos ampliar tantas
veces como sucesivos zooms queramos realizar. Un doble click restablece la gráfica a
sus dimensiones iniciales.
Al realizar un nuevo comando plot la gráfica anteriormente representada desaparece
automáticamente. Si queremos que dicha gráfica permanezca y superponer la nueva
curva que vamos a representar, una de las posibilidades es utilizar el comando hold, o
hold on y hold off para desactivar esta opción.
El comando print nos permite guardar la gráfica como un m-fichero o en formato
postscript para su posterior impresión.
En el siguiente ejemplo se recogen algunos de los comandos introducidos hasta el
momento, la figura 3.1 nos muestra el resultado que se obtiene.

>> x = 0:0.1:2*pi;
>> plot(x,cos(x),’--’,x,sin(x),’-o’)
>> axis([0 2*pi -1 1])
>> legend(’coseno’,’seno’)
>> text(0.8,0.2,’cos(x)’)
>> text(3,0.2,’sen(x)’)
>> title(’Graficas de las funciones seno y coseno’)
>> xlabel(’eje de abscisas’)
26 Representaciones gráficas

>> ylabel(’eje de ordenadas’)


>> print figura

Graficas de las funciones seno y coseno


1
coseno
seno
0.8

0.6

eje de ordenadas 0.4

0.2 cos(x) sen(x)

−0.2

−0.4

−0.6

−0.8

−1
0 1 2 3 4 5 6
eje de abscisas

Figura 3.1: Algunas opciones del comando plot.

Si queremos representar una nueva gráfica en una nueva ventana sin perder la que
ya tenemos utilizaremos el comando figure. Para borrar la última figura haremos clf.
También en una misma figura pueden aparecer varias gráficas con sus correspon-
dientes ejes. Esto se consigue con el comando subplot. Veamos la utilización de este
comando junto a otros ya estudiados mediante el siguiente ejemplo, cuyo resultado
aparece en la figura 3.2.

>> x=0:0.1:2*pi; % Discretizacion del eje de abcisas


>> figure % Generar una nueva figura
>> subplot(2,3,1) % Primera grafica
>> plot(x,sin(x),’*b’) % Funcion seno con asteriscos y en negro
>> axis ([0 2*pi -1 1]) % Defino los ejes
>> hold on % Sigo dibujando en la misma grafica
>> plot(x,sin(2*x),’.’) % La funcion seno(2x) punteada
>> title(’Funcion seno’) % Ponemos titulo a la grafica
>> text(5.4,0.85,’(a)’) % Incluimos texto en la posicion indicada
>> hold off
>> subplot(2,3,2) % Segunda grafica
>> plot(x,cos(x),’-o’,x,cos(2*x),’.’) % Funciones cos(x) y cos(2x)
>> axis tight % Los ejes deben ajustarse a los datos
>> title(’Funcion coseno’) % Titulo para la segunda grafica
>> text(4.8,0.85,’(b)’) % Insertamos texto en la posicion indicada
>> subplot(2,3,3) % Tercera grafica
>> semilogy(x,exp(x),’-^’) % Escala logaritmica en el eje de ordenadas
>> grid on % Activamos la cuadricula
>> axis tight % Los ejes deben ajustarse a los datos
>> title(’Funcion exponencial’) % Titulo para la tercera grafica
>> text(4.8,325,’(c)’) % Aado texto en la posicion indicada
3.4 Gráficos 3D 27

>> subplot(2,3,4:6) % Cuarta grafica!!!


>> plot(x,x.^2.*sin(x),’-+’) % Funcion x sen(x) linea continua y +
>> grid on % Activamos la cuadricula
>> legend(’x exp(x)’) % Ponemos texto tipo leyenda
>> title(’Otra funcion’) % Titulo cuarta grafica
>> text(0.1,2,’(d)’) % Insertamos texto en la posicion indicada

Funcion seno Funcion coseno Funcion exponencial


1 1
(a) (b) (c)

2
0.5 0.5 10

0 0
1
10
−0.5 −0.5

0
−1 10
0 2 4 6 0 2 4 6 0 2 4 6

Otra funcion
5
(d) x² exp(x)
0

−5

−10

−15

−20

−25
0 1 2 3 4 5 6 7

Figura 3.2: Comandos plot y subplot.

3.4. Gráficos 3D
3.4.1. Curvas en tres dimensiones
El equivalente del comando plot para gráficas en tres dimensiones es el comando plot3
cuya sintaxis es también análoga a la de áquel pero donde habrá que dar ahora tripletas de
datos. Veámoslo mediante el siguiente ejemplo, cuyo resultado gráfico aparece en la figura
3.3.

>> x = linspace(0,10*pi);
>> plot3(x,sin(x),cos(x),’x-’)
>> title(’Helice’,’FontSize’,24)
>> xlabel(’x’,’FontSize’,18), ylabel(’sen(x)’,’FontSize’,18)
>> zlabel(’cos(x)’,’FontSize’,18)

En esta gráfica hemos aumentado el tamaño de letra utilizada para el tı́tulo y las etiquetas de
los ejes para que fueran legibles al insertar el fichero postscript que nos proporciona Matlab
en el documento LATEXque genera este texto.
Por último observar que todos los comandos vistos para gráficas 2D se aplican de forma
análoga para las gráficas en tres dimensiones (axis, text, legend, etc.).
28 Representaciones gráficas

Hélice

0.5

cos(x)
0

−0.5

−1
1

0.5 35
30
0 25
20
15
−0.5 10
5
−1 0
sen(x) x

Figura 3.3: Gráfica generada con el comando plot3d.

3.4.2. Superficies 3D
Para poder representar gráficamente una superficie tridimensional mediante Matlab es
necesario definir en primer lugar una malla rectangular1 en el plano x − y y debemos conocer
el valor de la coordenada z en los nodos (intersecciones) de esa malla. Esto hará necesario
utilizar técnicas de interpolación cuando los datos de la superficie que queremos representar
vengan dados de cualquier otra forma que no sea la descrita.
Veamos como representarı́amos la superficie definida por una función de dos variables
z = f (x, y). En primer lugar habrá que definir la malla donde se evaluará la función. Esto se
hace mediante el comando meshgrid de la siguiente forma:

>> x = -10:0.5:10;
>> y = x;
>> [xm,ym] = meshgrid(x,y);

sen x2 +y 2
Consideremos, por ejemplo, la función f (x, y) = √ 2 2 , que debemos evaluar en los nodos
x +y
de la malla.

>> r = sqrt(xm.^2+ym.^2)+eps; % sumamos eps para evitar dividir entre 0


>> zm = sin(r)./r;

Por último, para generar la superficie 3D, haremos

>> mesh(xm,ym,zm)

El resultado de estos comandos puede verse en la figura 3.4.


Ligeras variantes del comando mesh son meshc que representa además de la superficie
las isolı́neas de la función f (x, y) y meshz que dibuja una pared lateral de referencia. Otros
comandos análogos son surf, surfc y surfl, los cuales producen una superficie 3D coloreada
o también el comando waterfall. Se recomienda jugar con estos comandos tomando el
ejemplo suministrado o cualquier otro para ver las diferencias entre cada uno de ellos.
1
Puede tratarse también de mallas triangulares cuestión que nosotros no abordaremos.
3.4 Gráficos 3D 29

0.8

0.6

0.4

0.2

−0.2

−0.4
10

5 10
5
0
0
−5
−5
−10 −10

Figura 3.4: Gráfica de una superficie definida por z = f (x, y) (comando mesh).

Datos dados por una nube de puntos

Para realizar la representación gráfica de una superficie que pasa una nube de puntos
3D arbitraria es necesario, en primer lugar interpolar los datos sobre una malla, para luego
representar la superficie de forma estándard. Veámos los pasos a seguir mediante un ejemplo.

% Coordenadas aleatorias de los puntos en la nube puntos 3D.


xd=random(’unid’,20,100,1) % coordenadas x,
yd=random(’unid’,20,100,1) % y,
zd=random(’norm’,10,2,100,1) % z dadas de forma aleatoria
% Representar la nube de puntos.
plot(xd,yd,’o’)
% Construimos una malla que contenga a los puntos de coordenadas (xd,yd).
[xi,yi] = meshgrid(0:.5:20,0:.5:20);
% Interpolamos los valores de zd en la malla (xi,yi).
zi = griddata(xd,yd,zd,xi,yi,’cubic’);
% Representamos graficamente.
mesh(xi,yi,zi)

El resultado de este conjunto de comandos puede verse en la figura 3.5.

Algunos comandos más

Como indicábamos al principio las posibilidades gráficas de Matlab son amplias y, por
tanto, existen también un gran número de comandos. A continuación nos limitamos a enu-
merar algunos de los que consideramos pueden sernos de alguna utilidad (aunque podremos
“vivir sin ellos”). No hay que olvidar que, si en cualquier momento, estamos interesados en
conocer la sintaxis exacta de cualquiera de estos comandos u otros, ası́ que acción realizan,
bastará hacer help comando en una ventana Matlab.
30 Representaciones gráficas

15

10

5
20

15 20
15
10
10
5
5
0 0

Figura 3.5: Representación de la superficie que pasa por una nube de puntos 3D.

contour3 representa isolı́neas


shading sombreado en colores (opciones flat, interp, faceted)
view especifica el punto de observación para una gráfica 3-D
rotate rota respecto a un origen y dirección dados
hidden oculta la malla
fill3 rellena polı́gonos 3D
Capı́tulo 4

Cálculo simbólico

Matlab no es sólo una herramienta numérica, también posee capacidades de cálculo


simbólico. Estas herramientas de cálculo simbólico permiten realizar operaciones algebraicas,
integrar y diferenciar funciones, resolver sistemas lineales de ecuaciones o ecuaciones diferen-
ciales.

4.1. Variables simbólicas


Para definir variables simbólicas la sintaxis más sencilla entre las varias posibles es,
>> syms x a b c
en el caso de que queramos definir x, a, b y c como variables simbólicas.
Ahora podemos definir la siguiente “matriz simbólica”
>> A = [a 1 b; c 1 c; 0 x 0]
y calcular su determinante en función de las variables simbólicas

>> d= det(A)
d =
-a*c*x+c*b*x

4.2. Funciones simbólicas


Si ahora quisiéramos definir una función con variables simbólicas bastarı́a con hacer, por
ejemplo,
>> f = a*x^2 + b*x + c + x*cos(x)

Diferenciación
Para diferenciar (en este caso respecto de x1 ) esta expresión simbólica basta hacer

>> diff(f)
ans = 2*a*x+b+cos(x)-x*sin(x)
1
El comando diff de Matlab calcula la derivada respecto de la variable simbólica que hallamos
definido más próxima a la x en el alfabeto.
32 Cálculo simbólico

Para obtener la derivada respecto a otra variable, por ejemplo a, haremos

>> diff(f,a)
ans = x^2

También se pueden obtener derivadas de orden superior haciendo

>> diff(f,2)
ans = 2*a-2*sin(x)-x*cos(x)

También podemos diferenciar cada una de las componentes de una matriz simbólica me-
diante el comando diff,

>> A = [cos(a*x) sin(a*x); -sin(a*x) cos(a*x)];


>> diff (A)
ans = [ -sin(a*x)*a, cos(a*x)*a]
[ -cos(a*x)*a, -sin(a*x)*a]

Por último comentar que Matlab permite, mediante el comando jacobian(f,v), calcu-
lar la matrix Jacobiana del escalar o vector f con respecto al vector v (hacer help jacobian
para ver algún ejemplo).

Ejercicio: obtener el Jacobiano de la transformacion de coordenadas Euclı́deas a coor-


denadas esféricas usando el comando jacobian de Matlab.

Integración
Para integrar una función simbólica haremos

>> int(f)
ans = 1/3*a*x^3+1/2*b*x^2+c*x+cos(x)+x*sin(x)

este comando nos proporciona una primitiva a la cual habrá que añadirle una constante
arbitraria. Para el cálculo de integrales definidas la sintaxis del comando serı́a,

>> int(f,0,2)
ans = 8/3*a+2*b+2*c+cos(2)+2*sin(2)-1

Si hubieramos querido integrar respecto de la variable a deberı́amos haber escrito,

>> int(f,a)
ans = 1/2*a^2*x^2+b*x*a+c*a+x*cos(x)*a

Para ver más ejemplos hacer help sym/int.m.


4.2 Funciones simbólicas 33

Lı́mites
La herramienta de cálculo simbólico de Matlab nos permite calcular el lı́mite de funciones
de forma sencilla, por ejemplo,

>> syms h
>> limit((sin(x+h) - sin(x))/h,h,0)
ans = cos(x)
>> syms n
>> limit((1 + x/n)^n,n,inf)
ans = exp(x)

En el caso de estar interesados en calcular lı́mites laterales se usarán las opciones ‘left’
y ‘right’, ası́ se tiene,

>> limit(1/x,x,0)
ans = NaN
>> limit(1/x,x,0,’left’)
ans = -inf
>> limit(1/x,x,0,’right’)
ans = inf

Suma simbólica
Podemos realizar sumas simbólicas, cuando éstas existan, usando el comando symsum, por
ejemplo,

>> s1 = symsum(1/n^2,1,inf)
ans = 1/6*pi^2
>> s2 = symsum(x^n,n,0,inf)
ans = -1/(x-1)

Series de Taylor
El comando taylor(f,n,a) nos permite obtener el desarrollo de Taylor de grado n de la
función f en el punto x0 = a. Ası́, por ejemplo,

>> h = exp(x);
>> T = taylor(h,6)
T = 1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5
>> pretty(T)

Si queremos comparar gráficamente la función f y la correspondiente suma de Taylor


haremos,

>> xd = -2:0.05:2; yd = double(subs(h,x,xd));


>> ezplot(T,[-2,2]); hold on;
>> plot(xd, yd, ’r-.’)

Nota: los comandos subs, double y ezplot se estudiarán en los apartados 4.3 y 4.5.
34 Cálculo simbólico

4.3. Evaluación de funciones simbólicas


Veremos ahora cómo podemos especificar los valores de los parámetros en una expresión
simbólica o cómo evaluar una función simbólica en un punto dado. Para ello utilizaremos el
comando de sustitución subs.
Por ejemplo, si queremos evaluar la función f anteriormente definida en x = 6, mante-
niendo a a, b, c como parámetros, haremos

>> subs(f,x,6)
ans = 36*a+6*b+c+6*cos(6)

El resultado sigue siendo una expresión simbólica.


Si ahora queremos especificar los valores de los parámetros a, b y c, haremos, por ejemplo,

>> g = subs(f, [a b c], [3 2 -1])


g = 3*x^2+2*x-1+x*cos(x)

Se tiene ahora una expresión simbólica que depende sólo de la variable x. Si ahora queremos
evaluar esta función en un punto dado, por ejemplo x = 3,5, tendremos hacer una nueva
sustitución mediante el comando subs,

>> w = subs(g, x, 3.5)


w = 171/4+7/2*cos(7/2)

De nuevo w sigue siendo una cantidad simbólica, si queremos convertir w en un número en


coma flotante en doble precisión haremos,

>> w = double (w)


w = 39.4724

Para obtener más información y varios ejemplos hacer help sym/subs.m.

4.4. Resolución de ecuaciones simbólicas


Resolución de ecuaciones algebraicas
El comando solve(f) trata de encontrar los valores para las variables simbólicas que
aparecen en f 2 para los cuales f se anula, por ejemplo,

>> f = a*x^2 + b*x + c


>> solve(f)
ans =
[ 1/2/a*(-b+(b^2-4*c*a)^(1/2))]
[ 1/2/a*(-b-(b^2-4*c*a)^(1/2))]

El resultado es un vector simbólico cuyos elementos son las dos soluciones de la ecuación de
segundo orden.
Si queremos resolver la misma expresión pero para otra variable, por ejemplo para la
variable b haremos
2
Hacer findsym(f) para saber cuales son estas variables
4.4 Resolución de ecuaciones simbólicas 35

>> solve(f,b)

También podemos resolver sistemas de ecuaciones como se muestra mediante el siguiente


ejemplo,

>> [u,v] = solve(’a*u^2 + v^2 = 0’,’u - v = 1’)


u = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))+1]
[ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))+1]
v = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))]
[ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))]
>> vs = subs(v,a,2)
vs = [ -2/3+1/3*(-2)^(1/2)]
[ -2/3-1/3*(-2)^(1/2)]
>> vv= double (vs)
vv = -0.6667 + 0.4714i
-0.6667 - 0.4714i

Resolución de ecuaciones diferenciales


Para realizar el cálculo simbólico de las soluciones de una ecuación diferencial ordinaria
debemos utilizar el comando dsolve. La ecuación o ecuaciones que se pretenden resolver
deben darse como expresiones simbólicas en las que la letra D denota diferenciación y los
sı́mbolos D2, D3, . . . representan las sucesivas derivadas. Por tanto los nombres de las variables
simbólicas que se utilicen no podrán contener la letra D. La variable independiente, sino se
especifica otra, será t ası́, por ejemplo, D2y representa d2 y/dt2 .

>> dsolve(’Dy=y+y^2’)
ans = 1/(-1+exp(-t)*C1)

Si además se quiere imponer una determinada condición de contorno haremos

>> y = dsolve(’Dy=y+y^2’,’y(0)=1’)
y = 1/(-1+2*exp(-t))

Para una ecuación de segundo orden

>> y = dsolve(’D2y=-y’,’x’)
y = C1*sin(x)+C2*cos(x)

El comando dsolve también nos puede proporcionar la solución de sistemas de ecuaciones


diferenciales.

>> [x,y] = dsolve(’Dx = 5*x + 3*y’, ’Dy = -3*x + 5*y’)


x = exp(5*t)*cos(3*t)*C1+exp(5*t)*sin(3*t)*C2
y =-exp(5*t)*sin(3*t)*C1+exp(5*t)*cos(3*t)*C2
36 Cálculo simbólico

4.5. Representación gráfica de funciones simbólicas


Para la representación gráfica de funciones definidas simbólicamente con una única varia-
ble simbólica se utiliza el comando ezplot. Ası́, para representar gráficamente una función
simbólica en un intervalo [a, b] haremos ezplot(f,[a,b]), por ejemplo,

>> ezplot(g, [0,10])

o también,

>> ezplot tan(sin(x))-sin(tan(x))


>> ezplot (’tan(sin(x))-sin(tan(x))’)

4.6. Funciones simbólicas


SYMBFACT Symbolic factorization analysis.
DEMOS Demo list for the Symbolic Math Toolbox
DSOLVE Symbolic solution of ordinary differential equations.
POLY2SYM Polynomial coefficient vector to symbolic polynomial.
SOLVE Symbolic solution of algebraic equations.
SYMS Short-cut for constructing symbolic objects.
ZETA Symbolic Riemann zeta function.
SUBS Symbolic substitution.
SYMDEMOS Set up Symbolic Math Toolbox command-line demos.
SYMEQNDEMO Demonstrate symbolic equation solving.
SYMINTRO Introduction to the Symbolic Math Toolbox.
SYMLINDEMO Demonstrate Symbolic Linear Algebra.
ACOS Symbolic inverse cosine.
ACOSH Symbolic inverse hyperbolic cosine.
ACOT Symbolic inverse cotangent.
ACOTH Symbolic inverse hyperbolic cotangent.
ACSC Symbolic inverse cosecant.
ACSCH Symbolic inverse hyperbolic cosecant.
ASEC Symbolic inverse secant.
ASECH Symbolic inverse hyperbolic secant.
ASIN Symbolic inverse sine.
ASINH Symbolic inverse hyperbolic sine.
ATAN Symbolic inverse tangent.
ATANH Symbolic inverse hyperbolic tangent.
BESSELI Symbolic Bessel function, I(nu,z).
BESSELJ Symbolic Bessel function, J(nu,z).
BESSELK Symbolic Bessel function, K(nu,z).
BESSELY Symbolic Bessel function, Y(nu,z).
COS Symbolic cosine function.
COSH Symbolic hyperbolic cosine.
COT Symbolic cotangent.
COTH Symbolic hyperbolic cotangent.
4.6 Funciones simbólicas 37

CSC Symbolic cosecant.


CSCH Symbolic hyperbolic cosecant.
ctranspose.m: DET Symbolic matrix determinant.
DIAG Create or extract symbolic diagonals.
DOUBLE Converts symbolic matrix to MATLAB double.
EIG Symbolic eigenvalues and eigenvectors.
EQ Symbolic equality test.
EVAL Evalute a symbolic expression.
EXP Symbolic matrix element-wise exponentiation.
EXPAND Symbolic expansion.
FACTOR Symbolic factorization.
FINDSYM Finds the symbolic variables in a symbolic expression or matrix.
INV Symbolic matrix inverse.
LATEX LaTeX represention of a symbolic expression.
LDIVIDE Symbolic array left division.
LOG Symbolic matrix element-wise natural logarithm.
MINUS Symbolic subtraction.
MLDIVIDE Symbolic matrix left division.
mpower.m: MRDIVIDE Symbolic matrix right division.
mtimes.m: NE Symbolic inequality test.
NUMDEN Numerator and denominator of a symbolic expression.
PLUS Symbolic addition.
POLY Symbolic characteristic polynomial.
POLY2SYM Polynomial coefficient vector to symbolic polynomial.
POWER Symbolic array power.
PRETTY Pretty print a symbolic expression.
RDIVIDE Symbolic array right division.
SEC Symbolic secant.
SECH Symbolic hyperbolic sechant.
SIMPLE Search for simplest form of a symbolic expression or matrix.
SIMPLIFY Symbolic simplification.
SIN Symbolic sine function.
SINH Symbolic hyperbolic sine.
SOLVE Find the zeros of symbolic expressions.
SQRT Symbolic matrix element-wise square root.
SUBS Symbolic substitution.
SVD Symbolic singular value decomposition.
SYM Construct symbolic numbers, variables and objects.
SYM2POLY Symbolic polynomial to polynomial coefficient vector.
SYMSUM Symbolic summation.
TAN Symbolic tangent function.
TANH Symbolic hyperbolic tangent.
TIMES Symbolic array multiplication.
TRANSPOSE Symbolic matrix transpose.
TRIL Symbolic lower triangle.
38 Cálculo simbólico

TRIU Symbolic upper triangle.


UMINUS Symbolic negation.
CCODE C code represention of a symbolic expression.
COLON Symbolic colon operator.
CONJ Symbolic conjugate.
ERF Symbolic error function.
EXPM Symbolic matrix exponential.
FORTRAN Fortran represention of a symbolic expression.
GAMMA Symbolic gamma function.
IMAG Symbolic imaginary part.
RANK Symbolic matrix rank.
REAL Symbolic real part.
ZETA Symbolic Riemann zeta function.
DIFF Alternative entry to the symbolic differentiation function.
INT Alternative entry to the symbolic integration function.
Capı́tulo 5

Ajuste de curvas e interpolación

En este capı́tulo abordaremos las cuestiones del ajuste de curvas y de la interpolación


mediante Matlab.

5.1. Ajuste de curvas


Mediante las técnicas de ajuste de curvas lo que buscamos es aproximar una cierta nube
de puntos (datos) mediante una curva regular que se ajuste lo “mejor posible” a esos datos
sin tener que pasar necesariamente por ellos.
En Matlab el problema del ajuste de curvas mediante mı́nimos cuadrados lo implementa
el comando polyfit. Veamos como utilizar este comando.

>> x = [0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1.];
>> y = [0.34 2.39 4.33 6.87 7.56 8.88 9.01 10.77 9.33 9.05 12.1];
>> plot(x,y,’o-’)
>> p = polyfit(x,y,2)
p =
-11.9103 21.8821 0.5576

Si queremos ahora representar el polinomio de segundo grado que hemos obtenido como mejor
aproximación mı́nimo cuadrado de estos datos haremos uso del comando polyval:

>> xd = linspace(0,1,100); % Generar discretizacion del eje x


>> yp = polyval(p,xd); % Evaluar el polinomio en esos puntos
>> plot(x,y,’o-’,xd,yp,’:’) % Representar graficamente

La figura 5.1 nos presenta los datos y la gráfica del polinomio de segundo grado que los ajusta
en el sentido de los mı́nimos cuadrados.
Si ahora queremos comparar esta aproximación con el ajuste polinómico de grado 10 (es
decir con la interpolación de Lagrange de los datos) harı́amos:

>> pp = polyfit(x,y,10) % Polinomio de grado 10 (de Lagrange)


>> ypp= polyval(pp,xd); % Evaluar el polinomio de Lagrange
>> hold on; plot(xd,ypp,’-r’) % Representamos en la misma grafica
>> axis tight % Ejes ajustados a los datos
40 Ajuste de curvas e interpolación

14

20

12
18

16
10

14

8
12

10
6

4
6

4
2

0
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1

Figura 5.1: Ajuste polinómico.

5.2. Interpolación 1D
La diferencia entre interpolación y ajuste polinómico reside en que en la interpolación
nuestros datos son esencialmente correctos y lo que se pretende es construir una función cuya
gráfica pase por esos puntos y que nos permita describir el comportamiento de la variable
representada en los puntos intermedios.
El ejemplo más sencillo de interpolación (lineal a trozos) es la forma en que Matlab
realiza sus gráficas. Ası́ para valores intermedios entre dos datos la interpolación lineal a
trozos supone un valor dado por la recta que une los dos puntos contiguos dados por los
datos. Obviamente cuanto mayor sea el número de puntos considerados y menor la distancia
entre ellos, mejor será la aproximación a la función subyacente. Veamos esto con un ejemplo.

>> xf = linspace(0,2*pi,100); % Discretizacion fina.


>> xg = linspace(0,2*pi,8); % Discretizacion grosera.
>> plot(xf,sin(xf),xg,sin(xg),’-o’) % Representacion grafica
>> axis([0,2*pi,-1.1,1.1])

0.8

0.6

0.4

0.2

−0.2

−0.4

−0.6

−0.8

−1

0 1 2 3 4 5 6

Figura 5.2: Interpolación lineal a trozos de la función seno en [0, 2π].


5.2 Interpolación 1D 41

El comando especı́fico que implementa Matlab para realizar la interpolación 1d es el co-


mando interp1. Continuemos con el ejemplo de la función seno, y consideremos la siguiente
tabla de valores del sen(x).

x 60 65 70 75 80
sen(x) 0.866025 0.906308 0.939693 0.965926 0.984808

Para aproximar el valor del sen(72) a partir de estos datos podemos seguir varias estrate-
gias de interpolación. Veamos algunas de ellas.

% Introducir los datos.


x = 60:5:80;
sx = [0.866025 0.906308 0.939693 0.965926 0.984808];
% o tambien sx = sin(x);
%
% 1) Interpolacion lineal a trozos.
s72 = interp1(x,sx,72)
s72 =
0.9502
% o tambien s72 = interp1(x,sx,72,’linear’)
%
% 2) Interpolacion cubica a trozos.
s72 = interp1(x,sx,72,’cubic’)
s72 =
0.9511
%
% 3) Interpolacion mediante splines.
s72 = interp1(x,sx,72,’spline’)
s72 =
0.9511
% 4) Interpolacion mediante el vecino mas cercano.
s72 = interp1(x,sx,72,’nearest’)
s72 =
0.9397

Por último, si quisiéramos llevar a cabo una interpolación de Lagrange de grado 4 cons-
truyendo el polinomio de grado n = 4 que pasa por los n + 1 datos suministrados, harı́amos
uso del comando polyfit. Ası́ pues, bastarı́a hacer,

>> format long % Formato largo para que no parezca que varios
% coeficientes del polinomio son cero
>> ps = polyfit(x,sx,4)
>> ps =
Columns 1 through 4
0.00000000366667 -0.00000132866667 0.00002808833333 0.01653771666672
Column 5
0.01211599999911
42 Ajuste de curvas e interpolación

>> s72 = polyval(ps,72)


s72 =
0.95105681600000

También se pueden realizar interpolaciones de Lagrange de menor grado (no merece la pena
hacer interpolaciones lineal o cúbica pues esto, como ya lo hemos visto, lo hace Matlab
de forma automática y es de esperar que también de forma óptima, mediante el comando
interp1). Probemos por ello a construir el polinomio de interpolación de grado 2 que interpola
la función seno en x0 = 65, x1 = 70, x2 = 75.

>> xx = x(2:4);
>> sxx = sx(2:4);
>> pss = polyfit(xx,sxx,2)
pss =
-0.00014304000000 0.02598740000000 -0.17852900000002
>> s72 = polyval(pss,72)
s72 =
0.95104444000000

Si queremos conocer el valor que Matlab calcula para el sen(72) con 15 cifras significa-
tivas basta teclear,

>> format long


>> sin(72*pi/180)
>> ans =
>> 0.95105651629515

5.3. Interpolación 2D
Veremos a continuación los comandos básicos que nos van a permitir resolver problemas
de interpolación en el plano. Los valores a interpolar podrán venir dados bien por una nube
de puntos distribuidos de forma regular o arbitraria, o bien dados por una función z = f (x, y)
discretizada.
En el caso de que los datos estén dados en todos los nodos de un mallado rectangular,
entoces el problema de la interpolación bidimensional se resuelve fácilmente con Matlab.
Veámoslo con un ejemplo. Supongamos que tenemos los valores de una cierta variable dados
en los nodos equidistribuidos de una malla del rectángulo [0, 5] × [0, 4], por ejemplo,

>> x = 0:5; y = 0:4;

donde dichos valores vienen dados en la matriz z,

>> z = [ 9 10 9.5 8 10 11
8 11 10.5 11.5 9 9
7 9 11 10 10 8
9 10 10.5 11 10.5 9
10 9 8.5 9 8 8];
5.3 Interpolación 2D 43

Para dibujar estos valores bastarı́a hacer

>> mesh(x,y,z)

cuyo resultado puede verse en la figura 5.3. Ahora para obtener el valor interpolado en un

11.5

11

10.5

10

9.5

8.5

7.5

7
4

3 5
4
2 3
1 2
1
0 0

Figura 5.3: Comando mesh para representar datos dados sobre una malla rectangular.

punto de este rectángulo, por ejemplo en el punto (3,5, 2,8) harı́amos,

>> zi = interp2(x,y,z,3.5,2.8)
zi =
10.6000

La interpolación utilizada por defecto es la lineal pero también podemos utilizar interpolación
cubica, cubic, o la interpolación que toma como valor en el punto dado el del nodo más
próximo, nearest, por ejemplo,

>> zi = interp2(x,y,z,3.5,2.8,’cubic’)
zi =
10.8975

En el caso de que queramos interpolar los valores dados en una malla más fina haremos lo
siguiente:

>> xi = linspace(0,5,30); % Refinamos la malla en la direcci\’on de x.


>> yi = linspace(0,4,25); % Refinamos la malla en la direcci\’on de y.
>> [xxi,yyi] = meshgrid(xi,yi); % Generamos una malla rectangular.
>> zzi = interp2(x,y,z,xxi,yyi,’cubic’); % Interpolamos.

>> mesh(xxi,yyi,zzi) % Representamos graficamente los datos interpolados.


>> hold on
>> [xx,yy] = meshgrid(x,y); % Malla de los datos originales.
>> plot3(xx,yy,z,’or’) % Representamos los datos originales.
>> hold off
44 Ajuste de curvas e interpolación

12

11

10

6
4

3 5
4
2 3
1 2
1
0 0

Figura 5.4: Datos interpolados en una malla más fina.

La figura 5.4 nos presenta el resultado obtenido tras introducir esta serie de comandos.

Por último veamos que harı́amos en el caso en que los datos vinieran dados en un con-
junto de puntos distribuidos de manera no regular. Para ello consideraremos un ejemplo que
consistirá en la representación gráfica de los datos de profundidades en la zona del Golfo de
Cádiz, Estrecho de Gibraltar y Mar de Alborán. Supondremos que estos datos batimétricos
están contenidos en el fichero batimetria.dat en tres columnas conteniendo la coordenada
x, la coordenada y y la profundidad z, respectivamente. Para ello en primer lugar habrá que
abrir el fichero con el comando fopen, habrá que proceder a la lectura del fichero con el
comando fscanf y para concluir con la lectura de los datos habrá que cerrar el fichero con
el comando fclose. Más concretamente haremos,

% Ejemplo batimetria Golfo de Cadiz - Mar de Alboran


% Lectura de los datos del fichero de batimetrias
>> fid = fopen(’batimetria.dat’) % Apertura del fichero.
>> B = fscanf(fid,’%g %g %g’,[3 inf]); % Lectura de los daros.
>> fclose(fid) % Cerramos el fichero.

Mediante el comando fscanf procedemos a la lectura del fichero formateado que tiene por
identificador el valor de la variable fid y procedemos a la lectura de sus 3 columnas y de
todas sus filas ([3, inf]).
A continuación llamamos xd, yd y zd a las coordenadas x e y de los puntos y a sus
profundidades, respectivamente.

>> xd=B(1,:);
>> yd=B(2,:);
>> zd=B(3,:);

Una vez extraidos los datos generamos una malla rectangular que contega a todos es-
tos puntos mediante el comando meshgrid e interpolamos las profundidades en esta malla
mediante el comando griddata. Ahora ya es posible representar gráficamente la batimetrı́a
haciendo uso del comando mesh o alguna de sus variantes. Es decir, tendrı́amos que hacer,
5.3 Interpolación 2D 45

>> plot(xd,yd,’.’) % Puntos donde tenemos dadas profundidades.


>> [xi,yi] = meshgrid(-40:2:160,0:2:120); % Crear malla rectangular.
>> zi = griddata(xd,yd,zd,xi,yi,’cubic’); % Interpolar datos en la malla.
>> meshc(xi,yi,-zi) % Representar graficamente.

El resultado del conjunto de estos comandos puede verse en la figura 5.5.

120

100

80

60

40

20

0
−50 0 50 100 150 200

500
0
−500
−1000
−1500
−2000
120
100
80 140 160
60 80 100 120
40 40 60
20 0 20
0 −40 −20

Figura 5.5: Comando mesh para representar datos dados sobre una malla rectangular.
46 Ajuste de curvas e interpolación
Capı́tulo 6

Programación en Matlab

En este capı́tulo abordaremos las cuestiones mediante Matlab.

6.1. Prealocación de memoria en matrices y vec-


tores
x = random(’norm’,10,2,1,100);
for i = 1:length(x)
if x(i) > 0
sx(i) = sqrt(x(i));
else
sx(i) = 0;
end
end

x = random(’norm’,10,2,1,100);
sx = zeros(size(x))
for i = 1:lenght(x)
if x(i) > 0
sx(i) = sqrt(x(i));
end
end
48 Bibliografı́a
Bibliografı́a

[1] P. Quintela. Introducción a Matlab y sus Aplicaciones. Servicio de Publicaciones de


la Universidad de Santiago, 1997.

[2] Inc. The MathWorks. Matlab. Edición de Estudiante. Versión 4. Prentice Hall, 1996.

[3] Inc. The MathWorks. The Student Edition of Matlab. Version 5 User’s Guide. Prentice
Hall, 1997.
Índice alfabético

También podría gustarte