MATLAB : UNA BREVE INTRODUCCI´ON 1 Cómo nombrar variables

Anuncio
MATLAB : UNA BREVE INTRODUCCIÓN
CÁLCULO IV
1
Curso 2005-06
Cómo nombrar variables
Los nombres de variables son sensibles a las mayúsculas y a las minúsculas.
Ejemplo 1.1 Items, ITEMS son dos variables distintas.
Los nombres de variables deben comenzar por una letra seguida por cualquier número
de letras, dı́gitos o barras de subrayado.
Ejemplo 1.2
A 16
x597 2bA
S3Lib1
Los caracteres de puntuación no están permitidos pues tienen un significado especial en
MATLAB.
Existen algunos nombres de variables reservados por MATLAB:
• ans: resultado
• pi : número pi
• eps: el número más pequeño tal que añadido a 1 crea un número mayor que 1 en el
ordenador
• flops: contador de operaciones de punto flotante
• inf: que tiende a ∞
• NaN: no es un número
√
• i (y) j : i = j = −1
• nargin: número de argumentos de entrada para una función
• nargout: número de argumentos de salida para una función
• realmin: número real más pequeño utilizable
• realmax: número real más grande utilizable
Ejemplo 1.3 Creación de una variable:
>> items = 12
items =
12
1
2
Comentarios y puntuación
MATLAB ignora lo que está detrás de %
Ejemplo 2.1
>> items = 4% número de items
items =
4
Pueden escribirse varios comandos separados por comas o puntos y coma en una misma
lı́nea. Si se pone una coma se escribe el resultado del comando en pantalla pero si se pone
un punto y coma el resultado no aparece en pantalla.
Ejemplo 2.2
>> valor1 = 4, valor2 = 3; valor3 = 7
valor1 =
4
valor3 =
7
aunque para la variable valor2 el valor almacenado es 3.
Una sucesión de tres puntos indica que el resto del comando se continúa en otra lı́nea:
Ejemplo 2.3
>> cociente = valor1/...
>> valor2
cociente =
1.3333
Esto es cierto siempre que no partamos nombres de variables:
Ejemplo 2.4
>> cociente = valor1/va...
>> lor2
???ente = valor1/valor2
Missing operator, comma o semicolon
Tampoco pueden continuarse los comentarios:
Ejemplo 2.5
>> valor1 = 3%primer...
>> valor
???Undefined function or variable valor
2
3
Números complejos
Ejemplo 3.1
>> c1 = 1 − 2i
c1 =
1.0000 − 2.0000i
Ejemplo 3.2
>> c1 = 1 − 2j% j significa lo mismo que i
c1 =
1.0000 − 2.0000i
Ejemplo 3.3
>> c2 = 3 ∗ (2 − sqrt(−1) ∗ 3)
c2 =
6.0000 − 9.0000i
Ejemplo 3.4
>> c3 = sin(.5) ∗ i
c3 =
0.0000 + 0.4794i
Observemos que en este caso al ser una expresion no podemos añadir la i a sin(.5).
Otra observación importante es que MATLAB trabaja en radianes.
4
Funciones matemáticas más comunes
• abs(x): valor absoluto o módulo de x
• asin(x) : arcoseno
• acos(x) : arcocoseno
• asinh(x) : arcoseno hiperbólico
• acosh(x) : arcocoseno hiperbólico
• angle(x) : ángulo de un complejo (∈ (−π, π] )
• atan(x): arcotangente (∈ (−π, π] )
3
• atanh(x): arcotangente hiperbólico
• conj(x): complejo conjugado
• conj(x): complejo conjugado
• cos(x): coseno
• cosh(x): coseno hiperbólico
• sin(x): seno
• sinh(x): seno hiperbólico
• exp(x): exponencial
• real(x): parte real
• imag(x): parte imaginaria
• log(x): logaritmo natural
• log10(x): logaritmo en base 10
• sign(x): función signo
• sqrt(x): raı́z cuadrada
• tan(x): tangente
• tanh(x): tangente hiperbólica
5
Matrices
Para definirlas:
>> A = [ 1 3 5 ; 1 0 1 ; 5 0 9]
A=
135
101
539
Para sumar matrices el comando es + y para multiplicar el comando es * siempre que
las sumas y productos tengan sentido. Por ejemplo para multiplicar dos vectores fila con el
mismo número de elementos el comando será:
>> x = d ∗ p0 ;
4
aquı́ p0 representa el vector traspuesto de p y x el resultado del producto escalar de d y p.
Para dividir dos escalares x1 y x2 el comando es:
>> g = x1/x2;
El comando x1\x2 representa x2/x1 y entonces tiene sentido que para resolver el sistema
Ad = b donde A es una matriz y b y d son vectores utilicemos el comando \ . La expresión
>> d = A \ b;
resuelve el sistema Ad = b a través de una factorización LU. Podrı́a hacerse de la forma
>> d = inv(A) ∗ b;
pero es más caro.
Si el sistema posee más ecuaciones que incógnitas el uso del operador \ da como resultado
el vector d que minimiza el error cuadrático en Ad−b. Esta es la llamada solución en mı́nimos
cuadrados.
Ejemplo 5.1
>> A = [1 2 3 ; 4 5 6 ; 7 8 0 ; 2 5 8]
A=
123
456
780
258
>> b = [366 804 351 514]0
b=
366
804
351
514
>> d = A \ b % cálcula la solución mı́nimo cuadrática
d=
247.9818
−173.1091
114.9273
5
En MATLAB los elementos de una matriz pueden ser manipulados individualmente o en
bloques:
>> X(1, 3) = C(4, 5) + V (9, 1)
A(:, 3) representa la tercera columna de A y A(5, :) la quinta fila.
Veamos distintos ejemplos de manipulación de matrices en MATLAB:
Ejemplo 5.2
>> A = [2 3 4 5 6 ; −4 − 5 − 6 − 7 − 8 ; 3 5 7 9 1 ; 4 6 8 10 12 ; −2 − 3 − 4 − 5 − 6]
A=
2
3
4
5
6
−4 − 5 − 6 − 7 − 8
3
5
7
9
1
4
6
8
10
12
−2 − 3 − 4 − 5 − 6
>> v = [1 3 5];
>> b = A(v, 2)
b=
3
5
−3
es decir b está compuesto por los elementos 1, 3 y 5 de la segunda columna de A.
Si ejecutamos:
>> C = A(v, :)
C=
2
3
4
5
6
3
5
7
9
1
−2 − 3 − 4 − 5 − 6
es decir C está formado por las filas 1, 3 y 5 de A
6
Otro ejemplo:
>> D = zeros(3);
>> D(:, 1) = A(v, 2);
Aquı́ primero hemos construido una matriz 3 × 3 de ceros y despues hemos sustituido su
columna 1 por los elementos 1 , 3 y 5 de la columna 2 de A.
Ejecutando:
>> E = A(1 : 2, 4 : 5)
E=
5
6
−7 − 8
Si A es una matriz compleja A0 es la matriz traspuesta conjugada y A.0 es la traspuesta.
Si la matriz es real los dos operadores coinciden.
Para generar matrices con valores especificados hay distintos modos, pero vemos solo
algunos ejemplos:
>> a = −10 : 10;
crea un vector fila a empezando en -10 sumando 1 cada vez hasta 10.
>> b = −2 : 0.2 : 2;
crea un vector fila b empezando en -2 sumando 0.2 cada vez hasta 2.
6
Algunas matrices especiales
• [ ]: matriz vacı́a
• eye(n) : matriz identidad de dimensión nxn
• ones(n): matriz de unos de dimensión nxn
• rand(n): matriz aleatoria con coeficentes entre 0 y 1
• zeros(n): matriz de ceros de dimensión nxn
7
En agunas aplicaciones aparecen matrices que tienen solo un pequeño número de elementos distintos de cero (matrices huecas): este es el caso en simulación de circuitos y programas
de elementos finitos. Si una matriz de este tipo es grande es conveniente eliminar el almacenamiento de ceros. Además existen algoritmos adaptados a este tipo de matrices. En
MATLAB para convertir una matriz hueca en escritura normal en una matriz almacenada
como hueca se utiliza el comando sparse.
>> B = eye(200);
>> BS = sparse(B);
En este caso B es la matriz identidad en escritura llena y BS la matriz identidad almacenada como hueca.
7
Funciones de matrices
• size(A): dos escalares conteniendo el número de filas y columnas de A
• chol(A) : factorización Cholesky
• cond(A): condicionamiento de A
• d = eig(A): autovalores de A
• [V, D] = eig(A): autovectores y autovalores de A
• expm(A): exponencial de A
• f unm(A,0 f un0 ): función general de A
• inv(A): inversa de A
• norm(A, 1): norma 1 de A
• norm(A, 2): norma 2 de A
• norm(A, inf ): norma infinito de A
• null(A): núcleo de A
• poly(A): polinomio caracterı́stico de A
• qr(A): descomposición triangular ortogonal de A
• trace(A): traza de A
Hay comandos y funciones especiales para matrices huecas pero no las nombraremos aquı́
8
8
Operaciones elemento por elemento
Las operaciones elemento por elemento difieren de las operaciones habituales con matrices
pero suelen ser muy útiles. Se indican con un punto que precede al operador. Por ejemplo
X.∧ Y , X. ∗ Y , X. \ Y . Si en estas sentencias X e Y son matrices o vectores los elementos de
X son elevados, multiplicados o divididos por los correspondientes de Y .
Ejemplo 8.1
>> A = [ 1 2 ; 3 4 ]
A=
12
34
>> B = [ 5 6 ; 7 8 ]
B=
56
78
>> A ∗ B
ans =
19 22
43 50
>> A. ∗ B
ans =
5 12
21 32
9
9
Programando con MATLAB
Para conocer que variables estan definidas el comando es whos . Si se desea conocer el
valor actual de una variable el comando es disp , en la respuesta no aparece el nombre de
la variable.
Los operadores de relación en MATLAB son
• <: menor que
• <=: menor o igual
• >: mayor que
• >=: mayor o igual
• ==: igual a
• ∼=: distinto de
Para repetir la ejecución de uno o varios comandos se utiliza un ciclo for
Ejemplo 9.1 Conocidos A, B, n y m :
>>
>>
>>
>>
>>
f or i = 1 : n
f or j = 1 : m
C(i, j) = A(i, j) + cos(i + j) ∗ pi/(m + n) ∗ B(i, j);
end
end
Ejemplo 9.2
>> f or k = n + 2 : −1 : n/2
>> a(k) = sin(pi ∗ k);
>> end
Cuando la repetición se continua siempre que se satisfaga una cierta condición se utiliza
la sentencia while
Ejemplo 9.3
>>
>>
>>
>>
>>
>>
dif = 1;
while dif > 0.0005
x1 = x2 − cos(x2)/(1 + x2);
dif = abs(x2 − x1);
x2 = x1;
end
10
A veces los comandos deben ser condicionalmente evaluados de acuerdo con un test de
relación. Para ello se utiliza la sentencia if
Ejemplo 9.4
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
f or k = 1 : n
f or p = 1 : m
if k == p
z(k, p) = 1;
total = total + z(k, p);
elseif k < p
z(k, p) = −1;
total = total + z(k, p);
else
z(k, p) = 0;
end
end
end
Ejemplo 9.5
>> if (x ∼= 0)&(x < y)
>> b = sqrt(y − x)/x;
>> end
10
Funciones definidas por el usuario
Se definen en los ficheros .m y la forma más simple es:
function parámetros de salida= nombre de la función (parámetros de entrada)
El nombre de la función y el nombre del fichero deben ser idénticos.
Ejemplo 10.1
>> f unctionp = f un1(x)
>> x = x/2.4;
>> p = x∧ 3 − 2 ∗ x + cos(pi ∗ x);
Ejemplo 10.2
>> f unction[x1, x2] = rootquad(a, b, c)
>> % resuelve ax∧ 2 + bx + c = 0 dados a, b, c
11
>> d = b ∗ b − 4 ∗ a ∗ c;
>> x1 = (−b + sqrt(d))/(2 ∗ a);
>> x2 = (−b − sqrt(d))/(2 ∗ a);
Otra forma de transmitir la información es hacerlo en global. Esto es útil para los
parámetros.
Ejemplo 10.3
>> global alpha;
>> alpha = 7;
>> [f ] = prim(x, it)
donde prim define una función f que incluye alpha como parámetro, por ejemplo: f (x) =
cos(x ∗ alpha).
Una forma de evaluar la función es utilizando el comando feval
>> [r1, r2] = f eval(0 rootquad0 , (1, 2, 3))
11
Ficheros
Los ficheros con la extensión .mat se utilizan con los comandos save y load para almacenar
datos en binario.
Los ficheros con la extensión .m son reconocidos por MATLAB como ficheros de ejecución.
Dentro de ellos se pueden teclear una serie de comandos que luego se ejecutaran al teclear
en MATLAB el nombre del fichero.
Desde dentro de un programa función puede interesarnos abir un fichero para recuperar
o almacenar información:
• Abrir un fichero para escritura con el comando fopen, mediante el cual el fichero
queda identificado por un número. Para cerrarlos el comando es fclose. Si los datos
son binarios, se puede utilizar la siguiente sentencia:
>> f id = f open(0 nombre.de.f ichero0 ,0 wt0 )
• Si se quieren leer datos binarios de un archivo se utiliza el comando fread y para
escribirlos el comando fwrite.
• Si se quieren leer datos formateados de un archivo se utiliza el comando fgetl o fgets
y para escribirlos el comando fprintf.
Algunos comandos de gestión de ficheros :
• cd: muestra el directorio de trabajo
12
• cd path: cambia al directorio path
• chdir: como cd
• delete nombre: borra el fichero nombre.m
• dir: lista los ficheros del directorio de trabajo
• ls: lo mismo que dir
• path: muestra o modicifca el directorio de búsqueda de MATLAB
• type nombre: muestra el fichero nombre.m en la ventana de comandos
• what: devuelve una lista de ficheros .m y ficheros .mat
12
Gráficos
La función plot permite dibujar una curva en el plano xy.
Ejemplo 12.1
>>
>>
>>
>>
x = 0 : pi/100 : 2 ∗ pi;
y = sin(x);
plot(x, y);
title(0 Dibujo 10 );
Este ejemplo dibuja la función seno en el intervalo [0, 2π]. MATLAB permite elegir el
trazado y el color de las curvas y poner un rótulo sobre los ejes:
>>
>>
>>
>>
plot(x, y,0 −r0 );
xlabel(0 x0 )
ylabel(0 y 0 )
title(0 Dibujo 20 );
El ejemplo siguiente corresponde a una superficie en 3D. En concreto es una imagen
original que se utilizará en el problema de restauración de imágenes:
Ejemplo 12.2
>>
>>
>>
>>
>>
>>
z = ones(80); z(13 : 68, 13 : 68) = 2 ∗ ones(size(z(13 : 68, 13 : 68)));
f or i = 25, 56
z(i, 25 : i) = z(i, 25 : i) + ones(1, i − 24);
mesh(z);
end;
title(0 Dibujo 30 );
13
13
Bibliografiı́a
• Introducción a MATLAB y sus aplicaciones: P. Quintela Estévez. Servicio de Publicaciones de la Universidad de Santiago, 1997.
• Numerical Methods Using MATLAB: G. Linfield y J. Penny. Ellis-Horwood, 1995.
• Mastering MATLAB: D. Hanselman y B. Littlfield. Prentice-Hall, 1996.
• The Student Edition of MATLAB: Prentice-Hall, 1995.
14
Descargar