Professional Documents
Culture Documents
SIMULACION.
Dr. Jorge Arturo Hernndez Zrate
Ingeniera Mecnica - Mecatrnica
MATLAB
Departamento: Metal Mecnica ITV
OBJETIVO:
El alumno reconocer los elementos bsicos del lenguaje
MatLab y su ambiente de desarrollo integrado.
COMMAND WINDOW.
sta es la ventana en la que se ejecutan interactivamente las
instrucciones de MATLAB y en donde se muestran los resultados
correspondientes, si es el caso.
En cierta forma es la ventana ms importante.
WORKSPACE .
El espacio de trabajo de MATLAB (Workspace) es el conjunto de
variables y de funciones de usuario que en un determinado momento
estn definidas en la memoria del programa.
Ms adelante se ver que cada funcin tiene su propio espacio de trabajo, con
variables cuyos nombres no interfieren con las variables de los otros espacios
de trabajo.
Sensible al tamao.
Tipos de datos.
Por defecto todos los elementos son tratados como double en arrays.
8 bytes , 15 cifras decimales exactas
Escalares,.
Vectores.
Matrices.
Estructuras.
String.
Clases y objetos.
Valores especiales.
inf , NaN
eps 2.22x10-16
realmin (2.2x10-308) , realmax (1.7977x10308)
Constantes de inters.
eps
inf
infinito
NaN
No es un numero.
i or j
pi
(3.1415)
clear global
clear all
Definicin de variables.
Definicin de escalares y vectores desde el teclado.
Inicializacin.
a = 10;
b = [ 1.5 3.2] ;
b=[123
4 5 6];
o
d=[123
2 4 6 ];
Referencia a un elemento individual a travs de ndices:
d(2,1)
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=
0+
+2i
2+
3i
>> b = 2 + 3i
b=
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
valores = 10: - 1: 1 ; % [ 10 9 8 7 6 5 4 3 2 1]
Como puede verse, este operador por defecto produce vectores fila.
El siguiente ejemplo, genera una tabla de senos y csenos
Funciones linspace.
Otra forma de crear arreglos con elementos igualmente espaciados es a
travs de la funcin linspace.
>> x = linspace(0,1,5)
x=
0 0.2500 0.5000 0.7500 1.0000
Extraccin de sub-matrices.
Sea a = [ 1 2 3 ;
456;
7 8 9]
>> a[3,:]
>> a[ : , 2:3]
>> a[ 1:2:3,2]
2
0
0
0
3
0
0
0
4
1
2
3
Ejemplo
funcin
Descripcin
eye(4)
zeros(3,5)
zeros(4)
ones(3)
ones(2,4)
De tamao (2x4)
rand(3)
rand(2,5)
De tamao (2x5)
Operadores aritmticos.
MATLAB cuenta con los siguientes operadores aritmticos.
Operador
Descripcin.
Alta
Potenciacin
*
/
\
Multiplicacin.
Divisin
Div inversa.
Baja
+
-
Suma
resta
==========
==========
===========
.^
.* ./ .\
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.
>>
>> A.*B
ans =
7 16 27
0 5 12
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.
Ejemplo.
>> A = [1 2 3; 4 5 6]; B = [7 8 9; 0 1 2];
>> A > B
ans =
000
111
Operadores lgicos.
MATLAB cuenta con los siguientes operadores lgicos.
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
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
Ejemplo.
Carcter de
control \n: salto de
lnea
>> 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
x = 0:.1:1;
y = [x; exp(x)];
fid = fopen('exp.txt','w');
fprintf(fid,'%6.2f %12.8f\n',y);
fclose(fid)
0.00
0.10
0.20
0.30
0.40
0.50
0.60
0.70
0.80
0.90
1.00
1.00000000
1.10517092
1.22140276
1.34985881
1.49182470
1.64872127
1.82211880
2.01375271
2.22554093
2.45960311
2.71828183
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) y 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 (ver comando pcode).
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:
function [lista de valores de retorno] = name(lista de argumentos)
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 formar esta 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 x 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)
Sub funcin.
>> x = solve(@myfunc,2)
x=
1.8955
% @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.
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.
function r = funcionPrincipal(a,b)
r = subFuncion1(a,b);
function x = subFuncion1(y, z)
x = subFuncion2(y,z);
function x = subFuncion2(y,z)
x = y+z+2;
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 2-D,
estas funciones se diferencian principalmente por el tipo de escala
que utilizan.
comando
plot()
loglog()
semilogx()
semilogy()
comando
title(texto)
xlabel(texto)
ylabel(texto)
legend()
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 segundo,
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:
Lgica de Programacin.
Sintaxis.
if condicion
sentencias;
end
Lgica de Programacin.
Sintaxis.
if condicion
bloqueA
else
bloqueB
end
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.
while expresion
for
for vc = vi [:inc]: vf
sentencias
end
Ingeniera meca trnica. ITV
sentencias;
end
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
>> x = buildvec
==> 3
==> 5
==> 7
==> 2
==>
x=
3 5 7 2
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