PROGRAMANDO CON MATLAB GENERALIDADES Programar en MatLab es usar
una serie de comandos que permitan realizar una tarea o
función específica. Estos pueden ser escritos uno
por uno a través de la línea de comandos:
A=[1 2 3;4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 Ejemplo
Los archivos de disco que contienen instrucciones de MATLAB se
llaman archivos-M. Esto es así porque siempre tienen una
extención de ".m" como la última parte de su nombre
de archivo. Un archivo-M consiste de una secuencia de
instrucciones normales de MATLAB, que probablemente incluyen
referencias a otros archivos-M. Un archivo-M se puede llamar a
sí mismo recursivamente. Puedes crear archivos-M
utilizando un editor de texto ó procesador de palabras.
Hay dos tipos de archivos-M: los de comandos y las funciones. Los
archivos de comandos, automatizan secuencias largas de comandos.
Los archivos de funciones, permiten añadir a MATLAB
funciones adicionales expandiendo asi la capacidad de este
programa. Ambos, comandos y funciones, son archivosordinarios de
texto ASCII. ARCHIVOS-M: COMANDOS Y FUNCIONES
Cuando un archivo de comandos es invocado, MATLAB simplemente
ejecuta los comandos encontrados en dicho archivo. Las
instrucciones en un archivo de comando operan globalmente en los
datos en el espacio de trabajo. Los comandos son utilizados para
hacer análisis, resolver problemas, ó
diseñar secuencias largas de comandos que se conviertan en
interactivas. Por ejemplo, suponga que el archivo fibo.m contiene
los siguientes comandos de MATLAB: % Un archivo-M para calcular
los elementos de la serie de Fibonacci f = [1 1]; i = 1; while
f(i) + f(i+1) < 1000 f(i+2) = f(i) + f(i+1); i = i + 1; end
plot(f) ARCHIVOS DE COMANDOS
Si escribimos fibo en una ventana de MATLAB seguido de
"enter“ vemos que MATLAB calcula los primeros 16
números de Fibonacci, y luego grafica estos. Luego que la
ejecución del archivo es completada, las variables f y i
permanecen en el espacio de trabajo. Los programas de
demostraciones incluidos en MATLAB son ejemplos de como usar
comandos para hacer tareas más complicadas. Para utilizar
estos escriba demos en el "prompt" de MATLAB.
Un archivo-M que contiene la palabra function al principio de la
primera línea, es un archivo de función. En una
función, a diferencia de un comando, se deben de pasar los
argumentos. Las variables definidas y manipuladas dentro de la
función son locales a esta y no operan globalmente en el
espacio de trabajo. Los archivos de funciones se utilizan para
extender a MATLAB, i.e., crear nuevas funciones para MATLAB
utilizando el lenguaje propio de MATLAB. El archivo mean.m
contiene las instrucciones: function y = mean(x) % Valor medio. %
Para vectores, mean(x) retorna el valor medio de los % elementos
del vector x. % Para matrices, mean(x) es un vector fila
conteniendo el % valor medio de cada columna. [m, n] = size(x);
if m == 1 m = n; end y = sum(x)/m; ARCHIVOS DE FUNCIONES
(Las lineas que comienzan con "%" son interpretadas como
comentarios por MATLAB). La existencia de este archivo en el
disco duro define una nueva función en MATLAB llamada
mean. Si z es un vector de los enteros desde 1 a 99, por ejemplo,
z = 1:99; entonces, el valor promedio es encontrado escribiendo
mean(z) que resultaría ans = 50
Ejemplo % Ejemplo de un archivo-m % Creación del vector x
usando el comando for n=5; for i=1:n x(i)=i^2; end x % Fin del
archivo-m Este ejemplo es un archivo-m tipo comando. Para
ejecutarlo, en la línea de comandos se debe escribir el
nombre del archivo: >> ejemplo x = 1 4 9 16 25
Ejemplo % Calcula el promedio de los elementos de un vector y %
dibuja dicho vector % Sintaxis: promedio(x) donde x es el vector
a promediar function p = promedio(x) n=length(x); p=0; for i=1:n
p=p+x(i); end p=p/n; plot(x);
Algunas funciones elementales son: real(a) Parte real imag(a)
Parte imaginaria conj(a) Conjugado de a fft(x) Transformada
discreta de Fourier del vector x fft(x,n) FFT de n puntos
muestrales ifft(x) Transformada inversa rápida de Fourier
del vector x ifft(x,n) FFT inversa de n puntos muestrados zeros
Inicializa a ceros zeros(n) Matriz de nxn de ceros zeros(m,n)
Matriz de mxn de ceros y=zeros(size(A) Matriz del tamaño
de A, todos ceros OTRAS FUNCIONES FUNCIONES
MATEMÁTICAS
Ejemplo size Regresa el número de filas y columnas A = 0 7
-6 1 0 0 0 1 0 >> [m n]=size(A) m = 3 n = 3
tril(A) Matriz triangular inferior triu(A) Matriz triangular
superior pascal Triangulo de Pascal tocplitz Tocplitz FUNCIONES
MATRICIALES La descomposición de Valores Singulares es
importante para el análisis de problemas que envuelvan
matrices. La asignación triple [U, S, V] = svd(A) produce
los tres factores en la descomposición de valores
singulares A = U*S*V'. Las matrices U y V son ortogonales y la
matriz S es diagonal. La función svd(A) devuelve solamente
los elementos de la diagonal de S, que son los valores singulares
de A. DESCOMPOSICIÓN DE VALORES SINGULARES
La Descomposición de Valores Propios se utiliza para
obtener los valores y vectores propios de una matriz cuadrada A.
La función eig(A) devuelve los valores propios de A en un
vector columna. La asignación [X,D]=eig(A) produce una
matriz diagonal D cuyos elementos diagonales son los valores
propios de A y las columnas de X son los vectores propios
correspondientes. Las Funciones de norma, rango y
acondicionamiento asociadas son: cond – número de
condición en la norma 2 norm – norma 1, norma 2, norma F,
norma rank – rango rcond – estimado del número de
condición DESCOMPOSICIÓN DE VALORES PROPIOS
Ejemplo: El archivo-M llamado humps.m contiene las siguientes
instrucciones: function y = humps(x) y = 1./((x-.3).^2 +.01) +
1./((x-.9).^2 +.04) – 6; y para la gráfica de la
función escribimos x = -1:.01:2; plot(x, humps(x)) Las
funciones de funciones para ecuaciones no-lineales y
optimización incluyen: fmin mínimo de una
función de una variable fmins mínimo de una
función multi-variable (minimización no-lineal sin
restricciones) fzero cero de una función de una variable
constr minimización con restricciones fsolve
solución de ecuación no-lineal leastsq cuadrados
mínimos no-lineales ECUACIONES NO-LINEALES Y FUNCIONES DE
OPTIMIZACIÓN
Las funciones de MATLAB para resolver problemas de valor inicial
para ecuaciones diferenciales ordinarias son: ode23 método
Runge-Kutta de largo de paso variable que combina un
método de orden dos con uno de orden tres. ode45
método Runge-Kutta-Fehlberg de largo de paso variable que
combina un método de orden cuatro con uno de orden cinco.
Ejemplo to=0; tf=10; [t,x]=ode23(`edif',to,tf,xo);
[t,x]=ode23(`deriv',to,tf,xo); ode45
[t,x]=ode23(`deriv',to,tf,xo,to1,trace); ode45 trace => 0 – no
resuntados intermedios 1 – resultados intermedios default tol:
ode23 -> 1.0e-03 ode45 -> 1.oe-06 FUNCIONES PARA ECUACIONES
DIFERENCIALES
function nombre_1=nombre_2(parametro_1, …, parametro_n)
Ejemplos: function y=promedio(x) function i=inodal(t,v) function
xpunto=vdpol(t,x) xpunto=zeros(2,1);
xpunto(1)=x(1).*(1-x(2).^2)-x(2); xpunto(2)=x(1);
DECLARACIÓN DE function SINTAXIS
OPERADORES RELACIONALES Los operadores relacionales de MatLab
son: < menor que <= menor o igual a > mayor que >=
mayor o igual a == igual a =~ no igual a Ejemplo: if n< maxn
… if n>=0, break, end
Los operadores &, | y ~ son los operadores de lógica
"y", "ó" y "no" respectivamente. El resultado de C = A
& B es una matriz cuyos elementos son unos donde A y B sean
ambos distintos de cero, y ceros donde A ó B sean cero. A
y B deben de ser matrices con las mismas dimensiones, a menos que
una de ellas sea un escalar. El resultado de C = A | B es una
matriz cuyos elementos son unos donde A ó B tienen un
elemento diferente de cero, y ceros donde ambas tienen elementos
cero. A y B deben de ser matrices con las mismas dimensiones, a
menos que una sea un escalar. El resultado de B = ~A es una
matriz cuyos elementos son uno donde A tiene un elemento cero, y
ceros donde A tiene elementos diferentes de cero. OPERADORES
LÓGICOS
La función any(x) devuelve 1 si cualquiera de los
elementos de x es diferente de cero, de lo contrario devuelve 0.
La función all(x) devuelve 1 solamente si todos los
elementos de x son diferentes de cero. Estas funciones se usan en
cláusulas if. Por ejemplo: if all(A <.5) . . . end
FUNCIONES any Y all
Para argumentos matriciales, any y all trabajan por columnas para
devolver un vector fila con el resultado para cada columna.
Aplicando la función dos veces, any(any(A)), siempre
reduce la matriz a una condición escalar. Las funciones
relacionales y lógicas en MATLAB son: any condiciones
lógicas all condiciones lógicas find halla
índices de arreglos de valores lógicos exist
verifica si existen variables isinf detecta infinitos finite
verifica para los valores finitos
Los caracteres especiales de MatLab son: [ ] Se utilizan para
formar vectores y matrices ( ) Define precedencia en expresiones
aritméticas. Encierra argumentos de funciones en forma
usual , Separador de elementos de una matriz, argumentos de
funciones y declaraciones en líneas con declaraciones
múltiples ; Termina filas de una matriz, separador de
declaraciones % Comentario Ejemplos: [6.0 9.0 3.4 ] sqrt(2) for
i=1:n, a(i)=0, end for i=1:n; a(i)=0; end % inicia vector a en 0
CARACTERES ESPECIALES
for variable=incio:paso:final declaración 1; …
declaración n; end for variable=inicio:final
declaración 1; … declaración n; end CONTROL DE
FLUJO DECLARACIÓN DE for SIMPLE SINTAXIS
Ejemplo: for i=1:n c(i)=a(i)*b(i); end o for i=1:n;
c(i)=a(i)*b(i); end El ciclo FOR permite que una
instrucción, ó grupo de instrucciones, pueda
repetirse un número determinado de veces. Por ejemplo, for
i = 1:n, x(i) = 0, end asigna 0 a los primeros n elementos de x.
Si n es menor de 1, el ciclo sigue siendo válido pero
MATLAB no ejecuta la instrucción intermedia. Si x no esta
definido, ó si tiene menos de n elementos, entonces un
espacio adicional es localizado automáticamente a x cada
vez que sea necesario.
while expresion proposición 1; … proposición 2;
end DECLARACIÓN while SINTAXIS e=1.0; while
(1.0+e)>1.0001 e=e/2.0; end it=1; t=0; wo=2.0*pi*60.0; while
it<=npts, ut=sin(wo*t);t=t+dt;end Ejemplos
El ciclo WHILE permite a una instrucción, ó grupo
de instrucciones, repetirse un número indefinido de veces,
bajo el control de una condición lógica. El
siguiente ciclo while halla el primer entero n para el cual n! es
un número de 100 digitos: n = 1; while prod(1:n) <
1.0e100, n = n+1; end n Un cálculo más
práctico ilustrando el ciclo while es en el cómputo
del exponencial de una matriz, llamado expm(A) en MATLAB. Una
posible definición de la función exponencial es
mediante la serie: expm(A) = I + A + A^2/2! + A^3/3! + …
La idea es sumar todos los términos necesarios hasta
producir un resultado que, en la precisión finita la de
computadora, no cambie aunque más términos sean
añadidos. Para esto procedemos de la forma siguiente: E =
zeros(size(A)); F = eye(size(A)); k = 1; while norm(E+F-E, 1)
> 0 E = E + F; F = A*F/k k = k+1; end Aqui A es la matriz
dada, E representa la suma parcial de la serie, F es un
término individual en la serie, y k es el índice de
este término.
a) if expresión proposición 1; …
proposición n; end b) if expresión
proposición 1; … proposición n; else
proposición 1; … proposición m; end DECLARACIONES
if, else, elself Y break SINTAXIS c) if expresión
proposición 1; … proposición n; elseif
proposición 1; … proposición m; else
proposición 1; … proposición r; end d) if
expresión, break, end
Ejemplo >> A=[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9
ALGEBRA MATRICIAL CREACIÓN DE UNA MATRIZ
matriz_modificada = reshape(matriz_original, filas, columnas)
Ejemplo >> A=[1 4 7 10; 2 5 8 11; 3 6 9 12] A = 1 4 7 10 2
5 8 11 3 6 9 12 >> B=reshape(A,2,6) B = 1 3 5 7 9 11 2 4 6
8 10 12 CAMBIO DEL ORDEN DE UNA MATRIZ: reshape SINTAXIS
>> A=[1 2; 3 4] A = 1 2 3 4 >> A(1,1)=A(1,2)+A(2,1) A
= 5 2 3 4 MODIFICACIÓN INDIVIDUAL DE ELEMENTOS >>
A(1,2)=A(2,1) A = 5 3 3 4 >> A(2,2)=10 A = 5 3 3 10
EJEMPLOS
>> A=[1 2; 3 4; 5 6 ] A = 1 2 3 4 5 6 >> b=A(:) b = 1
3 5 2 4 6 CONVERSIÓN DE UNA MATRIZ EN UN VECTOR
>> x=1:5 x = 1 2 3 4 5 >> x=5:-1:1 x = 5 4 3 2 1
>> x=0:0.25:1 x = 0 0.2500 0.5000 0.7500 1.0000
GENERACIÓN DE VECTORES: Ejemplos
Si la matriz original A es de 10*10, entonces: A(1:3,5) matriz de
3×1 que tiene los tres primeros elementos de la columna 5 de A
A(1:3, 5:9) matriz de 3×4 que tiene los tres primeros filas y las
columnas de 5 a 9 de A A(:,5) quinta columna de A A(1:5,:)
primeras cinco filas de A A(:,[4 6])=B(:,1:2) remplaza la cuarta
y sexta columnas de A con las dos primeras de A ACCESO A
SUBMATRICES CONTIGUAS Y NO CONTIGUAS Ejemplos
A=[1 2; 3 4] + i*[5 6 ; 7 8] o A=[1 2; 3 4] + i*[5 6 ; 7 8] o
A=[1+5i 2+6i; 3+7i 4+8i] A = 1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 7.0000i 4.0000 + 8.0000i DECLARACIÓN DE MATRICES
COMPLEJAS
>> x=(0.0:0.2:3.0); >> y=exp(-x).*sin(x); >>
[x;y] ans = Columns 1 through 7 0 0.2000 0.4000 0.6000 0.8000
1.0000 1.2000 0 0.1627 0.2610 0.3099 0.3223 0.3096 0.2807 Columns
8 through 14 1.4000 1.6000 1.8000 2.0000 2.2000 2.4000 2.6000
0.2430 0.2018 0.1610 0.1231 0.0896 0.0613 0.0383 Columns 15
through 16 2.8000 3.0000 0.0204 0.0070 GENERACIÓN DE
TABLAS
>> A=[1 2 3;4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >>
det(A) ans =0 DETERMINANTE DE A: det(A) >> A=[0 7 -6; 1 0
0;0 1 0] A = 0 7 -6 1 0 0 0 1 0 VALORES Y VECTORES
CARACTERÍSTICOS: eig(A) >> eig(A) ans = -3.0000
2.0000 1.0000
>> [v d]=eig(A) v = 0.9435 -0.8729 0.5774 -0.3145 -0.4364
0.5774 0.1048 -0.2182 0.5774 d = -3.0000 0 0 0 2.0000 0 0 0
1.0000 v – Vectores característicos d – valores
característicos >> A=[0 7 -6; 1 0 0;0 1 0] A = 0 7
-6 1 0 0 0 1 0 >> expm(A) ans = 5.2541 11.0757 -13.6115
2.2686 5.2541 -4.8044 0.8007 2.2686 -0.3510 Exponencial de una
matriz: expm(A) >> inv(A) ans = 0 1.0000 0 0 0 1.0000
-0.1667 0 1.1667 Inversa de A: inv(A) Ecuación
característica de la matriz A: poly(A) >> p=poly(A)
p = 1.0000 0.0000 -7.0000 6.0000
id = fopen(`nombre.dat', `permiso') donde permiso puede ser: `r'
Abre archivo para lectura `r+ Abre archivo para lectura y
escritura `w' Borra el contenido del archivo existente o crea un
nuevo archivo y lo abre para escritura `w+' Idem que `w'
únicamente que el archivo se abre para lectura y escritura
`a' Crea y abre un nuevo archivo o abre un archivo `a+' Idem que
`a' únicamente que el archivo es abierto para lectura y
escritura ARCHIVOS DE E/S DECLARACIÓN fopen SINTAXIS
Ejemplo fid = fopen(`archivo.dat','r') fid = -1, error 0,
lectura/escritura normal [fid, mensaje =
fopen(`archivo.dat','r')
DECLARACIÓN fclose SINTAXIS status = fclose(fid) o status
= fclose (`all') – cierra todos los archivos abiertos
DECLARACIÓN fread SINTAXIS Lee un archivo abierto con una
precisión ndicada fread(fid,registros,'precision')
registros `char' o `uchar' `short' o `long' `float' o `double'
Ejemplo: A = fread(fid,10,'float') fwrite(fid,A,'short')
DECLARACIÓN fwrite SINTAXIS Salida con formato Ejemplos:
fprintf(fid,'titulon'); fprintf(fid,'%f %12.7fn', y); Formato
%s – cadena decimal %d – número decimal %f – punto
flotante % g – formato g DECLARACIÓN fprintf
ESTA PRESENTACIÓN CONTIENE MAS DIAPOSITIVAS DISPONIBLES EN
LA VERSIÓN DE DESCARGA