Beruflich Dokumente
Kultur Dokumente
MATLAB
Lenguajes de Programacin
Lenguajes de Programacin
MATLAB es fundamentalmente un programa para clculo matricial. Para definir una matriz no hace falta establecer de antemano su tamao (de hecho, se puede definir un tamao y cambiarlo posteriormente). Las matrices se definen por filas; los elementos de una misma fila estn separados por blancos o comas, mientras que las filas estn separadas por pulsaciones intro o por caracteres punto y coma (;).
Lenguajes de Programacin
Lenguajes de Programacin
Una sencilla operacin con A es hallar su matriz traspuesta. En MATLAB el apstrofo (') es el smbolo de trasposicin matricial. Para calcular A' (traspuesta de A) basta teclear lo siguiente (se aade a continuacin la respuesta del programa): >> A' ans = 1 4 7 2 5 8 3 6 9
Lenguajes de Programacin 5
La variable ans puede ser utilizada como operando en la siguiente expresin que se introduzca. Tambin podra haberse asignado el resultado a otra matriz llamada B: >> B=A' B= 1 4 7 2 5 8 3 6 9
Lenguajes de Programacin
Ahora ya estn definidas las matrices A y B, y es posible seguir operando con ellas. Por ejemplo, se puede hacer el producto B*A (deber resultar una matriz simtrica): >> B*A ans = 66 78 90 78 93 108 90 108 126
Lenguajes de Programacin
En MATLAB se accede a los elementos de un vector poniendo el ndice entre parntesis (por ejemplo x(3) x(i)). Los elementos de las matrices se acceden poniendo los dos ndices entre parntesis, separados por una coma (por ejemplo A(1,2) A(i,j)). Las matrices se almacenan por columnas (aunque se introduzcan por filas, como se ha dicho antes), y teniendo en cuenta esto puede accederse a cualquier elemento de una matriz con un slo subndice. Por ejemplo, si A es una matriz (3x3) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4).
Lenguajes de Programacin 8
Invertir una matriz es casi tan fcil como trasponerla. A continuacin se va a definir una nueva matriz A -no singularen la forma: >> A=[1 4 -3; 2 1 5; -2 5 3] A= 1 4 -3 2 1 5 -2 5 3
Lenguajes de Programacin
Ahora se va a calcular la inversa de A y el resultado se asignar a B. Para ello basta hacer uso de la funcin inv( ) B=inv(A) B= 0.1803 0.2213 -0.1885 0.1311 0.0246 0.0902 -0.0984 0.1066 0.0574
Lenguajes de Programacin
10
Para comprobar que este resultado es correcto basta pre multiplicar A por B; >> B*A ans = 1.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000
Lenguajes de Programacin
11
De forma anloga a las matrices, es posible definir un vector fila x en la forma siguiente (si los tres nmeros estn separados por blancos o comas, el resultado ser un vector fila): >> x=[10 20 30] % vector fila x= 10 20 30 MATLAB considera comentarios todo lo que va desde el carcter tanto por ciento (%) hasta el final de la lnea.
Lenguajes de Programacin 12
Si los nmeros estn separados por intros o puntos y coma (;) se obtendr un vector columna: >> y=[11; 12; 13] % vector columna y= 11 12 13
Lenguajes de Programacin
13
MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Por ejemplo, si se intenta sumar los vectores x e y se obtendr el siguiente mensaje de error: >> x+y ??? Error using ==> + Matrix dimensions must agree.
Lenguajes de Programacin
14
Lenguajes de Programacin
15
.* ./ y .\ .^
producto elemento a elemento divisin elemento a elemento elevar a una potencia elemento a elemento
Lenguajes de Programacin 16
Los operadores anteriores se pueden aplicar tambin de modo mixto, es decir con un operando escalar y otro matricial. En este caso la operacin con el escalar se aplica a cada uno de los elementos de la matriz. Considrese el siguiente ejemplo: >> A=[1 2; 3 4] A= 1 2 3 4
Lenguajes de Programacin 17
en donde x y b son vectores columna, y A una matriz cuadrada invertible. La resolucin de este sistema de ecuaciones se puede escribir en las 2 formas siguientes:
x = inv(A)*b x = A\b
Lenguajes de Programacin 18
En MATLAB existe tambin la posibilidad de aplicar elemento a elemento los operadores matriciales (*, ^, \ y /). Para ello basta precederlos por un punto (.). Por ejemplo: >> [1 2 3 4]^2 ??? Error using ==> ^ Matrix must be square. >> [1 2 3 4].^2 ans = 1 4 9 16
Lenguajes de Programacin 19
> [1 2 3 4]*[1 -1 1 -1] ??? Error using ==> * Inner matrix dimensions must agree. >> [1 2 3 4].*[1 -1 1 -1] ans = 1 -2 3 -4
Lenguajes de Programacin
20
Tipos de datos
MATLAB es un programa preparado para trabajar con vectores y matrices. Como caso particular tambin trabaja con variables escalares (matrices de dimensin 1). MATLAB trabaja siempre en doble precisin, es decir guardando cada dato en 8 bytes, con unas 15 cifras decimales exactas. Ya se ver ms adelante que tambin puede trabajar con cadenas de caracteres (strings) y, desde la versin 5.0, tambin con otros tipos de datos: Matrices de ms dos dimensiones, matrices dispersas, vectores y matrices de celdas, estructuras y clases y objetos.
Lenguajes de Programacin 21
linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y x2 logspace(d1,d2,n) genera un vector con n valores espaciados logartmicamente entre 10^d1 y 10^d2. Si d2 es pi6, los puntos se generan entre 10^d1 y pi rand(3) forma una matriz de nmeros aleatorios entre 0 y 1, con distribucin uniforme, de tamao (3x3) rand(2,5) idem de tamao (2x5)
Lenguajes de Programacin 23
randn(4)
magic(4)
hilb(5)
forma una matriz de nmeros aleatorios de tamao (4x4), con distribucin normal, de valor medio 0 y varianza crea una matriz (4x4) con los nmeros 1, 2, ... 4*4, con la propiedad de que todas las filas y columnas suman lo mismo crea una matriz de Hilbert de tamao (5x5). La matriz de Hilbert es una matriz cuyos elementos (i,j) responden a la expresin (1/(i+j-1)). Esta es una matriz especialmente difcil de manejar por los grandes errores numricos a los que conduce
Lenguajes de Programacin 24
zeros(size(A)) forma una matriz de ceros del mismo tamao que una matriz A previamente creada ones(size(A)) dem con unos A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los elementos de un vector ya existente x x=diag(A) forma un vector x a partir de los elementos de la diagonal de una matriz ya existente A
Lenguajes de Programacin
26
diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se le pasan como argumentos triu(A) forma una matriz triangular superior a partir de una matriz A (no tiene por qu ser cuadrada). tril(A) dem con una matriz triangular inferior
Lenguajes de Programacin
27
Lenguajes de Programacin
28
Por defecto el incremento es 1, pero este operador puede tambin utilizarse con otros valores enteros y reales, positivos o negativos. En este caso el incremento va entre el valor inferior y el superior. >> x=1:2:10 x= 13579 >> x=10:-1:1 x= 10 9 8 7 6 5 4 3 2 1
Lenguajes de Programacin 29
Operadores relacionales
Operador Descripcin Menor que Mayor que Menor o igual que Mayor o igual que Igual que Distinto que
Lenguajes de Programacin 30
Operadores lgicos
Operador Descripcin and
& | ~
or
negacin lgica
Lenguajes de Programacin
31
Seno hiperblico
Lenguajes de Programacin 32
Funcin
Descripcin Coseno hiperblico Tangente hiperblico Arco seno hip. Arco coseno hip. Arco tangente hip. Logaritmo natural
Logaritmo decimal
Lenguajes de Programacin 33
Funcin
Descripcin funcin exponencial raz cuadrada devuelve -1 si <0, 0 si =0 y 1 si >0. resto de la divisin similar a rem
redondeo hacia el entero ms prximo
redondea hacia el entero ms prximo a 0
Lenguajes de Programacin 34
Descripcin valor entero ms prximo hacia - valor entero ms prximo hacia + partes reales partes imaginarias valores absolutos ngulos de fase
Lenguajes de Programacin
35
min(x)
sum(x)
Lenguajes de Programacin
36
Descripcin devuelve el vector suma acumulativa de los elementos de un vector valor medio de los elementos de un vector
std(x) prod(x)
Lenguajes de Programacin
37
Funcin cumprod(x)
Descripcin
devuelve el vector producto acumulativo de los elementos de un vector [y,i]=sort(x) ordenacin de menor a mayor de los elementos de un vector x. Devuelve el vector ordenado y, y un vector i con las posiciones iniciales en x de los elementos en el vector ordenado y.
Lenguajes de Programacin
38
Descripcin
calcula la traspuesta (conjugada) de la matriz A calcula la traspuesta (sin conjugar) de la matriz A devuelve un vector v con los coeficientes del polinomio caracterstico de la matriz cuadrada A
Lenguajes de Programacin
39
Funcin t = trace(A)
Descripcin
devuelve la traza t (suma de los elementos de la diagonal) de una matriz cuadrada A [m,n] = size(A) devuelve el nmero de filas m y de columnas n de una matriz rectangular A
devuelve el tamao de una matriz cuadrada A devuelve el nmero de filas de A devuelve el nmero de columnas de A
Lenguajes de Programacin
40
2. PROGRAMACIN DE MATLAB
Lenguajes de Programacin
41
SENTENCIA IF
En su forma ms simple, la sentencia if se escribe en la forma siguiente
Lenguajes de Programacin
42
Existe tambin la bifurcacin mltiple, if condicion1 bloque1 elseif condicion2 bloque2 else bloque4 end
Lenguajes de Programacin 43
SENTENCIA SWITCH
switch switch_expresion case case_expr1, bloque1 case {case_expr2, case_expr3, case_expr4,...} bloque2 ... otherwise, % opcin por defecto bloque3 end
Lenguajes de Programacin 44
SENTENCIA FOR
for i=1:n sentencias end o bien, for i=vectorValores sentencias end donde vectorValores es un vector con los distintos valores que tomar la variable i.
Lenguajes de Programacin 45
SENTENCIA WHILE
while condicion sentencias end donde condicion puede ser una expresin vectorial o matricial. Las sentencias se siguen ejecutando mientras haya elementos distintos de cero en condicion, es decir, mientras haya algn o algunos elementos true. El bucle se termina cuando todos los elementos de condicion son false
Lenguajes de Programacin 46
SENTENCIA BREAK
la sentencia break hace que se termine la ejecucin del bucle ms interno de los que comprenden a dicha sentencia.
Lenguajes de Programacin
47
SENTENCIA CONTINUE
La sentencia continue hace que se pase inmediatamente a la siguiente iteracin del bucle for o while, saltando todas las sentencias que hay entre el continue y el fin del bucle en la iteracin actual.
Lenguajes de Programacin
48
SENTENCIAS TRY...CATCH...END
La construccin try...catch...end permite gestionar los errores. try sentencias1 catch sentencias2 end En el caso de que durante la ejecucin del bloque sentencias1 se produzca un error, el control de la ejecucin se transfiere al bloque sentencias2. Si la ejecucin transcurriera normalmente, sentencias2 no se ejecutara nunca.
Lenguajes de Programacin 49
FUNCIN INPUT
La funcin input permite imprimir un mensaje en la lnea de comandos de MATLAB y recuperar como valor de retorno un valor numrico o el resultado de una expresin tecleada por el usuario. >> n = input('Teclee el nmero de ecuaciones')
Lenguajes de Programacin
50
FUNCIN DISP
La funcin disp permite imprimir en pantalla un mensaje de texto o el valor de una matriz, pero sin imprimir su nombre.
Lenguajes de Programacin
51
FUNCION FPRINTF
La cadena de control contiene los formatos de escritura. Por ejemplo:
vol = 2.0393938; fprintf('El volumen de la esfera es: %12.5f \ n',vol); El volumen de la esfera es: 2.03939
Lenguajes de Programacin
52
En el ejemplo expuesto, El volumen de la esfera es la cadena que se exhibir, %12.5f es el formato, y \n es el operador de cambio de lnea.
Lenguajes de Programacin
53
DEFINICIN DE FUNCIONES
La primera lnea de un fichero llamado name.m que define una funcin tiene la forma:
Ejercicios
1. Cree un archivo M de funcin, fun_es(x) que calcule la siguiente funcin:
y = 0.5 e - x sen(x)
El argumento debe aceptar tanto un escalar como un vector. Pruebe su funcin tecleando en MATLAB fun_es(3) fun_es([1 2 3])
Lenguajes de Programacin 56
x/3
2. Implementar un programa que permita evaluar evaluar el factorial de un nmero entero positivo. Por ejemplo: Si n = 5: S = 5*4*3*2*1 Si n = 3: S = 3*2*1 3. Implementar programas que permitan evaluar las siguientes series:
Lenguajes de Programacin
57
4. Realizar un programa que permita obtener n nmeros diferentes al azar, comprendidos entre otros dos a y b.
Lenguajes de Programacin
58
3. GRFICOS BIDIMENSIONALES
Lenguajes de Programacin
59
Descripcin
crea un grfico a partir de vectores y/o columnas de matrices, con escalas lineales sobre ambos ejes dem con escala logartmica en ambos ejes dem con escala lineal en el eje de ordenadas y logartmica en el eje de abscisas dem con escala lineal en el eje de abscisas y logartmica en el eje de ordenadas
Lenguajes de Programacin 60
Funcin
title('ttulo') xlabel('tal') ylabel('cual')
Descripcin
aade un ttulo al dibujo aade una etiqueta al eje de abscisas. Con xlabel off desaparece aade una etiqueta al eje de ordenadas. Con ylabel off desaparece
Lenguajes de Programacin
61
Funcin
text(x,y,'texto')
Descripcin
introduce 'texto' en el lugar especificado por las coordenadas x e y. Si x e y son vectores, el texto se repite por cada par de elementos. Si texto es tambin un vector de cadenas de texto de la misma dimensin, cada elemento se escribe en las coordenadas correspondientes
Lenguajes de Programacin
62
Funcin
gtext('texto')
Descripcin
introduce texto con ayuda del ratn: el cursor cambia de forma y se espera un clic para introducir el texto en esa posicin activa la inclusin de una cuadrcula en el dibujo. Con grid off desaparece la cuadrcula
grid
Lenguajes de Programacin
63
Lenguajes de Programacin
64
Lenguajes de Programacin
65
Lenguajes de Programacin
66
Lenguajes de Programacin
67
>> clear; clf; >> x=[0:0.2:10]; y1=0.2*sin(x); y2=0.2*cos(x); >> y3=sin(x).*exp(-0.2*x); >> plot(x,y1,k) >> hold on >> plot(x,y2,r) >> plot(x,y3,b) >> hold off
Lenguajes de Programacin
68
Lenguajes de Programacin
69
COMANDO SUBPLOT
Una ventana grfica se puede dividir en m particiones horizontales y n verticales, con objeto de representar mltiples grficos en ella. Cada una de estas subventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda la figura. La forma general de este comando es: subplot(m,n,i) donde m y n son el nmero de subdivisiones en filas y columnas, e i es la subdivisin que se convierte en activa.
Lenguajes de Programacin 70
>> x=0:0.2:10; >> y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z; >> subplot(2,2,1), plot(x,y) >> subplot(2,2,2), plot(x,z) >> subplot(2,2,3), plot(x,w) >> subplot(2,2,4), plot(x,v)
Lenguajes de Programacin
71
Lenguajes de Programacin
72
Lenguajes de Programacin
73
axis('ij') utiliza ejes de pantalla, con el origen en la esquina superior izda. y el eje j en direccin vertical descendente axis('xy') utiliza ejes cartesianos normales, con el origen en la esquina inferior izda. y el eje y vertical ascendente axis('equal') el escalado es igual en ambos ejes axis('square') la ventana ser cuadrada axis('image') la ventana tendr las proporciones de la imagen que se desea representar en ella (por ejemplo la de una imagen bitmap que se desee importar) y el escalado de los ejes ser coherente con dicha imagen axis('normal') elimina las restricciones introducidas por 'equal' y 'square' axis('off') elimina las etiquetas, los nmeros y los ejes axis('on') restituye las etiquetas, los nmeros y los ejes
Lenguajes de Programacin
74
FUNCIN LINE()
La funcin line() permite dibujar una o ms lneas que unen los puntos cuyas coordenadas se pasan como argumentos. Para dibujar un segmento de color verde entre dos puntos, esta funcin se llamara de la siguiente manera: line([xini, xend]', [yini, yend]', 'color', 'g')
Lenguajes de Programacin
75
Se puede tambin dibujar dos lneas a la vez utilizando la forma: line([xini1 xini2; xend1 xend2], ([yini1 yini2; yend1 yend2]); Se pueden controlar las caractersticas de la lnea por medio de pares parmetro/valor, como por ejemplo: line(x,y,'Color','r','LineWidth',4,'MarkerSize',12,'LieStyle',','Markr ,'*')
Lenguajes de Programacin 76
Ejercicios
1. Grafique las funciones en el dominio que se indica y= y= sen(x) 1+cos(x) 1 1+(x-2) 2 , 0 x 4p ,0 x 4
Lenguajes de Programacin
78
4. GRFICOS TRIDIMENSIONALES
Lenguajes de Programacin
79
DIBUJO DE LNEAS: FUNCIN PLOT3 La funcin plot3 es anloga a su homloga bidimensional plot. Su forma ms sencilla es la siguiente:
>> plot3(x,y,z)
que dibuja una lnea que une los puntos (x(1), y(1), z(1)), (x(2), y(2), z(2)), etc. y la proyecta sobre un plano para poderla representar en la pantalla.
Lenguajes de Programacin
80
Lenguajes de Programacin
81
>> clear; clf; >> x=-1:0.1:1;y=-1:0.1:1; >> [X,Y]=meshgrid(x,y); >> Z=exp(-(X.^2+Y.^2)); >> mesh(X,Y,Z) >> xlabel('x');ylabel('y');zlabel('z')
Lenguajes de Programacin 83
Lenguajes de Programacin
84
surf(U,V,W)
Lenguajes de Programacin
85
alpha(0.4)
%Transparencia
Lenguajes de Programacin
86
>> mesh(X,Y,Z,'EdgeColor','Black')
Lenguajes de Programacin
87
Lenguajes de Programacin
88
Lenguajes de Programacin
89
>>contour3(X,Y,Z,20)
Lenguajes de Programacin
90
surfc(X,Y,Z)
Lenguajes de Programacin
91