Professional Documents
Culture Documents
MATLAB
Departamento: Metal Mecnica ITV
OBJETIVO:
El alumno reconocer los elementos bsicos del lenguaje MATLAB y su ambiente de desarrollo integrado.
Ventana de comandos.
DIRECTORIO ACTUAL.
Los programas de MATLAB se encuentran en archivos con la extensin *.m.
Para que un archivo *.m se pueda ejecutar es necesario que se cumpla una de las dos condiciones siguientes:
Que est en el directorio actual. MATLAB mantiene en todo momento un nico directorio con esta condicin. Este directorio es el primer sitio en el que MATLAB busca cuando desde la lnea de comandos se le pide que ejecute un archivo.. Que est en uno de los directorios indicados en el Path de MATLAB
5. Comprueba si hay ficheros llamados nombre1.mex, nombre1.dll o nombre1.m en los directorios incluidos en el search path de MATLAB.
Estos pasos se realizan por el orden indicado. En cuanto se encuentra lo que se est buscando se detiene la bsqueda y se utiliza el archivo que se ha encontrado.
Sensible al tamao.
Continuacin de lnea tres puntos suspensivos
Comentarios se preceden con %.
Tipos de datos.
Por defecto todos los elementos son tratados como double en arreglos. (8 bytes , 15 cifras decimales).
Constantes de inters.
eps inf NaN El nmero ms pequeo para el cual 1+eps > 1+(2.22x10-16) Infinito No es un nmero.
i or j
pi
realmin Ms pequeo nmero positivo (2.2x10-308) . realmax Ms grande nmero positivo (1.7977x10308).
clear global
clear all
Arrays simples.
Ejemplo:
x = [23 45 12 2+3i
-2i]
Direccionamiento de arrays.
Definicin de variables.
Definicin de escalares y vectores desde el teclado.
Inicializacin. a = 10; b = [ 1.5 3.2] ; b=[123 4 5 6];
% Escalar a = 10. % Vector fila separacin de los datos por espacio o coma. % Vector fila de 6 elementos, con continuacin de lnea
c = [ 1.5 ; 3.2 ]; % Vector columna la separacin entre reglones por ; o c = [ 1.5 3.2 ];
d = [ 1 2 3 ; 2 4 6] ;
o d=[123 2 4 6 ];
Ejemplo
35.83333333333334 3.5833e+01 35.83333333333334e+01 4041eaaaaaaaaab 35.83 + 215/6 35.8333
Comentario
16 dgitos 5 dgitos mas exponente 16 dgitos mas exponente hexadecimal 2 dgitos decimales positivo, negativo o cero aproximacin racional visualizacin por defecto
primero:incremento:ltimo
x = 1: 10;
time = 0: 0.5 :2;
valores = 10: - 1: 1 ; % [ 10 9 8 7 6 5 4 3 2 1]
Como puede verse, este operador por defecto produce vectores fila.
Funcion linspace.
Otra forma de crear arreglos con elementos igualmente espaciados es a travs de la funcin linspace.
Extraccin de sub-matrices.
Sea a = [ 1 2 3 ; 456; 7 8 9] >> a(3, : )
% Todos los elementos de la tercera fila [ 7 8 9]
>> a( : , 2:3)
>> a( 1:2:3,2)
a(: ) representa un vector columna, con las columnas de a una detrs de la otra
Operadores aritmticos.
MATLAB cuenta con los siguientes operadores aritmticos.
Operador
^ * / \
Descripcin.
Potenciacin Multiplicacin. Divisin Div inversa. Suma resta
Baja
+ -
Operaciones de arrays con escalares. La suma, resta, multiplicacin y divisin por un escalar simplemente aplica la operacin a todos los elementos del array Ejemplo:
x = [1 2 3 4 5 6]; 4*x-7
ans =
-3 1 5 9 13 17
Cuando dos arrays tienen la misma longitud, la suma y la resta se aplican sobre la base de elemento a elemento Para multiplicar o dividir dos arrays elemento a elemento se utilizan los operandos: .* , ./ y .\ ejemplo: (a./b=b.\a) Para la potencia elemento a elemento se utiliza .^
Operadores aritmticos.
Ejemplo.
>> A = [1 2 3; 4 5 6]; B = [7 8 9; 0 1 2]; >> A + B % Suma de matrices. ans = 8 10 12 4 6 8 >> A*B % Multiplicacin de matrices. ans = 50 8 122 17 >> A*B % La multiplicacin es incorrecta!
??? Error using ==> * % due to incompatible dimensions Inner matrix dimensions must agree.
angle(x)
asin(x) asinh(x) atan(x) atanh(x) ceil(x) conj(x) cos(x) cosh(x) exp(x) log (x)
Angulo de complejos
Arcoseno Arcoseno hiperblico Arcotangente Arcotangente hiperblica Redondeo hacia + Complejo conjugado Coseno Coseno hiperblico Exponencial e1=2.71 Logaritmo neperiano
sign(x)
sin(x) sinh(x) sqrt(x) tan(x) tanh(x) fix(x)
Funcin signo
Seno Seno hiperblico Raiz cuadrada Tangente Tangente hiperblica Redondeo hacia cero
Funciones con arrays. Las funciones se aplican a los elementos individuales de los arrays Ejemplo:
x = [0 pi/4 pi/2 3*pi/4 pi]
sin(x) ans = 0
0.7071
1.0000
0.7071 0.0000
Descripcin
Forma una matriz identidad de tamao (4x4) Forma una matriz de ceros de tamao (3,5) Matriz de ceros de (4x4) Forma una matriz de unos de (3x3) De tamao (2x4) Forma una matriz de numeros aleatorios entre 0 y 1 con distribucin uniforme de tamao (3x3) De tamao (2x5)
Operaciones comunes.
Operaciones bsicas.
Transpuesta.
t = a El producto de [a] por su transpuesta dar una matriz simtrica. s = a * t;
Nmeros complejos.
MATLAB en forma implcita trabaja con nmeros complejos, por ejemplo:
>> a = sqrt(-4)
a=
>> b = 2 + 3i b=
0+
+2i
2+
3i
Polinomios.
Los polinomios en Matlab son representados por vectores filas conteniendo los coeficientes en orden decreciente.
Races del polinomio: roots(p) Polinomio asociado a unas races: poly(p) Multiplica dos polinomios: conv(p1,p2) Divide dos polinomios: deconv(p1,p2) Clculo de derivadas: polyder(p) Evaluacin de polinomios: polyval(p,n) Desarrollo en fracciones parciales: residue(p)
Cadena de caracteres.
A diferencia de C las constantes de cadena de caracteres se colocan entre comillas simples o apostrofes y son tratadas como arreglos de caracteres.
Ejemplo. >> s = esto es una cadena de caracteres; >> s1 = Press return to exit; >> s2 = the program; >> s3 = strcat(s1,s2) s3 = Press return to exit the program >> s4 = s1(1:12) s4 = Press return
% Crea una cedana (string) % Crea otra cadena % Concatena s1 y s2
Operadores relacionales.
Como es natural en MATLAB se aplican tambin a nivel de vectores y matrices. Estos operadores se aplican elemento a elemento cuando se aplican en vectores o matrices.
ans =
000 111
Operadores Lgicos.
Operador
& | ~
Descripcin
AND OR NOT
Entrada .
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.
Cualquier expresin valida de MATLAB es aceptada por el comando. El usuario puede teclear un escalar, un vector , una matriz
input (cadena de peticin : ); >> a = input(Enter expression: ) Enter expression: tan(0.15) a= 0.1511 >> s = input(Enter name: , s) Enter name: Jose Antonio s= Jose Antonio Para cadena de caracteres.
Salida formateada.
La funcin fprintf permite la salida formateada. fprintf(formato,lista) Donde formato contiene informacin de cmo mostrar los datos y lista son los elementos que sern mostrados, separados por comas. Los ms comunes especificadores de formato son: %w.df %w.de notacin de punto flotante. notacin exponencial.
Donde w es el nmero de columnas utilizadas para mostrar el dato y d es el nmero de dgitos despus del punto decimal.
Ejemplo.
>> x = 0:0.2:1; >> for i = 1:length(x) fprintf(%4.1f %11.6f \n ,x(i), sin( x(i) ) ) end 0.0 0.2 0.4 0.6 0.8 1.0 0.000000 0.198669 0.389418 0.564642 0.717356 0.841471
11 columnas 6 dgitos
Salida a un archivo.
% los siguientes comandos, generan un archivo llamado exp.txt
Archivo de datos generado. Obsrvese el orden en que aparecen estos. Recuerde que las matrices en MATLAB se encuentran columna tras columna.
Archivos *.m.
MATLAB cuenta con dos formas de escribir lneas de programas: La ventana de comandos y el editor/debuger: La ventana de comandos es un modo de interactuar que conforme son escritos los comandos estos son inmediatamente procesados.
La ventana de edicin es usada para escribir y guardar programas (llamados archivos de comandos script files o funciones). Antes de que el programa o funcin pueda ser ejecutado, este deber de ser guardado como un archivo m.
Cuando una funcin es llamada la primera ves durante la ejecucin de un programa, esta es compilada en P-code (pseudo cdigo) para acelerar su ejecucin en subsecuentes llamados.
Archivos de funciones.
La primera lnea (que no sea un comentario si existe) del archivo de funciones llamado name.m que define una funcin tiene la forma:
Donde name es el nombre de la funcin. Entre corchetes y separados por comas van los valores de retorno (siempre que haya mas de uno) y entre parntesis tambin separados por comas los argumentos. La diferencia importante con otros lenguajes, es que en MATLAB se pueden tener valores de retorno matriciales.
La sentencia return.
Una funcin normalmente regresa el control al programa que la llamo cuando esta alcanza su final, sin embargo se puede forzar este regreso a travs de la sentencia return.
En el siguiente ejemplo se emplea el mtodo de Newton Raphson para encontrar la solucin de f(x) = sin x 0.5 x. El valor de dx es refinado sucesivamente hasta que este es lo suficientemente pequeo. El ciclo for asegura que no se excedan 30 iteraciones, suficientes para la convergencia del mtodo.
function x = solve(x) for numIter = 1:30 dx = -(sin(x) - 0.5*x)/(cos(x) - 0.5); % -f(x)/f(x) x = x + dx; if abs(dx) < 1.0e-6 % error < epsilon >> x = solve(2) return x= end 1.8955 end error(Demasiadas iteraciones)
>> x = solve(2) % numIter not printed x= 1.8955 >> [x,numIter] = solve(2) % numIter is printed x= 1.8955 numIter = 4 >> format long >> x = solve(2,1.0e-12) % Solving with extra precision x= 1.89549426703398 >>
Sub funcin.
% @myfunc es el manejador.
Funciones inline.
Cuando las funciones no son muy complejas, estas pueden ser representadas por un objeto inline:
Donde expresion define la funcin y var1, var2 son los nombres de las variables independientes.
Ejemplo.
El siguiente programa solicita al usuario una ecuacin para graficarla en el intervalo de [ 0, 2 pi].
clear; clc;
f = input('Ecuacion ','s');
fun = inline(f,'x'); x = linspace(0, 2*pi,101); y = fun(x); plot(x,y)
f = input('Ecuacion ','s');
x = linspace(0, 2*pi,101); y = eval(f); plot(x,y)
Sub funciones.
Las sub-funciones, son funciones adicionales definidas en el mismo archivo *.m con nombres diferentes del nombre del archivo ( y del nombre de la funcin principal) . Estas funciones solo pueden ser llamadas por las funciones contenidas en ese archivo, resultando invisibles para otras funciones externas.
Grficos bidimensionales..
MATLAB cuenta con un tipo especial de ventanas para realizar las operaciones graficas. Ciertos comandos abren una ventana nueva y otros dibujan sobre la ventana activa, bien sustituyendo lo que hubiera en ella, bien aadiendo nuevos elementos grficos a un dibujo anterior.
Funciones elementales.
MATLAB dispone de cuatro comandos bsicos para crear grficos 2D, estas funciones se diferencian principalmente por el tipo de escala que utilizan. comando
plot()
loglog() semilogx()
Crea un grafico a partir de vectores y/o columnas de matrices con escalas lineales sobre ambos ejes.
Con escalas logartmicas en ambos ejes. Con escala lineal en el eje de las ordenadas y logartmicas en el eje de las abscisas.
semilogy()
Ejemplo.
clear; clc; close ; % cierra la ventana grafica activa. x = 0:0.1:10; y = sin(x); z = cos(x); plot(x,y, x,z); grid; xlabel('x') title('graficas de seno y coseno'); legend('sinx ', 'cos y');
Comando subplot().
Una ventana grfica se puede dividir en m particiones horizontales y n verticales, con objeto de representar mltiplos grficos en ella. Cada una de las subventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda la figura. La forma general del 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. Las subdivisiones se numeran consecutivamente empezando por la primera fila, siguiendo por la segunda, etc.
Funcin fplot().
La funcin fplot admite como argumento un nombre de funcin o un nombre de archivo *.m . La funcin puede ser escalar o vectorial. La forma general de esta funcin es la siguiente:
Funcin fplot().
Lgica de Programacin.
Representacin algortmica.
Sintaxis.
true expresion
false sentenciaA
Lgica de Programacin.
Esta sentencia permite realizar una bifurcacin, ejecutando una parte u otra del programa segn se cumpla o no una cierta condicin.
Se evala la expresin. Si el resultado es true , se ejecuta el bloqueA y si el resultado es false, se ejecuta el bloqueB.
Lgica de Programacin.
Diagrama de flujo.
if condicion1 bloque1 elseif condicion2 bloque2 elseif condicion3 bloque3 ... [else bloqueDefecto] end
Sentencia switch.
La sentencia switch realiza una funcin anloga a un conjunto ifelseif concatenados. Su forma general es la siguiente.
switch expresion case exp1 bloque1 case { exp2, exp3,exp4 } bloque2 otherwise % opcion por defecto. bloqueDefecto end
La expresin debe ser un numero escalar o una cadena de caracteres. Como puede verse es posible agrupar varias expresiones entre llaves
Ejemplo.
function y = trig(func,x) switch func case sin y = sin(x); case cos y = cos(x); case tan y = tan(x); otherwise error(No such function defined) end >> trig(tan,pi/3) ans = 1.7321
Lgica de Programacin.
Ejemplo.
El siguiente ejemplo determina el numero de aos que se requiere para que un capital de $ 1000,00 crezca a $ 10000.00 a una taza de inters anual del 6%.
>> p = 1000; years = 0; >> while p < 10000 years = years + 1; p = p*(1 + 0.06); end
>> years years = 40
function x = buildvec for i = 1:1000 elem = input(==> ); if isempty(elem) break end x(i) = elem; end
El comando error.
La ejecucin de un programa puede ser terminada mostrando un mensaje de error a travs de:
error(mensaje)
Por ejemplo, las siguientes lneas de un programa determinan la dimensin de una matriz y aborta el programa si la matriz no es cuadrada. [m,n] = size(A); % m = no. of rows; n = no. of cols. if m = n error(Matrix must be square) end