Documente Academic
Documente Profesional
Documente Cultură
2015 - I
Introduccin
Los grandes avances de la ingeniera moderna se han apoyado enormemente en
el uso de las herramientas computacionales, estas facilitan y agilizan los procesos
iterativos de clculo, permiten realizar simulaciones y el manejo ptimo de gran
cantidad de informacin. Aunque comercialmente se encuentran paquetes
computacionales que realizan labores muy especializadas en ingeniera
(AutoCAD, Solid Edge, Working Model, etc.) es necesaria la formacin de
profesionales en el manejo de las estructuras bsicas de programacin. Estas le
permiten solucionar problemas especficos y generar sus propios programas o
algoritmos de solucin.
Las herramientas programables, tambin son muy tiles en el proceso de
formacin del profesional, porque se reduce el tiempo de clculos manuales,
permitiendo un mejor anlisis y comprensin de los problemas. Es normal cometer
errores mientras se realiza cualquier calculo, por lo tanto es necesario revisar de
nuevo el problema, y esto implica realizar de nuevo todas las operaciones del
mismo, duplicando el tiempo necesario para realizar el ejercicio o resolver el
problema. De esta forma, la aplicacin de algoritmos computacionales permite
identificar fcil y rpidamente errores obtenidos en el proceso de anlisis; y en los
procesos de diseo, permiten realizar iteraciones en busca de la mejor opcin
(optimizacin).
MATLAB es un software para realizar clculos en ingeniera, ciencias y
matemticas aplicadas. Este ofrece un potente lenguaje de programacin,
excelentes grficas y un amplio rango de aplicaciones cientficas especializadas.
MATLAB es publicado y una marca registrada de The MatWorks, Inc.
Contenido
Tema 1: Introduccin al Matlab
Tema 2: Uso de los comandos bsicos
Tema 3: Vectores y matrices. Conceptos Bsicos
Tema 4: Empezando a trabajar con ficheros .m
Tema 5: Introduccin a los grficos en 2 Dimensiones
Tema 6: Introduccin a los grficos en 3 Dimensiones
Tema 7: Programacin con Matlab
Tema 8: Tratamiento de datos. Ficheros
Tema 9: Otros temas de aplicacin
Tema 10: Simulink
Figura 1
Figura 2
A este mismo navegador de ayuda del Matlab se puede acceder a travs de la tecla ?
(figura 3).
Figura 3
- Sine.
sinh
- Hyperbolic sine.
asin
- Inverse sine.
asinh
cos
- Cosine.
cosh
- Hyperbolic cosine.
acos
- Inverse cosine.
acosh
tan
tanh
- Hyperbolic tangent.
atan
- Inverse tangent.
atan2
atanh
sec
- Secant.
sech
- Hyperbolic secant.
asec
- Inverse secant.
asech
csc
- Cosecant.
csch
- Hyperbolic cosecant.
acsc
- Inverse cosecant.
acsch
cot
- Cotangent.
coth
- Hyperbolic cotangent.
acot
- Inverse cotangent.
acoth
Exponential.
exp
- Exponential.
log
- Natural logarithm.
log10
log2
pow2
realpow - Power that will error out on complex result. reallog - Natural logarithm of real number.
realsqrt - Square root of number greater than or equal to zero. sqrt
- Square root.
- Absolute value.
angle
- Phase angle.
- Complex conjugate.
- Complex imaginary part.
- Complex real part.
unwrap
isreal
floor
ceil
round
mod
rem
- Remainder
sign
- Signum.
after division.
SIN Sine.
SIN(X) is the sine of the elements of X.
Overloaded methods
2.2. Workspace
Esta ventana del espacio de trabajo permite la visualizacin de las variables
almacenadas en memoria. Da una informacin completa sobre ellas: nombre, tipo,
tamao y clase
Pinchando dos veces en la variable se accede al Array editor donde se nos
10
Figura 4
11
Figura 5
12
13
Operaciones bsicas
Comenzaremos realizando con el programa las operaciones ms bsicas entre
nmeros. Trabajamos en la ventana de Command window y para ello se utilizan las
convenciones matemticas estndar.
Por ejemplo, para sumar (figura 6):
>> 2+2
ans 4
Figura 6
14
a+b
Suma
a-b
Resta
a*b
Producto
a/b
Divisin
a^b
Potencia
Nota: Por defecto Matlab trabaja con unos dgitos de aproximacin para nmeros
decimales. Esto puede cambiarse.
format short
format long
format short e
format long e
format rat
formato racional.
Ejemplos:
>>3^100
5.1538e+047
>>5+pi
8.1416
15
>>format short e
>>3^100
5.1538e+047
>>5+pi
8.1416 e+000
>>format long
>>3^100
5.153775207320113e+047
>>5+pi
8.14159265358979
>>format long e
>>3^100
5.153775207320113e+047
>>5+pi
8.141592653589793e+000
>> format rat
>> 5+pi
920/113
Nmeros complejos
Matlab integra perfectamente el trabajo con nmeros complejos. La letra
minscula i j representa el nmero imaginario
manera los nmeros complejos se representan mediante expresiones del tipo a+bi
a+bj.
imag(z):
conj(z):
abs(z):
obtiene el mdulo de z.
angle(z):
obtiene el argumento de z.
16
2. Variables
Las variables en Matlab tienen forma matricial: fila y columna. As, si
trabajamos con una variable unidimensional se crea con la forma de una fila y una
columna. Para hacerlo slo debemos teclear el nombre elegido e igualarlo a su valor:
>> a=8
Figura 7
17
Figura 8
O a travs de del men desplegado al pinchar con el botn derecho del ratn sobre la
variable situada en el Workspace (figura 9). Esta opcin nos permite guardar slo las
variables seleccionadas. Destacar que esto tambin ofrece la posibilidad de eliminar la
variable. Algo que puede hacerse de forma global desde el men Edit, submen Clear
Workspace.
Figura 9
18
Figura 10
Figura 11
19
4. Variables carcter
Una cadena de caracteres determinan una variable carcter. Su sintaxis es:
a=cadena de caracteres
Como vemos es necesario incluir los caracteres entre comillas.
Se destacan algunos comandos importantes que manejan este tipo de
variables y que se irn usando en temas sucesivos:
str2mat(x1,x2,...):
20
>> num2str(pi)
ans =
3.142
Se ha convertido el nmero exacto pi en cadena de caracteres.
>> str2num(15/14)
ans =
1.0714
Se ha convertido una cadena a su valor exacto con la precisin por defecto.
>> disp(hola)
ans =
hola
Se ha obtenido en pantalla la palabra escrita como argumento del comando.
21
b tan( / 3) + e a
1
3
+
i . Calcular zxw y z/w.
2
2
22
>> A=[1 2 3; 4 5 6; 7 8 9]
La respuesta del programa es:
123
456
789
23
Figura 12
2. Operaciones elementales
Operaciones bsicas como suma, producto o trasposicin de hacen como se
muestra
continuacin,
permitindose
algunas
operaciones
no
definidas
matemticamente:
24
\ divisin-izquierda: A\B
Si A es cuadrada A\B=inversa(A)*B. Si A no es cuadrada A\B es la solucin en
el sentido de mnimos cuadrados del sistema AX=B.
/ divisin-derecha: A/B
Si B es cuadrada A/B=A*inversa(B). Si B no es cuadrada, A/B es la solucin del
sistema XB=A.
25
Ofrece como respuesta una matriz del mismo tamao que A cuyos elementos
son el seno del correspondiente elemento de A:
0.8415
0.9093
0.1411
0.9894
0.4121
este
comando
genera
nmeros
pseudoaleatorios
distribuidos
5. Manipulacin de matrices
Con este programa es posible crear matrices a partir de una dada, extraer o
cambiar elementos de una matriz y, en general, manipular de casi cualquier forma
estos elementos. Veamos los diversos caminos para realizarlo:
-
26
Composicin de matrices
Crear una matriz a partir de submatrices es algo muy sencillo para el programa
que sin embargo es de mucha utilidad por ejemplo a la hora de aadir datos o ampliar
informacin.
Si contamos con la submatrices A=[1 2; 3 4] y B=[1,6], C=[A; B] genera la
matriz:
12
34
16
Si tenemos con los vectores u=[1 2 3 4] y v=[1 6], w=[u v] devuelve:
w=[1 2 3 4 1 6]
Manipulacin de elementos
Veremos como extraer, cambiar o eliminar elementos o lneas (filas o columnas
de una matriz).
Dado un vector x, la ejecucin de x(i) devuelve el elemento situado en la
posicin i de ese vector.
En el caso matricial A(i,j) devuelve el elemento situado en la fila i columna j de
la matriz A.
El operador (:) es de gran importancia en Matlab. Puede decirse que es un
operador que respeta el rango. Veamos su utilidad con algunos ejemplos:
>> x=1:10
x=
1
10
>> x=[0:2:10]
x=
27
10
Nota: En general, el operador genera vectores fila. Conocido este operador, podemos
decir que con l es posible definir variables vectoriales:
x= [p:q] general un vector de primer elemento p, ltimo q y los elementos intermedios
se diferencian en una unidad
x= [p:i:q]
>> A(1,:)
ans =
1
>> A(:,2)
ans =
2
4
6
28
2 5 7
1 2 1
3 1
2. Introducir las matrices A = 5 4 3 , B = 4
8 1 3
7 1 0
3. Determinar si es posible:
a. La inversa de A y de B. Verificar que el producto de una matriz por su
inversa es la matriz identidad.
b. La traza de B.
c. El determinante y el rango de A.
Referencia artculo
Cantidad de artculo
100
200
190
101
150
345
102
500
69
103
49
598
29
4
2 8 3
2
4 2
1
9. Introducir la matiz A =
6 9
1 3
5
7 4 0
30
f.
x + 2 y + 3z = 6
x + 3 y + 8 z = 19
2 x + 3 y + z = 1
5 x + 6 y + 4 z = 5
x + 3 y + 5z + t = 1
2 x + y + 3z + t = 2
31
2. Editor
Para crear un nuevo fichero .m elegimos new M-File del men File o elegimos
el icono correspondiente. Aparece entonces la pantalla del editor/Debugger donde
podemos ir escribiendo las sentencias.
En el caso de la figura 13 el fichero contiene comentario, dos sentencias y otro
comentario. Las sentencias seguidas de (;) no se mostrarn en pantalla al ejecutar el
fichero.
32
Figura 13
Es interesante ir conociendo los dems botones y mens del editor que nos
permite eliminar los breakpoints, terminar la ejecucin,.... Resulta muy til para
detectar errores y corregirlos y en general para programar
33
Figura 14
4. Definicin de funciones
En el tema 1 vimos que Matlab tiene definidas sus propias funciones, por
ejemplo Sin, Cos,... En general, el programa tiene un gran nmero de funciones
incorporadas, bien se trata de funciones intrnsecas, es decir, del propio cdigo
ejecutable lo que las hace muy rpidas y eficientes, o bien se trata de funciones
definidas en ficheros, normalmente .m, que vienen con el programa. A todo ello se
34
unirn las funciones creadas por el propio usuario. La importante diferencia de estas
ltimas es que, para que el programa pueda trabajar con ellas, el correspondiente
fichero .m debe estar en el directorio actual o en el path.
El trabajo con funciones y el propio concepto de funcin en Matlab es parecido
al que se tiene en C y en otros lenguajes de programacin. Toda funcin tendr:
-
Funciones especiales.
Integracin numrica.
>> sin(A)
35
ans =
0.8415
0.9093
0.1411
>>
Existen otras que slo actan sobre vectores, no sobre escalares ni matrices.
Por ejemplo, max(x), min(x) devuelve el elemento mximo y mnimo de entre los
elementos del vector x. Tambin nos dan la posicin donde se encuentra.
>> A=[1 2 3]
A=
1
>> max(A)
ans =
3
>> [p,q]=max(A)
p=
3
q=
3
>>
De igual forma, otras funciones slo se aplican sobre matrices. Son las que se
encuentran en el grupo de funciones matriciales elementales, funciones matriciales
especiales y funciones de factorizacin y/0 descomposicin matricial. Por ejemplo
trace(A) que nos da la traza de la matriz A, [p,q]=eig(A) nos da los valores propios y
vectores propios asociados a la matriz A.
36
El siguiente ejemplo, figura 15, define una funcin f que calcula el cuadrado del valor
que se desee:
Figura 15
Es importante destacar:
-
37
Figura 16
Destacar tambin que esta funcin se aplica sobre cualquier tipo de entrada
para la que est definida la operacin. En este caso si lo aplicamos sobre
un vector o una matriz no cuadrada nos dar un mensaje de error. S se
aplica sobre matrices cuadradas calcula el producto de dicha matriz por ella
misma. Si queremos que la funcin f se aplique sobre todo tipo de matrices
calculando el cuadrado de cada elemento es suficiente con definir la
operacin con el punto delante:
function p=f(x);
p=x.^2
38
Figura 17
El comando eval
Este comando se utiliza para trabajar con cadenas, algo que se coment en el
tema 1.
Supongamos que definimos una funcin como una cadena de caracteres desde
la lnea de comandos, para ello se utilizan las comillas:
>> f='x^2+5'
f=
x^2+5
El comando eval se utiliza como sigue:
>> x=3;
39
>> eval(f,x)
ans =
14
>>
De forma general se puede hacer:
>> x=3;
>> eval('x ^2+5',x )
ans =
14
>>
Existen algunas funciones relacionadas que trabajan de la misma forma. Tal es
el caso, por ejemplo de:
diff(f,x): Calcula la funcin derivada de f con respecto a x.
diff(f,x,n): Calcula la funcin derivada ensima de f con respecto a x.
Estos comandos entre muchos otros, forman el trabajo de clculo simblico del
programa.
Ejemplos:
>> diff('x^2','x')
ans =
2*x
Si declaramos primeramente la variable x como simblica:
>> syms x;
>> diff('x^2',x,3)
ans =
0
40
x3 x
x2 +1
a. Calcula g(4).
b. Calcula g(x) siendo x=(-2, -1.9, -1.8,........1.8 ,1.9 ,2)
4. Construir una funcin que calcule el ngulo formado entre dos vectores.
5. Define una funcin que permute las filas i y j de una matriz.
6. Construir una funcin ecu(a,b,c) que determine las races de la ecuacin
ax2+bx+c=0.
1 2 3
. Define una funcin que
7. Define como variable global la matriz A=
4 5 6
calcule el incremento de todos los elementos de A en un nmero a elegir.
8. Construir una funcin tal que, dados dos vectores u, v, devuelva un vector con
los elementos de u excepto el primero, y los elementos de v excepto el ltimo.
41
Para representar una funcin f(x) es necesario conocer los valores de puntos
de la forma (x,f(x)). Para ello puede seguirse alguno de estos caminos:
-
42
>> x=linspace(0,10,100);
>> y=sin(x);
>> plot(x,y)
Por defecto, MATLAB dibuja uniendo los puntos con lnea continua de color azul
y un grosor determinado, opciones todas que se podrn alterar como veremos.
-
Tambin es posible dibujar una funcin con el comando fplot cuya sintaxis
es la siguiente: fplot(f(x),[xmin,xmax]). As, este comando admite como
argumento un nombre de funcin o de un fichero .m en el que est definida
la funcin a representar. Por ejemplo:
>> fplot(sin(x)',[-3*pi,3*pi,-1,1])
Mediante el comando: hold on, hold off. Todos los grficos que se ordene
dibujar entre los comandos hold on y hold off se representan en la misma
figura. Si hay una figura abierta se dibujan en sta.
Ejemplo:
>> hold on
>> x=[-3*pi:1:3*pi];
>> plot(x,sin(x))
>> plot(x,tan(x),'r')
>> hold off
43
Figura 18
. *
x o
grfico).
Otros tipos de lnea: los puntos se unen con una lnea con las siguientes
posibilidades de apariencia:
-
(lnea continua)
44
blue
green
red
cyan
point
o
solid
circle
dotted
x-mark
-.
dashdot
plus
--
dashed
magenta
star
yellow
square
black
diamond
triangle (down)
triangle (up)
<
triangle (left)
>
triangle (right)
pentagram
hexagram
45
- Ttulos y etiquetas
Matlab permite manejar correctamente anotaciones sobre los grficos y los ejes
mediante la colocacin adecuada de ttulos y etiquetas, rejillas o leyendas. Los
comandos ms usados son:
title (texto): aade el texto entre comillas como ttulo del grfico.
xlabel(texto): aade el texto entre comillas como texto al lado del eje x.
ylabel(texto): aade el texto entre comillas como texto al lado del eje y.
legend(texto): sita la leyenda especificada en el texto.
grid: crea rejillas en los ejes
gtext(texto): permite situar el texto especificado en el punto que sealemos
con el ratn dentro de la ventana de trabajo.
- Control de ejes
Tambin aqu Matlab tiene sus opciones por defecto. En muchas ocasiones es
interesante alterarlas. Ya hemos visto que la variacin en el eje x se elige al fijar las
coordenadas x de los puntos. Por defecto el programa ajusta la escala de cada uno de
los ejes de modo que vare entre un mximo y el mnimo valor a representar (es el
46
modo auto). Para definir otros se utiliza el comando axis cuya sintaxis es: axis
([xmin,xmax,ymin,ymax]). axis(auto) devuelve la escala al valor por defecto.
Destacar que:
axis off elimina los ejes del dibujo y axis on los incorpora.
[x,y]=ginput: lee los puntos cada vez que se pincha o se pulsa alguna tecla.
Finaliza al pulsar intro.
[x,y]=ginput(n): lee las coordenadas de n puntos
47
Figura 19
Figura 20
48
Figura 21
Las pestaas x,y,z nos permiten actuar sobre cada uno de los ejes, poniendo
etiqutas (Label), cambiando el color (Color), cambiando los lmites (Limit),...
Desde la pestaa superior podemos acceder a otros editores como los de linea
(line). Desde los que se pueden cambiar las opciones correspondientes (figura 22).
Figura 22
49
50
Prctica 5: Grficos 2D
1. Representar grficamente los puntos p1=(1,1), p2=(3,2), p3=(0,4), p4=(-3,6)
primeramente conectados y luego aislados.
2. Representar grficamente las siguientes funciones en ventanas diferentes,
f(x)=sen(x), g(x)=x2+3x en el intervalo [0,2].
3. Representar la grfica de la funcin f(x)=xsen(x) en el intervalo [0,2], con
rejilla.
4. Representar f(x)=sen(x)cos(x) en [0,2], con etiquetas en los ejes, ttulo y en
color rojo.
5. Dibujar el polinomio x2+5x-3 con 200 puntos, en color rojo, con trazo
discontinuo, con ttulo y con rejilla.
6. Representar en [0,6] y en la misma grfica las funciones:
a. f(x)=3xex en azul.
b. g(x)=sen(x+3) en rojo y con trazo discontinuo.
Poner leyendas.
7. Representar la funcin f(x)=3sen(x)-sen(3x) en el intervalo [0,2] con 200
puntos, con ttulo y etiquetas en los ejes.
a. Eliminar los ejes con sus etiquetas y volver a activarlos.
b. Hacer que el eje de abscisas sea el intervalo [0,3] y el rango de las
imgenes el intervalo [0,1].
c. Volver a dibujarla como estaba.
d. Representarla con la misma escala en ambos ejes.
8. Representar en la misma grfica pero en distintas ventanas las siguientes
funciones: x, x2, x3, x4, x5, x6. Las pares en color rojo y con rejilla, las impares en
azul y sin rejilla.
9. Resolver grficamente la ecuacin
x sen( x)
= 0.02 en el intervalo
2
0, 4 . Para
x sen( x)
en el intervalo dado.
2
51
1
en el intervalo [-1,1] y utilizar el zoom para
x
x = sen(3t )
11. Representar la curva de ecuaciones paramtricas
y = sen(2t )
52
53
-1
-1
-1
-1
Y=
Como vemos en este caso hemos generado una malla formada por 16 puntos
de
coordenadas
(1,-1),(1,0),(1,1),(1,2),(2,-1),...(2,2),.......,(4,-1),...(4,2).
Es
bueno
sealar que por el proceso indicado debe tenerse cuidado con las longitudes de los
vectores x e y ya que al generar la malla, el nmero de puntos con los que se va a
trabajar aumenta grandemente.
Slo queda evaluar la funcin f sobre esta malla, es decir Z=f(X,Y) y
representar los valores. Para ello se utilizan los comandos:
-
54
Figura 23
Figura 24
55
inspeccionar cada uno de los mens de esta ventana y ejecutar las opciones
directamente en ella.
- El color
En cuanto a la utilizacin del color, un mapa de colores en Matlab se defina
mediante una matriz de tres columnas con valores entre 0 y 1, que representan la
intensidad de rojo, verde o azul (R,G,B). El comando colormap acta sobre la figura
activa cambiando sus colores. No obstante, existen mapas de colores ya predefinidos
en el programa. Pueden elegirse por ejemplo, desde el la pestaa colormap en el
editor de propiedades de la superficie.
3. Lneas de contorno
Para los grficos en tres dimensiones es de gran utilidad la representacin de
curvas de contorno o de nivel. Algo que puede verse como otra forma de
representacin, figura 25. Para ello Matlab cuenta con el comando contour. Puede
usarse con diferentes sintaxis, por ejemplo:
-
56
Figura 25
57
Prctica 6: Grficos 3D
1. Representar grficamente los puntos siguientes: p1=(1,1,1), p2=(3,2.0),
p3=(0,4,2), p4=(-3,6,8) primeramente conectados y luego aislados.
2. Representar las funciones f(x,y)=sen(x)cos(y) en el intervalo [0,2]x[0,2].
Poner ttulo al dibujo y etiquetas en los ejes.
a. Realizarlo con el comando mesh.
b. Representarlo con el comando surf.
c. Realizarlo de forma seguida primero con mesh y luego con surf para
visualizar las diferencias. Utilizar el comando pause.
3. Representar la grfica anterior junto con la de g(x,y)=ycos(x) en el intervalo
[0,2]x[0,2] pero en distintas ventanas.
4. Representar en la misma figura y sobre los mismos ejes la funcin
x(t ) = 1 + cos(t )
z (t ) = 4t
58
Figura 26
59
60
3. Operadores
Ya hemos estudiado operadores de tipo aritmtico. En este momento puede
ser de utilidad conocer otros tipos de operadores:
Operadores relacionales:
<
Menor
<=
Menor o igual
>=
Mayor o igual
>
Mayor
==
Igualdad
~=
Desigualdad
Operadores lgicos
~A
Negacin lgica
A&B
A|B
xor(A,B)
Ejemplo:
>> A=1:9; P=(A>2)&(A<6)
P= 0 0 1 1 1 0 0 0 0
4. Sentencias de control
El uso de aplicaciones recursivas y condicionales es muy habitual en
matemticas. Para ello si utilizan las bifurcaciones y los bucles.
Las bifurcaciones permiten realizar una u otra operacin segn se cumplan o
no ciertas condiciones. Los bucles repiten operaciones sobre datos distintos.
Algunas de las sentencias de las que dispone Matlab para este tipo de trabajos
son las siguientes:
61
Sentencia for:
Permite ejecutar de forma repetitiva un comando o grupo de comandos. La
forma general de un bucle for es:
for variable=expresin
comandos
end
Por ejemplo:
for i=1:3;v(i)=1;end;v
1
>>
As, un bucle for siempre empieza por la sentencia for y termina con la end. En
su interior incluye todo un conjunto de comandos que se separan por comas. En
algunos casos es bueno poner puntos y comas para evitar repeticiones en las salidas.
Por supuesto puede utilizarse en ficheros .m (figura 27).
Figura 27
Sentencia if:
62
De forma ms general:
If condicin
comandos 1
else
comandos 2
end
que ejecuta comandos 1 si la condicin 1 es cierta y comandos 2 si es falsa.
Sentencia while:
63
Continue
Esta sentencia hace que se pase inmediatamente a la siguiente iteracin del
bucle for o while, saltndose todas las sentencias que existan entre el continue y el
final del bucle en esa iteracin.
Break
Hace que se termine la ejecucin de un bucle for o while.
Nota: existen otras sentencias que pueden ser de inters y que pueden consultarse
en: matlab\lang - Programming language constructs.
64
x 2 1 si 2 x 2
a) Definir la funcin f ( x) = 1
x si x < 2 x > 2
b) Disear un programa que obtenga f(x) si x es un escalar, pero si es un intervalo
(vector de dos componentes) dibuje la funcin en ese intervalo; en caso
contrario debe aparecer un aviso en pantalla.
d) Arreglar el apartado a) para que f se pueda aplicar sobre vectores y nos de las
salidas de la aplicacin de la funcin sobre cada componente.
2. Construir un programa que calcule los cubos de los nmeros naturales cuyo
cuadrado sea menor que un nmero m (que se pide al usuario) y los introduzca
en un vector v.
3. Construir una funcin r(a,b,c) que calcule las races de un ecuacin de 2 grado
ax2+bx+c y que indique:
a. La ecuacin no es de 2 grado si a=0.
b. Que existen 2 races reales distintas.
c. Que existe una raz real doble.
d. Que existen dos races complejas.
65
9. Realiza una tabla que incorpore el valor de los nmeros enteros menores que
20, sus inversos, sus cuadrados y sus races cuadradas. Hacerlo primeramente
con el comando while y luego con el comando for.
66
67
Figura 28
Figura 29
2.2. Comandos
68
Formato de datos:
%d Enteros.
%f Reales con punto fijo.
%e Reales con formato exponencial.
%g Utiliza uno de los formatos anteriores; el que d la mayor precisin en el
menor espacio.
Si se utiliza el comando fprintf(format,A,.) la escritura de datos se realiza en
la pantalla.
Ejemplo:
Creamos un fichero ASCII de nombre resultados que contiene los valores de la
funcin exponencial para valores de la variable entre 0 y 1 separados una dcima y lo
representamos en la pantalla.
>>x=0:.1:1
>>y=[x;exp(x)];
>>fid=fopen(resultado.txt,w);
>> fprintf(fid,%6.2f
1.00000000
0.10
1.10517092
0.20
1.22140276
0.30
1.34985881
69
........
1.00
2.71828183
Comando fscanf
La lectura de datos a partir de un fichero ASCII se realiza mediante los
comandos:
[A,cont]=fscanf(fid,formato) que lee datos con el formato especificado del
fichero abierto con el identificador fid, en un vector columna de nombre A. cont
es el nmero de datos ledos.
[A,cont]=fscanf(fid,formato,size) que lee datos con el formato especificado
del fichero abierto con el identificador fid y los escribe en la matriz A de tamao
size. cont es el nmero de datos ledos.
Ejemplo:
Se supone que en la carpeta de trabajo de MATLAB: work, se encuentra un archivo
de nombre datos.txt, cuyo contenido es:
12345
6 7 8 9 10
>>fid=fopen(datos.txt,r)
>>[A,cont]=fscanf(fid,%d)
La salida es el vector columna de contenido:1 2 3 4 5 6 7 8 9 10 y cont=10.
Otra posibilidad:
>>[A,cont]=fscanf(fid,%d,[2,5])
A=
1 3579
2 4 6 8 10
cont=10
Otras posibilidades:
>>[A,cont]=fscanf(fid,%d,[3,3])
A=
70
147
258
369
cont=9
>>[A,cont]=fscanf(fid,%d,[4,4])
A=
159
2 6 10
370
480
cont=10
>>[A,cont]=fscanf(fid,%d,[4,inf])
>> %se est fijando como nmero de columnas de la matriz el valor mnimo que
permita la lectura de todos los datos del fichero. La salida es la misma que en el caso
anterior.
71
72
75219345784
Almacenar estos datos en una matriz A de 4 filas y 3 columnas.
3. Crear un fichero de Excel con las cantidades compradas de varios productos y
su importe por unidad. Cargarlo en Matlab y calcular all el coste total de la
compra.
73
2. Polinomios
El programa dispone de comandos especficos para realizar las operaciones
ms comunes con polinomios, tal es el caso de bsqueda de races, evaluacin en
determinados valores, diferenciacin, interpolacin y ajuste.
Destacar que los polinomios en Matlab se introducen a partir de vectores cuyos
elementos son los coeficientes del mismo. Si alguno no aparece se introduce como 0.
As, x3+3x2-5 ser [1,3,0,-5].
Los comandos son:
-
74
4. Matrices dispersas
Existen trabajos, especialmente en ingeniera, donde es necesario utilizar
matrices de gran tamao pero con un nmero importante de ceros en su interior
(matrices dispersas). Operar con este tipo de matrices a travs de mtodos
convencionales puede implicar tiempos muy grandes para el clculo. Matlab dispone
de funciones para trabajar con estas matrices dispersas que ahorra tiempos de
ejecucin.
El programa almacena estas matrices dispersas guardando en memoria
solamente los elementos no nulos junto con la posicin que ocupan en la matriz. As,
utiliza tres elementos, los valores de las filas de elementos no nulos, los valores de las
columnas de estos elementos y el valor que tienen.
1
0
Ejemplo: La matriz A =
0
0 0 0
2 3 0
se introducira como:
0 0 9
0 0 0
>> A=sparse([1,2,2,3,4],[1,2,3,4,1],[1,2,-3,9,2])
A=
(1,1)
(4,1)
75
(2,2)
(2,3)
-3
(3,4)
9
Para esto puede ser de utilidad el comando find, [i,j,v]=find(A) tiene como salida
-2
>> S=sparse(B)
S=
(1,1)
(1,2)
(2,2)
(3,4)
-2
(2,5)
(3,6)
-2
5. lgebra lineal
Se destacan algunos temas relacionados con lgebra que pueden ser de
inters y que se realizan con el programa a travs de comandos especficos.
76
Valores propios:
El trabajo con valores y vectores propios es esencial en numerosas disciplinas.
Matlab permite trabajar con esta materia con comandos entre los que destacamos:
Descomposicin de matrices:
Matlab trabaja con mtodos de descomposicin matricial como el LU,
Cholesky, qr,...
Resolucin de ecuaciones:
Matlab permite resolver ecuaciones. Algunos de los comandos para realizarlo
son:
solve(ecuacin,x): Resuelve la ecuacin en la variable x.
solve(ecuacin1,eciacin2,...ecuacinn,x1,x2,...xn): Resuelve el sistema
de ecuacin en las variables x1,...xn.
x=fzero(funcin,x0): Halla un cero de la funcin ceca de x0.
77
78
Beneficios
15
25
prevn que la curva que mejor representa los beneficios durante los prximos
aos es un polinomio de segundo grado. Determinar los beneficios que
esperan obtener el prximo ao.
8. Hallar y representar 30 puntos de interpolacin (x,y) de la funcin sen(x) para
valores de x igualmente espaciados entre 0 y 10.
9. Repetir el problema 8 para interpolacin spline y comparar las grficas
obtenidas.
10. Se considera un conjunto de temperaturas medidas sobre las cabezas de los
cilindros de un motor para utilizar en coches de carreras. Los tiempos de
79
Temperatura 0
20
60
68
77
110
Realizar una regresin lineal que ajuste la temperatura en funcin del tiempo.
Repetirlo para regresiones polinmicas de grados 2, 3 y 4, representando los
resultados.
11. Definir las siguientes matrices de forma que slo se guarden los elementos no
nulos:
0 0
0
0
1 1 0
1 4 0
0
0 0
0
0 8
2 3
7 3
A = 0 0
0
0 0 B = 0 0 2 3
0
0 1 0
0 0
0 0 13 11 0
2
7 4
2
7 4
0 0
0 0
Se pide:
a. Recuperar la matriz A con todos sus elementos
b. Calcular A+B, A*B
c. Determinar los elementos no nulos de A*B junto con la posicin que
ocupan.
3
1 1
a. Sus autovalores.
b. Sus autovectores.
c. Su polinomio caracterstico.
1 5 2
x
cos( )e 16 = y
12
15. Resolver el sistema de dos ecuaciones dado por:
3
5
+ y = sen( x 2 )
4
80
81
La segunda ventana es una ventana de modelado en blanco y sin ttulo. Esta es la ventana
en la cual un nuevo modelo puede ser dibujado.
Archivos de Modelos
En Simulink, un modelo es una coleccin de bloques que, en general, representa un
sistema. A parte de poder dibujar un nuevo proceso en una hoja en blanco, archivos
previamente guardados pueden ser cargados desde el men FILE o desde la hoja de
comandos del MATLAB. Como un ejemplo, abra el archivo simple.mdl en Simulink
escribiendo el siguiente comando en la hoja de comandos del MATLAB (alternativamente,
se puede cargar esta archivo usando la opcin Open en el men File en Simulink
tecleando Ctrl+O en Simulink.
simple
La siguiente ventana de modelos debe aparecer.
Un Nuevo modelo puede ser creado seleccionando New del men File en cualquier
ventana de Simulink (o tecleando Ctrl+N).
Elementos Bsicos
Hay dos clases de artculos especializados en Simulink: bloques y lneas. Los bloques son
82
usados para generar, modificar, combinar, sacar y desplegar seales. Las lneas son
usadas para transferir seales de un bloque a otro.
Bloques
Hay varias clases generales de bloques:
Fuentes: Usadas para generar varias seales.
Sinks: Usados para sacar o desplegar seales.
Discreto: Lineal, elementos de sistemas de tiempo discreto (funciones de
transferencia, modelos de estado espacio, etc.)
Linear: Lineal, continuous-time system elements and connections (summing
junctions, gains, etc.)
No lineal: Operadores no lineales (funciones arbitrarias, saturacin, retraso, etc.)
Conexiones: Multiplexor, Demultiplexor, Sistemas Macros, etc.
Los bloques tienen de cero a muchas terminales de entrada y de cero a muchas terminales de
salida Los trminos de la entrada sin usar son indicados por un tringulo abierto pequeo.
Los trminos de salida sin usar son indicados por un punto triangular pequeo. El bloque
mostrado debajo tiene un trmino de la entrada sin usar en la izquierda y un trmino de
salida sin usar en el derecho.
Lneas
Las lneas transmiten seales en la direccin indicada por la flecha. Las lneas siempre deben
transmitir las seales de la terminal de salida de un bloque a la terminal de entrada de otro
bloque. En la excepcin a esto es una lnea puede separarse a otra lnea, mandando la
seala cada uno de dos bloques destino, como se muestra (pulse el botn la figura
para transmitir el archivo del ejemplo llamado split.mdl).
Las lneas nunca pueden inyectar seales en otra lnea; las lneas deben combinarse
83
Esta caja del dilogo contiene campos para el numerador y el denominador del bloque de la
84
funcin de transferencia. Entrando un vector que contiene los coeficientes del numerador
deseado o polinomio del denominador, la funcin de transferencia puede ser
introducida. Por ejemplo, para cambiar el denominador a s^2+2s+1, introduzca
lo siguiente en el campo del denominador:
[1 2 1]
y cierre la ventana, la ventana del ejemplo cambiar a lo siguiente,
Los parmetros predefinidos en este dilogo generan una funcin escaln que
ocurre al tiempo=1, de un nivel inicial de cero a un nivel de 1. (en otros
trminos, un escaln de magnitud 1 a t=1). Cada uno de estos parmetros
puede cambiarse. Cierre este dilogo antes de continuar.
El ms complicado de estos tres bloques es el bloque del Scope. El pulsando en el
bloque, esto desplega una pantalla de osciloscopio en blanco.
85
La simulacin correr muy rpido y la pantalla del Scope aparecer como sigue:
86
Note que la salida de la simulacin (mostrado en amarillo) est a un nivel muy bajo a los ejes
del scope. Para arreglar esto, presione el botn autoscale (los binoculares) que reescalar
los ejes como se muestra debajo.
Note que la respuesta del escaln no empieza hasta el t=1. Esto puede cambiarse
haciendo doble en el bloque del escaln. Ahora, cambiaremos los parmetros del sistema y
simularemos el sistema de nuevo. Pulse el bloque de "Funcin de Transferencia" en la
ventana y cambie el denominador a [1 20 400]
Re-ejecute la simulacin (presione Ctrl-T) y usted debe ver lo que aparece como una
lnea llana en la ventana del scope. Presione el botn de autoscale, y usted debe ver lo
siguiente en la ventana del scope.
Note que el botn del autoscale slo cambia el eje vertical. Desde que la nueva
funcin del traslado tiene una contestacin muy rpida, el scope comprimi una parte
muy estrecha de la ventana. ste realmente no es un problema con el scope, pero con
87
Hay muchas opciones de parmetros de simulacin; nosotros slo tendremos relacin con
los tiempos de inicio y paro, que le dicen a Simulink de qu periodo de tiempo realizar la
simulacin. Cambia el tiempo de inicio de 0.0 a 0.8 (desde que el escaln no ocurre
hasta t=1.0). Cambie el tiempo paro de 10.0 a 2.0 que slo deben ser poco despus el
sistema se estabiliza. Cierre la caja del dilogo y vuelva a correr la simulacin. Despus
de presionar el botn autoscale, la ventana del scope debe proporcionar un mucho
mejor despliegue de la respuesta del escaln como es mostrado debajo
.
88
Construyendo Sistemas
En esta seccin, usted aprender a construir sistemas en Simulink usando los bloques de
construccin en las Bibliotecas de Bloques de Simulink. Usted construir el sistema
siguiente.
Primero usted recoger todos los bloques necesarios de las bibliotecas del bloque.
Despus usted modificar los bloques para que ellos correspondan a los bloques en el
modelo deseado. Finalmente, usted conectar los bloques con las lneas para formar
el sistema completo. Despus de esto, usted simular el sistema completo para
verificar que funciona.
Recogiendo Bloques
Siga los pasos debajo para recolectar los bloques necesarios:
89
Cree a un nuevo modelo (Nuevo del men del Archivo o Ctrl-N). Usted conseguir
una ventana en blanco.
Esto abre la ventana de Fuentes la cual contiene la librera de bloques de fuentes. Las
fuentes son usadas para generar seales.
90
Haz doble click en el icono Lineal en la ventana principal de Simulink para abrir
la ventana de Biblioteca de Bloque Lineal.
Arrastre los bloques de Suma, Ganancia, y dos casos de Funcin de
Transferencia (arrstrelo dos veces) en su ventana de modelo colocada
aproximadamente como mostrada debajo. La alineacin exacta no es importante
ya que puede cambiarse despus. Simplemente intente conseguir las
posiciones relativas correctas. El segundo bloque de Funcin de Transferencia
tiene un 1 despus de su nombre. Dos bloques no pueden tener el mismo nombre,
Simulink aade nmeros automticamente a los nombres de los bloques para
diferenciar entre ello
Haga doble click en el icono de los Sinks en la ventana principal de Simulink para
abrir la ventana de los Sinks.
Arrastre el bloque del Scope en el lado correcto de su ventana de modelo.
91
Modificar Bloques
Siga estos pasos para modificar los bloques propiamente en su modelo.
la correccin.
Arrastre el ratn desde la salida del bloque del Escaln al superior (positivo) la
entrada del bloque de la Suma. Suelte el botn del mouse solo cuando esta
correctamente acomodado en la entrada del siguiente bloque. No se preocupe por
el camino que usted sigue mientras arrastra el conector, la lnea se dirigir. Usted
debe ver a lo siguiente.
93
La lnea resultante debe tener una punta de flecha llena. Si la punta de flecha est
abierta, como mostrado debajo, significa no se conecta a nada.
Usted puede continuar la lnea parcial que usted dibuj tratando la punta de flecha
abierta como un trmino de salida y dibujando simplemente as como antes.
Alternativamente, si usted quiere volver a dibujar la lnea, o si la lnea se conect
a un trmino equivocado, usted debe anular la lnea y debe volverla a dibujar.
Para anular una lnea (o cualquier otro objeto), simplemente pulse el
botn en l para seleccionarlo, y oprima suprimir.
Dibuje una lnea que conecte la salida del bloque de Suma a la entrada del
bloque de Ganancia. Tambin dibuje una lnea de la Ganancia al Controlador PI,y
una lnea al Controlador PI de la Planta, y una lnea de
94
La lnea que queda sin ser dibujada es la realimentacin que conecta la salida de la
Planta a la entrada negativa del bloque de la Suma. Esta lnea es diferente en
dos maneras. Primero, esta lnea al ser dibujada debiera seguir el camino mas
corto (correctamente angulada) mas no sucede por lo cual debe ser dibujada en
varias fases. Segundo, no hay ningn trmino de salida de dnde empezar, para
que la lnea salga de una lnea existente.
Para dividir la lnea de salida, sostenga los Ctrl mientras arrastra el ratn del
punto en la lnea existente dnde usted quiere separarlas. En este caso,
simplemente empiece al derecho de la Planta. Arrastre hasta que usted consiga a
la esquina inferior izquierda de la lnea de realimentacin deseada como es
mostrado debajo.
95
Ahora, la punta de flecha abierta de esta lnea parcial puede tratarse como un
trmino de salida. Dibuje una lnea de l al trmino negativo del bloque de la Suma
de la manera usual.
Ahora, usted har coincidir los bloques entre s para una mejor apariencia.
Una vez conectado, a las posiciones reales de los bloques no causar problemas,
pero es ms fcil leer si ellos se alinean. Para mover cada bloque, arrstrelo con el
ratn. Las lneas se quedarn conectado y la realimentacin. Tambin pueden
arrastrarse los medios y esquinas de lneas a posiciones diferentes. Empezando a la
izquierda, arrastra cada bloque para que las lneas que los conectan estn
completamente horizontales. Tambin, ajuste el espacio entre los bloques
dejar el espacio para las etiquetas de las seales. Usted debe tener algo como:
96
Etiquete la seal del error (e) , la seal del controlador (u), y la seal de
salida (y) de la misma manera. Su modelo final debe aparecer como:
Simulacin
Ahora que el modelo est completo, usted puede simularlo. Seleccione Start del
men de la Simulacin para ejecutar la simulacin. Haga doble click en el bloque del
Scope para ver su salida. Utilice los autoscale (los binoculares) y usted debe ver a
lo siguiente.
97
Cierre esta caja del dilogo. Note ahora que el bloque de Ganancia en el
Simulink muestra el trmino K en lugar de un nmero.
98
99
100
Bibliografa
[1] R.H. Bishop. Modern Control Systems Analysis and Design Using matlab.
Addison- Wesley, 1993.
[2] The MathWorks Inc. Control
101