Professional Documents
Culture Documents
Alejandro Hayes
Bases de Matlab Alejandro Hayes
Índice
1. Introducción.....................................................................................................................................3
1.1 El programa MATLAB...........................................................................................................................3
1.2 Constitución de MATLAB.......................................................................................................................3
1.3 Simulink..............................................................................................................................................4
2. Primeros pasos con MATLAB...........................................................................................................4
2.1 Conociendo la versión..........................................................................................................................4
2.2 Tipos de archivos con los que trabaja MATLAB......................................................................................5
2.3 Variables en el espacio de trabajo.........................................................................................................6
2.4 El reloj................................................................................................................................................6
2.5 Ruta de búsqueda...............................................................................................................................7
2.6 Diario.................................................................................................................................................8
2.7 Formato de exhibición de números.......................................................................................................8
2.8 Caracteres especiales y operadores......................................................................................................9
2.9 Operaciones básicas...........................................................................................................................9
3. Escalares, vectores y matrices.......................................................................................................12
3.1 Comandos para el manejo de matrices.................................................................................................12
3.2 Algunas matrices especiales.................................................................................................................19
3.3 Aplicaciones a la resolución de sistemas de ecuaciones lineales..............................................................19
3.4 Una aplicación a la ingeniería...............................................................................................................20
3.5 Comentarios adicionales sobre escalares y vectores...............................................................................24
3.6 Polinomios y vectores..........................................................................................................................26
4. Funciones escalares........................................................................................................................29
4.1 Graficas de funciones en 2 D...............................................................................................................30
4.1.1Graficas de funciones escalares dadas en forma explicita.....................................................................31
4.1.2.Graficas de curvas dadas en coordenadas polares y parametricas........................................................40
4.2 Aplicaciones a la ingeniería.................................................................................................................42
5. Introducción a la programación....................................................................................................47
5.1.Estructuras elementales………………………………………………………………………………………………………………..….47
5.2.Archivos-M Script.…………………………………………………………………………..……….………………………...………......49
5.3.Archivos-M de función........................................................................................................................49
6. Números Complejos.......................................................................................................................54
7. Funciones Matemáticas Reales de varias variables reales o campos escalares .........................57
8. Graficas Tridimensionales(2-D)....................................................................................................58
9. Funciones Matemáticas Complejas de Variable Compleja ..........................................................62
9.1. Una Aplicación a la ingeniería............................................................................................................65
10. Diferenciación e integración con Matlab......................................................................................67
10.1. Derivación e integración de funciones escalares y campos escalares...................................................67
10.2. Campos vectoriales, generalización de los conceptos vistos................................................................70
10.3.Una aplicación a la ingeniería............................................................................................................71
10.4. Otras funciones para manejo de graficas..........................................................................................73
11.Ecuaciones Diferenciales...............................................................................................................75
11.1. Ecuaciones diferenciales ordinarias..................................................................................................75
11.2. Ecuaciones diferenciales en derivadas parciales................................................................................76
12.Manejo de listas y arreglos de datos............................................................................................77
12.1. Algunos comandos para manejar datos............................................................................................77
12.2.Interpolación y ajuste de datos........................................................................................................83
12.2.1.Interpolación Polinómica...............................................................................................................83
12.2.2.Ajuste de curvas...........................................................................................................................86
Página 1 de 90
Bases de Matlab Alejandro Hayes
Página 2 de 90
Bases de Matlab Alejandro Hayes
Introducción a Matlab
1.Introducción
En los últimos años ha proliferado mucho el calculo computacional ya sea debido a la necesidad del hombre
de procesar una cantidad de datos cada vez mayor como al avance del calculo numérico.
Aparecen entonces una cantidad importante de programas de calculo simbólico y numérico entre los que se
destacan Mathemática, Maple y Matlab entre muchos otros.
Matlab que es quien nos ocupa es un sistema general de software para cálculos matemáticos y diversas
aplicaciones a la ingeniería. Actualmente se utiliza mucho en Investigación y Análisis en Ingeniería y en la
Industria ya que sus aplicaciones comprenden la mayoría de las áreas de ciencia y tecnología.
Las ultimas versiones constan de un potente entorno integrado de calculo numérico y simbólico con extensiones
para la programación y otros campos específicos de la ingeniería.
1.2.Constitución de Matlab
Son cinco las partes que constituyes esencialmente a Matlab las cuales pasamos a describir:
El lenguaje Matlab: Es un lenguaje de alto nivel para matrices y vectores con sentencias de control de
flujo, funciones y estructuras de datos, entradas y salidas, características para la programación orientada a
objetos. Permite crear desde programas pequeños de rápida ejecución hasta programas mas largos y
complejos.
El entorno de trabajo Matlab: Es el conjunto de herramientas con las que se puede trabajar como un
usuario o programador de Matlab. Cuenta con facilidades tales como poder manejar las variables en el espacio
de trabajo y de importar y exportar datos. También posee herramientas de programación, desarrollo , y
manipulación de archivos M (M-files).
Manejador de Gráficos: Es el sistema de graficación de Matlab. Incluye una serie de comandos de muy
alto nivel para de visualización de imágenes 2D y 3D , animaciones y presentaciones. También posee comandos
de no tan alto nivel que permiten personalizar la presentación de la figura correspondiente. También permite
que el usuario pueda construirse una Interfaz Grafica de Usuario (GUI ) en la aplicación de Matlab que
Corresponda.
Página 3 de 90
Bases de Matlab Alejandro Hayes
La librería de Funciones Matemática de Matlab: Es una vasta colección de algoritmos que va desde
las funciones mas elementales como senos , cosenos etc. a otras mas sofisticadas como las tranformadas de
Laplace, FFT y otras.
La Interface de Aplicación de Programas de Matlab (API): Es una Librería que permite escribir
programas en C y Fortran que interactúen con Matlab. Incluye la posibilidad de llamar rutinas desde Matlab,
llamando a Matlab como un motor y para leer y escribir MAT-files.
1.3.Simulink
Simulink es un programa de Matlab que consiste en un sistema interactivo para simular Sistemas Dinámicos
lineales y no Lineales. Permite modelizar un sistema dibujando los correspondientes diagrames en bloques y
manipularlos dinámicamente. Puede trabajar con sistemas lineales, no lineales , de tiempo continuo , de tiempo
discreto , multivariable entre otros.
Pueden agregarse al Simulink los denominados Blocksets que proporcionan librerías adicionales de bloques para
aplicaciones especificas como Comunicaciones , Procesamiento de Señales , Sistemas de Potencia etc.
También cuenta con un programa llamado Real-time Workshop que permite generar un código en C desde tu
diagrama en bloques y correrlo en una variedad de sistemas en tiempo real.
Para introducirnos en el uso de Matlab comenzaremos dando algunos comandos básicos para conocer nuestro
entorno de trabajo. Para eso hagamos doble clic en el icono de Matlab y nos aparecerá una ventana de
comandos donde debemos comenzar a escribir.
2.1.Conociendo la Versión :
Para conocer la versión que estamos usando escribamos la palabra ver y obtendremos la siguiente salida.
» ver
--------------------------------------------------
MATLAB Version 5.3.0.10183 (R11) on PCWIN
MATLAB License Number: 134521
--------------------------------------------------
MATLAB Toolbox Version 5.3 (R11) 15-Jan-1999
Symbolic Math Toolbox Version 2.1 (R11) 11-Sep-1998
NAG Foundation Toolbox - Numerical ... Version 1.0.3 (R11) 06-Jun-1998
Partial Differential Equation Toolbox Version 1.0.3 (R11) 21-Nov-1997
Statistics Toolbox Version 2.2 (R11) 24-Jul-1998
Signal Processing Toolbox Version 4.2 (R11) 10-Jul-1998
Control System Toolbox Version 4.2 (R11) 15-Jul-1998
SystemBuild to Simulink Translator Version 2.0 (R11) 10-Aug-1998
Stateflow Version 2.0 (R11) 16-Jan-1999
Simulink Version 3.0 (R11) 01-Sep-1998
MATLAB Tour Version 1.2 (R11) 04-Sep-1998
»
Página 4 de 90
Bases de Matlab Alejandro Hayes
Archivos M: Son archivos de texto que contienen código de Matlab. El usuario puede crearlos usando los
mismos comandos que ingresa por líneas de comandos y otras sentencias que veremos oportunamente. El
archivo se guarda con la extensión .m (Por ejemplo nombre_archivo.m) y podemos llamarlo desde la línea de
comando y lo ejecutamos.
Archivos MAT: Son archivos que contienen datos binarios que se guardan con extensión .mat y que
posteriormente detallaremos.
Archivos MEX: Son archivos Matlab ejecutables compilado a partir de Fortran o C. Se guardan con la
extensión .mex.
Archivos MDL: Corresponden a modelos hechos con el Simulink que en su oportunidad desarrollaremos en
detalle. Si bien la explicación sobre los tipos de archivos que maneja Matlab fue por demás escueta el objetivo
de la misma es explicar el comando what que produce una lista de los archivos M- , MAT- , MEX – y MDL
presentes en el directorio de trabajo actual.
Veamos un ejemplo :
» what
P2
P3
aceleracion
amortiguador
circuito
circuito1
circuito2
circuito3
circuito31
circuito4
circuito5
circuito5B
dv
fn
p5
Página 5 de 90
Bases de Matlab Alejandro Hayes
» a=10;
» b=897;
» who
a b
» whos
Name Size Bytes Class
Vemos que who solo indica el nombre de las variables mientras que whos indica ademas de las variables , su
tamaño y el numero de bytes que ocupa y el formato.
2.4.El Reloj :
clock
ans =
1.0e+003 *
fix(clock)
ans =
2003 9 1 13 40 33
Página 6 de 90
Bases de Matlab Alejandro Hayes
2.5.Ruta de Búsqueda :
El comando path nos muestra la ruta de búsqueda vigente de Matlab. El comando ruta = path devuelve
una cadena llamada ruta que contiene la ruta.
path
MATLABPATH
C:\MATLABR11\toolbox\matlab\general
C:\MATLABR11\toolbox\matlab\ops
C:\MATLABR11\toolbox\matlab\lang
C:\MATLABR11\toolbox\matlab\elmat
C:\MATLABR11\toolbox\matlab\elfun
C:\MATLABR11\toolbox\matlab\specfun
C:\MATLABR11\toolbox\matlab\matfun
C:\MATLABR11\toolbox\matlab\datafun
C:\MATLABR11\toolbox\matlab\polyfun
C:\MATLABR11\toolbox\matlab\funfun
C:\MATLABR11\toolbox\matlab\sparfun
C:\MATLABR11\toolbox\matlab\graph2d
C:\MATLABR11\toolbox\matlab\graph3d
C:\MATLABR11\toolbox\matlab\specgraph
C:\MATLABR11\toolbox\matlab\graphics
C:\MATLABR11\toolbox\matlab\uitools
C:\MATLABR11\toolbox\matlab\strfun
C:\MATLABR11\toolbox\matlab\iofun
C:\MATLABR11\toolbox\matlab\timefun
C:\MATLABR11\toolbox\matlab\datatypes
C:\MATLABR11\toolbox\matlab\winfun
C:\MATLABR11\toolbox\matlab\demos
C:\MATLABR11\toolbox\symbolic
C:\MATLABR11\toolbox\nag\nag
C:\MATLABR11\toolbox\nag\examples
C:\MATLABR11\toolbox\pde
C:\MATLABR11\toolbox\stats
C:\MATLABR11\toolbox\signal\signal
C:\MATLABR11\toolbox\signal\siggui
C:\MATLABR11\toolbox\signal\sigdemos
C:\MATLABR11\toolbox\control
C:\MATLABR11\toolbox\control\ctrlguis
C:\MATLABR11\toolbox\control\obsolete
C:\MATLABR11\toolbox\stateflow\sfdemos
C:\MATLABR11\toolbox\sb2sl
C:\MATLABR11\toolbox\stateflow\stateflow
C:\MATLABR11\toolbox\simulink\simulink
C:\MATLABR11\toolbox\simulink\blocks
C:\MATLABR11\toolbox\simulink\simdemos
C:\MATLABR11\toolbox\simulink\dee
C:\MATLABR11\toolbox\tour
Página 7 de 90
Bases de Matlab Alejandro Hayes
C:\MATLABR11\work
C:\MATLABR11\toolbox\local
2.6.Diario:
Si deseamos guardar en algún archivo las entradas por líneas de comando el comando diary on guarda todo
lo que se introduce por el teclado así como la mayor parte de lo que se envía a la pantalla, en un archivo
llamado diary diary off termina la escritura .
Matlab Cuenta con la posibilidad de definir distintos formatos de exhibición de números la Tabla 1 muestra
algunos de ellos:
Tabla 1
pi
ans =
3.1416
» format long
» pi
ans =
3.14159265358979
» format bank
» pi
ans =
3.14
» format long e
» pi
Página 8 de 90
Bases de Matlab Alejandro Hayes
ans =
3.141592653589793e+000
2.9.Operaciones Básicas
Las operaciones tales como suma resta multiplicación y división se realizan en forma inmediata con Matlab.
Veamos algunos ejemplos:
Ejemplo 2.1:
» 2+3
ans =
» 2-3
ans =
Página 9 de 90
Bases de Matlab Alejandro Hayes
-1
» 2*3
ans =
» 2/3
ans =
0.6667
Una de las bondades de Matlab reside en la capacidad para trabajar en distintas plataformas y según la
capacidad del hardware y del software de las mismas trabajara con mayor o menor precisión. En general Matlab
realiza todas las operaciones con números enteros en forma exacta, independientemente del tamaño que tenga
el resultado.
Por ejemplo Matlab cuenta con una función que nos permite visualizar el resultado de una operación con un
determinado numero de cifras exactas el comando es el siguiente:
Ejemplo 2.2:
Supongamos que queremos calcular 55 elevado a la 100 con 5000 cifras exactas.
108709863248920416095013731486527307045630210519463889299295688391297964565
354754425988396643047321308614644661151788127357805455576542780216087180633
6217559874057769775390625.
Otras funciones que trae Matlab para trabajar con números enteros se muestran en la tabla 2 seguida de
algunos ejemplos.
Página 10 de 90
Bases de Matlab Alejandro Hayes
Tabla 4
Ejemplo 2.3:
rem(25,11)
ans =
» sign(-8)
ans =
-1
» sign(8)
ans =
» nchoosek(5,3)
ans =
10
» max(2,5)
ans =
» min(2,5)
ans =
» gcd(2,5)
ans =
» lcm(2,5)
ans =
Página 11 de 90
Bases de Matlab Alejandro Hayes
10
Matlab cuenta con muchos otros comandos para operaciones básicas acá hemos presentado algunos y queda
como deber para el lector indagar sobre otros comandos no explicados en esta sección.
Es muy común en Ingeniería que Aparezcan problemas que involucren matrices en su resolución, y siendo que
los métodos matriciales para distintos tipos de problemas en Ingeniería y ciencias han proliferado mucho es
importante que comencemos el curso explicando el manejo de matrices que tiene Matlab ya que es la base para
la implementación de casi cualquier aplicación.
El razonamiento será valido para escalares y para vectores ya que un escalar puede verse como una matriz de
1x1 mientras que un vector puede verse como una matriz de 1x n. Sobre el final de esta sección haremos
algunos comentarios sobre vectores y escalares como casos particulares de matrices.
Matlab cuenta con una serie de comandos para el manejo de matrices algunos de los cuales se indican en la
tabla 1.
Página 12 de 90
Bases de Matlab Alejandro Hayes
Página 13 de 90
Bases de Matlab Alejandro Hayes
Tabla 5
Veamos algunos ejemplos:
Ejemplo 3.1:
⎛1 − 2 5 ⎞
⎜ ⎟
Se desea ingresar la matriz M = ⎜ 3 8 − 1⎟ y determinar:
⎜9 − 4 6 ⎟
⎝ ⎠
−1 −1
a) M b) M si existe. c) Verificar M M = I d) M
T
h) P (λ )
2 3
e) Tr (M ) f) M , M g) Los Autovalores de M
M=
1 -2 5
Página 14 de 90
Bases de Matlab Alejandro Hayes
3 8 -1
9 -4 6
Transpuesta_M=M'
Transpuesta_M =
1 3 9
-2 8 -4
5 -1 6
Inversa_M=inv(M)
Inversa_M =
Identidad=M*Inversa_M
Identidad =
1 0 0
0 1 0
0 0 1
Determinante_M=det(M)
Determinante_M =
-322
Traza_M=trace(M)
Traza_M =
15
Potencia_2=M^2
Potencia_2 =
40 -38 37
18 62 1
51 -74 85
Potencia_3=M^3
Potencia_3 =
Autovalores_M=eig(M)
Página 15 de 90
Bases de Matlab Alejandro Hayes
Autovalores_M =
-2576/701
4622/495 + 9553/14427i
4622/495 - 9553/14427i
Polinomio_Caracteristico_M=poly(M)
Polinomio_Caracteristico_M =
1 -15 19 322
Ejemplo 3.2:
⎛ 1 3 − 5⎞ ⎛ 9 2 − 5⎞
⎜ ⎟ ⎜ ⎟
Dadas las matrices A = ⎜ 6 − 7 9 ⎟ B=⎜ 0 − 3 8 ⎟ determinar: a) A + B
⎜ − 5 − 2 − 1⎟ ⎜ − 15 − 12 10 ⎟
⎝ ⎠ ⎝ ⎠
b) A − B c) A B d) B A e) A B − B A f) A g) B
h) A B i) A B j) A + B k) A + B
A=[1 3 -5 ; 6 -7 9 ; -5 -2 -1]
A=
1 3 -5
6 -7 9
-5 -2 -1
B=
9 2 -5
0 -3 8
-15 -12 10
M_1=A+B
M_1 =
10 5 -10
6 -10 17
-20 -14 9
M_2=A- B
M_2 =
-8 1 0
Página 16 de 90
Bases de Matlab Alejandro Hayes
6 -4 1
10 10 -11
M_3=A*B
M_3 =
84 53 -31
-81 -75 4
-30 8 -1
M_4=B*A
M_4 =
46 23 -22
-58 5 -35
-137 19 -43
M_5=M_4-M_3
M_5 =
-38 -30 9
23 80 -39
-107 11 -42
Determinante_A=det(A)
Determinante_A =
143
Determinante_B=det(B)
Determinante_B =
579
Determinante_M_3=det(M_3)
Determinante_M_3 =
82797
Determinante_A*Determinante_B
ans =
82797
Determinante_M_2=det(M_2)
Página 17 de 90
Bases de Matlab Alejandro Hayes
Determinante_M_2 =
-196
Determinante_A+Determinante_B
ans =
722
Tabla 6
Ejemplo 3.3:
⎛ 1 2 7 5 ⎞
⎜ ⎟
⎜− 5 6 −8 9 ⎟
Dada la matriz A = ⎜ . Llamar al elemento a 23 . Visualizar la fila 2 y la columna 2.
3 −3 −2 9 ⎟
⎜ ⎟
⎜ 10 − 2 6 − 4 ⎟
⎝ ⎠
A=
1 2 7 5
-5 6 -8 9
3 -3 -2 9
10 -2 6 -4
A(2,3)
ans =
-8
A(2,:)
ans =
-5 6 -8 9
A(:,2)
ans =
2
6
-3
-2
Página 18 de 90
Bases de Matlab Alejandro Hayes
Funciones Especificas
blkdiag(x1,x2,...,xn) Construye una matriz diagonal con los datos
de x1,x2,...,xn
eye(n) , eye(n,m) Genara una matriz identidad de nxn o de
nxm respectivamente.
ones(n) , ones(n,m) Genera una matriz de unos de nxn o nxm
respectivamente.
rand(n) , rand(n,m) Genera una matriz de elementos aleatorios
uniformemente distribuidos en el intervalo
(0,1) de nxn o nxm elementos
randn(n) , randn(n,m) Genera una matriz de elementos aleatorios
normalmente distribuidos en el intervalo
(0,1) de nxn o nxm elementos
zeros(n) , zeros(n,m) Genera una matriz de ceros de nxn o nxm
respectivamente.
magic(n) Genera una matriz de nxn de los enteros de
1 a n2
Tabla 7
Ejemplo 3.4:
⎧4 x + 2 y + z = 11
⎪
Dado el sistema lineal ⎨− 2 x + y + 3 z = 9 . Resolverlo en forma matricial.
⎪x + 3 y − z = 4
⎩
format rat
>> A=[4 2 1;-2 1 3;1 3 -1]
A=
4 2 1
-2 1 3
1 3 -1
>> B=[11;9;4]
B=
11
Página 19 de 90
Bases de Matlab Alejandro Hayes
9
4
>> A_1=inv(A)
A_1 =
>> x=A_1*B
x=
1
2
3
>>
Es importante aclarar que si bien en el ejemplo y solo con fines didácticos y para relacionar el manejo de
Matlab con la teoría conocida de Álgebra Lineal sobre la resolución de sistemas de ecuaciones lineales hemos
optado por trabajar con la matriz inversa, esto no es frecuente ya que a la hora de invertir matrices Matlab
emplea mucho tiempo, tanto mas cuanto mas grande sea la matriz. En los ejemplos del apartado 3.4 de
aplicaciones a la ingeniería se muestran otras formas de resolver el sistema de ecuaciones.
Ejemplo 3.5
Página 20 de 90
Bases de Matlab Alejandro Hayes
Figura 1
El sistema de ecuaciones que permite calcular las corrientes esta dado por:
⎧( R1 + R 2 + R3 ) I 1 − R 2 I 2 − R3 I 3 = 0
⎪
⎪⎪
⎨− R 2 I 1 + ( R 2 + R 4 + R 5 ) I 2 − R 4 I 3 = V 1
⎪
⎪
⎪⎩− R3 I 1 − R4 I 2 + ( R3 + R6 + R4 ) I 3 = −V 2
Para el caso del punto b) consideramos que solo actúa el generador V1 y el sistema se reduce a:
Figura 2
Página 21 de 90
Bases de Matlab Alejandro Hayes
⎧( R1 + R 2 + R 3 ) I 1 − R 2 I 2 − R 3 I 3 = 0
⎪
⎪⎪
⎨− R 2 I 1 + ( R 2 + R 4 + R 5 ) I 2 − R 4 I 3 = V 1
⎪
⎪
⎩⎪− R 3 I 1 − R 4 I 2 + ( R 3 + R6 + R4 ) I 3 = 0
Página 22 de 90
Bases de Matlab Alejandro Hayes
>> V1=15;
>> V2=6;
>> R1=220;
>> R2=470;
>> R3=560;
>> R4=100;
>> R5=390;
>> R6=120;
R=
1250 -470 -560
-470 960 -100
-560 -100 780
>> V=[0;V1;V2]
V=
0
15
6
>> I=R\V
I=
2.4771e-002
3.0818e-002
2.9428e-002
>> PR1=((I(1))^2)*R1
PR1 =
1.3499e-001
>> PR2=((I(2)-I(1))^2)*R2
PR2 =
1.7185e-002
>> PR3=((I(1)-I(3))^2)*R3
PR3 =
1.2143e-002
>> PR4=((I(2)-I(3))^2)*R4
PR4 =
1.9326e-004
>> PR5=((I(2))^2)*R5
PR5 =
Página 23 de 90
Bases de Matlab Alejandro Hayes
3.7040e-001
>> PR6=((I(3))^2)*R6
PR6 =
1.0392e-001
>> V=[0;V1;0]
V=
0
15
0
>> I=R\V
I=
1.5947e-002
2.4958e-002
1.4649e-002
>> RV1=V1/I(2)
RV1 =
6.0100e+002
Tabla 8
Página 24 de 90
Bases de Matlab Alejandro Hayes
Ejemplo 3.6
Dados los vectores v1 = ( 1,−1,6 ) , v 2 = ( −5 ,−1,−11 ) vamos a aplicar las instrucciones indicadas en la tabla 8
>> v1=[1 -1 6]
v1 =
1 -1 6
v2 =
-5 -1 -11
>> a=abs(v1)
a=
1 1 6
>> n=norm(v1)
n=
6.1644
>> d=dot(v1,v2)
d=
-70
>> c=cross(v1,v2)
c=
17 -19 -6
>> v=v1.*v2
v=
-5 1 -66
>> l=length(v)
l=
Página 25 de 90
Bases de Matlab Alejandro Hayes
Tanto en Ingeniería como en ciencias en general es frecuente la aparición de polinomios en diversos tipos de
modelos a saber, funciones de transferencia, aproximaciones polinomiales, interpolación, ecuaciones
diferenciales etc. Además sabemos que un polinomio queda determinado por sus coeficientes, además hay una
relación entre estos y sus raíces. Todo esto hace posible que Matlab disponga de un conjunto de comandos
que permitan tratar a los polinomios como vectores y poder efectuar las operaciones usuales entre ellos, es por
eso que hemos decidido darle un tratamiento aparte antes de comenzar con las funciones escalares que será
tema de la sección 4. La Tabla 9 ilustra las funciones básicas para el manejo de polinomios.
Tabla 9
Ejemplo 3.6.1
P( x ) = x 3 − 4 x 2 + 11x − 23 y Q( x ) = 2 x 7 − 5 x 5 + x 4 + 15 x 2 + x − 8
se pide:
a) P+Q, P Q.
b) Especializar a P en –8 y a Q en 5.
c) Hallar la derivada y la integral de P y Q considerando nulas las constantes de integración.
Página 26 de 90
Bases de Matlab Alejandro Hayes
Resolución en Matlab
P=
0 0 0 0 1 -4 11 -23
Q=
2 0 -5 1 0 15 1 -8
>> S=P+Q
S=
2 0 -5 1 1 11 12 -31
>> C=conv(P,Q)
C=
Columns 1 through 8
0 0 0 0 2 -8 17 -25
Columns 9 through 15
-59 141 -82 153 -302 -111 184
>> polyval(P,-8)
ans =
-879
>> polyval(Q,5)
ans =
141622
>> dP=polyder(P)
dP =
3 -8 11
>> dQ=polyder(Q)
dQ =
14 0 -25 4 0 30 1
>> IP=polyint(P)
IP =
Columns 1 through 8
0 0 0 0 1/4 -4/3 11/2 -23
Column 9
0
Página 27 de 90
Bases de Matlab Alejandro Hayes
>> IQ=polyint(Q)
IQ =
Columns 1 through 8
1/4 0 -5/6 1/5 0 5 1/2 -8
Column 9
0
RP=roots(P)
RP =
2.9267
0.5367 + 2.7515i
0.5367 - 2.7515i
>> RQ=roots(Q)
RQ =
-1.9091
1.3902 + 0.6687i
1.3902 - 0.6687i
-0.4374 + 1.2308i
-0.4374 - 1.2308i
-0.7166
0.7201
>> [R,PO,K]=residue(P,Q)
R=
-0.2506
0.1233 - 0.0663i
0.1233 + 0.0663i
-0.1884 - 0.1809i
-0.1884 + 0.1809i
-0.8682
1.2490
PO =
-1.9091
1.3902 + 0.6687i
1.3902 - 0.6687i
-0.4374 + 1.2308i
-0.4374 - 1.2308i
0.7201
-0.7166
K=
[]
Página 28 de 90
Bases de Matlab Alejandro Hayes
4.Funciones Escalares
La función como objeto de estudio es conceptualmente muy importante a la hora de trabajar con un software
matemático pues la forma de manejar e implementar las funciones varia de un software a otro. Matlab nos
permite definir y manejar funciones de una forma muy simple, solo hay que acostumbrarse a la sintaxis y a las
‘Manias’ del programa en cuestión. Matlab al igual que la mayoría de los paquetes de calculo simbólico trae
funciones predefinidas asi como permite al usuario definir sus propias funciones. Algunas de las funciones
predefinidas con las que cuenta Matlab son las siguientes:
Tabla 10
Por supuesto Matlab cuenta con muchas otras funciones que no fueron contempladas en la tabla.
Veamos algunos ejemplos :
Ejemplo 4.1:
x=0:0.01:10;
f1=sin(x);
f2=cos(x);
f3=exp(x);
Lo que muestra el ejemplo 1 es la forma de ingresar funciones en Matlab. Si trabajamos en forma numérica
debemos indicar los valores que toma la variable independiente, en el ejemplo x varia entre 0 y 10 en pasos de
0.01. Podemos observar que si no indicamos el valor de x Matlab nos dice que no conoce a la variable.
f=exp(x)
??? Undefined function or variable 'x'.
Página 29 de 90
Bases de Matlab Alejandro Hayes
Ejemplo 4.2:
syms x real
f=log(x);
El comando syms indica que la variable x es simbólica y la palabra real indica que se trata de una variable
real. De no poner nada matlab la toma como una variable compleja.
Se pueden poner otros atributos a la variable por ejemplo.
syms x positive
Si queremos evaluar la función en un punto Matlab cuenta con una función llamada subs cuya sintaxis es la que
se indica abajo.
Tabla 11
Ejemplo 4.3 :
Dada la función escalar f ( x) = sen x + e − x . Definirla con la variable dada en forma simbólica y calcular la
imagen de 4.
syms x
f=sin(x)+exp(-x);
x=4;
subs(f)
ans =
-0.7385
format rat
subs(f)
ans =
-449/608
Página 30 de 90
Bases de Matlab Alejandro Hayes
Algunas de las sentencias para graficar son las que se detallan en la siguiente tabla.
Tabla 12
Veamos algunos ejemplos en 2D:
Ejemplo 4.4:
Deseamos graficar el valor de los elementos de un vector en función de su índice , escribimos lo siguiente.
x=0:0.01:5;
plot(x)
4.5
3.5
2.5
1.5
0.5
0
0 100 200 300 400 500 600
Figura 3
Página 31 de 90
Bases de Matlab Alejandro Hayes
En esta grafica sobre el eje de abscisas figuran los índices de cada elemento y sobre el eje de ordenadas el
valor de x para cada elemento. Entre elemento y elemento Matlab interpola.
Ejemplo 4.5:
x=0:0.01:10;
f=2*exp(-0.3*x).*cos(8*x+3);
plot(x,f)
1.5
0.5
-0.5
-1
-1.5
-2
0 1 2 3 4 5 6 7 8 9 10
Figura 4
Si queremos ver algunas opciones para la salida del grafico veamos otros ejemplos:
Ejemplo 4.6:
x=0:0.01:10;
f=2*exp(-0.3*x).*cos(8*x+3);
plot(x,f,'*');
plot(x,f,'r *');
grid on.
Página 32 de 90
Bases de Matlab Alejandro Hayes
1.5
0.5
-0.5
-1
-1.5
-2
0 1 2 3 4 5 6 7 8 9 10
Figura 5
Ejemplo 4.7:
fplot('[sin(3*x),cos(2*x+6),sin(x)+cos(2*x)]',[0,10])
1.5
0.5
-0.5
-1
-1.5
-2
0 1 2 3 4 5 6 7 8 9 10
Figura 6
Ejemplo 4.8:
fplot('[sin(3*x),cos(2*x+6),sin(x)+cos(2*x)]',[0,10,-4,2])
Página 33 de 90
Bases de Matlab Alejandro Hayes
-1
-2
-3
-4
0 1 2 3 4 5 6 7 8 9 10
Figura 7
Ejemplo 4.9:
ezplot('sin(x)^2+2*x*cos(x)',[-10,10])
s in(x)2 + 2 x c os(x)
20
15
10
-5
-10
-15
-20
-10 -8 -6 -4 -2 0 2 4 6 8 10
x
Figura 8
Matlab cuenta con una serie de comandos que se utilizan para trabajar con títulos , etiquetas, mallas y textos,
hemos utilizado algunos en los ejemplos anteriores pero daremos a continuación una tabla con los mas
comunes.
Página 34 de 90
Bases de Matlab Alejandro Hayes
Tabla 13
Ejemplo 4.10:
x=0:0.1:10;
f1=x.*sin(2*x);
f2=sin(2*x)+cos(x+3);
plot(x,f1,'r');
ylabel('Variable Dependiente')
xlabel('Variable Independiente')
grid on
hold on
plot(x,f2,'g');
plot(x,f2+f1,'k +');
15
10
V ariable Dependiente
-5
-10
0 1 2 3 4 5 6 7 8 9 10
V ariable Independiente
Figura 9
Página 35 de 90
Bases de Matlab Alejandro Hayes
Sobre la computadora se observa el efecto del hold on para dibujar cada grafica manteniendo la figura anterior.
Ejemplo 4.11
syms x real
f=exp(-sin(x.^2+3));
ezplot(f,[-5,5])
ex p(-sin(x 2 + 3))
2.5
1.5
0.5
-5 -4 -3 -2 -1 0 1 2 3 4 5
x
Figura 10
Matlab cuenta con una serie importante de comandos para la manipulación de gráficos algunos de ellos se dan
en la tabla.
axis ([xmin xmax ymin ymax]) Ubica los valores maximo y minimo para los
ejes coordenados respectivos.
axis(‘auto’) Sitúa los ejes en la escala automática por
defecto.
axis(axis) Congela la escala en los limites corrientes de
modo de permitir situar otro grafico sobre los
mismos ejes
V=axis Da un vector de 4 elementos conteniendo la
escala del grafico corriente.
axis(‘xy’) Sitúa el origen en la parte inferior izquierda.
axis(‘ij’) Sitúa el origen en la parte superior izquierda
axis(‘square’) Convierte el rectangulo del grafico en un
cuadrado.
axis(‘equal’) Situa el mismo factor de escala en ambos
ejes.
axis(‘normal’) Elimina las ociones square y equal
axis(‘off’) Elimina etiquetas y marcas y rejillas de los
Página 36 de 90
Bases de Matlab Alejandro Hayes
ejes.
axis(‘on’) Coloca de nuevo las etuquetas, marcas y
rejillas
Tabla 14
Ejemplo 4.12:
x=-5:0.01:5;
f=exp(-sin(x.^2+3));
plot(x,f);
V=axis
V=
-5 5 0 3
axis('square')
-1
-2
-5 -4 -3 -2 -1 0 1 2 3 4 5
Figura 11
axis('equal')
Página 37 de 90
Bases de Matlab Alejandro Hayes
2.5
1.5
0.5
0
-5 0 5
Figura 12
En muchos casos es importante poder visualizar varios graficas simultáneamente pero no superpuestas y para
eso Matlab cuenta con una función que permite dividir la ventana grafica en nxm subventanas y coloca el
grafico en la ventana p-esima la sintaxis es:
subplot( m,n,p )
Ejemplo 4.13:
x=(0:0.1:10);
f1=sin(3*x);
f2=cos(2*x);
f3=cos(2*x+1);
f4=exp(cos(2*x+1));
subplot(2,2,1);
plot(x,f1);
subplot(2,2,2);
plot(x,f2);
subplot(2,2,3);
plot(x,f3);
subplot(2,2,4);
plot(x,f4);
Página 38 de 90
Bases de Matlab Alejandro Hayes
1 1
0.5 0.5
0 0
-0.5 -0.5
-1 -1
0 5 10 0 5 10
1 3
0.5
2
1
-0.5
-1 0
0 5 10 0 5 10
Figura 13
Tabla 15
Veamos un ejemplo combinando las funciones de grafica logarítmica con subplot.
Ejemplo 4.14:
x=0:0.1:10;
f=exp(x)-1;
subplot(2,2,1);
plot(x,f);
subplot(2,2,2);
loglog(x,f);
subplot(2,2,3);
semilogx(x,f);
subplot(2,2,4);
semilogy(x,f);
Página 39 de 90
Bases de Matlab Alejandro Hayes
4
x 10 5
2.5 10
1.5
0
10
1
0.5
-5
0 10
0 5 10 -1 0 1
10 10 10
4
x 10 5
2.5 10
1.5
0
10
1
0.5
-5
0 10
-1 0 1 0 5 10
10 10 10
Figura 14
En muchos casos se hace necesario realizar graficas en forma Parametrica para lo cual lo único que debemos
hacer es parametrizar la curva correspondiente como ilustra el ejemplo 17.
Ejemplo 4.15
⎧ x( t ) = 2 cos t − cos 2t
Dada la curva definida en forma Parametrica por: ⎨ con 0 ≤ t ≤ 10 .
⎩ y( t ) = 2 sen t − sen 2t
t=0:0.1:10;
x=2*cos(t)-cos(2*t);
y=2*sin(t)-sin(2*t);
plot(x,y,'r')
Página 40 de 90
Bases de Matlab Alejandro Hayes
-1
-2
-3
-3 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5
Figura 15
Para realizar graficas en coordenadas polares Matlab cuenta con los siguientes comandos:
Tabla 16
Ejemplo 4.16:
a=0:0.01:2*pi;
r=sin(2*a).*cos(2*a);
polar(a,r)
90
0.5
120 60
0.4
0.3
150 30
0.2
0.1
180 0
210 330
240 300
270
Figura 16
Página 41 de 90
Bases de Matlab Alejandro Hayes
Ejemplo 4.17:
a=0:0.01:2*pi;
r=4*(1+cos(a));
polar(a,r)
90
8
120 60
6
150 4 30
180 0
210 330
240 300
270
Figura 17
Ejemplo 4.18
Se dispone de dos señales moduladas en amplitud y frecuencia respectivamente, y se desea visualizarlas bajo
distintas condiciones.
Para la señal de Amplitud Modulada hacemos efectuamos los siguientes gráficos con Matlab
t=0:0.01:10;
>> v1=2*cos(10*t);
>> subplot(2,2,1)
>> plot(t,v1)
>> axis([0 10 -3 3])
>> grid on
>> xlabel('t')
>> ylabel('v1(t)')
>> title('Señal portadora sin modulacion')
v2=(4+2*cos(t)).*cos(10*t);
>> subplot(2,2,2)
>> plot(t,v2)
>> axis([0 10 -7 7])
>> grid on
>> xlabel('t')
>> ylabel('v2(t)')
>> title('Señal portadora modulada al 50%')
Página 42 de 90
Bases de Matlab Alejandro Hayes
v3=(4+4*cos(t)).*cos(10*t);
>> subplot(2,2,3)
>> plot(t,v3)
1
v1(t)
v2(t)
0 0
-1
-2 -5
-3
0 5 10 0 5 10
t t
Señal portadora modulada al 100% Señal portadora sobremodulada
10
5
5
v3(t)
v4(t)
0 0
-5
-5
-10
0 5 10 0 5 10
t t
Figura 19
t=0:0.01:10;
Página 43 de 90
Bases de Matlab Alejandro Hayes
>> v1=4*cos(10*t+t.^2);
>> subplot(2,2,1)
>> plot(t,v1)
>> grid on
>> axis([0 10 -5 5])
>> xlabel('t')
>> ylabel('v1(t)')
>> title('Señal modulada por una señal cuadratica')
>> v2=4*cos(10*t+2*cos(t));
>> subplot(2,2,2)
>> plot(t,v2)
>> grid on
>> axis([0 10 -5 5])
>> xlabel('t')
>> ylabel('v2(t)')
>> title('Señal modulada por una señal cosenoidal')
v3=4*cos(10*t+6*exp(t));
>> subplot(2,2,3)
>> plot(t,v3)
>> axis([0 10 -5 5])
>> grid on
>> xlabel('t')
>> ylabel('v3(t)')
>> title('Señal modulada por una señal exponencial')
>> v4=4*cos(10*t+6*abs(t));
>> subplot(2,2,4)
>> plot(t,v4)
>> axis([0 10 -5 5])
>> grid on
>> xlabel('t')
>> ylabel('v4(t)')
>> title('Señal modulada por una señal modulo')
>>
Página 44 de 90
Bases de Matlab Alejandro Hayes
Señal modulada por una señal cuadratica Señal modulada por una señal cosenoidal
5 5
v1(t)
v2(t)
0 0
-5 -5
0 5 10 0 5 10
t t
Señal modulada por una señal exponencial Señal modulada por una señal modulo
5 5
v3(t)
v4(t)
0 0
-5 -5
0 5 10 0 5 10
t t
Figura 20
Ejemplo 4.19
A partir de una medición efectuada con voltímetro y amperímetro sobre tres lámparas de 25W, 40W, y 100W
respectivamente se guardaron los registros de tensión , corriente y potencia en un archivo y luego se pasaron
estos datos a una matriz de Matlab con el objeto de interpolarlos y obtener graficas de la corriente como
función de la tensión y de la potencia como función de la tensión. Si bien en este primer curso no hemos
estudiado interpolación con Matlab usaremos para el guión que sigue la función interp1 que efectúa una
interpolación de datos 1D, es intención de un curso futuro el tratar las funciones de interpolación y ajuste que
usa Matlab así como otras herramientas del calculo estadístico y numérico.
El guión utilizado se muestra a continuación así como la salida grafica obtenida.
M=
220.0000 118.0000 25.9600 185.0000 40.7000 43.0000 94.6000
200.0000 112.0000 22.4000 177.0000 35.4000 41.0000 82.0000
175.0000 103.0000 18.0200 166.0000 29.0500 38.0000 66.5000
150.0000 94.0000 14.1000 154.0000 23.1000 35.0000 52.5000
125.0000 84.0000 10.5000 141.0000 17.6200 31.0000 38.7500
110.0000 78.0000 8.5800 134.0000 14.7400 29.0000 31.9000
100.0000 74.0000 7.4000 128.0000 12.8000 28.0000 28.0000
75.0000 62.0000 4.6500 113.0000 8.4700 24.0000 18.0000
50.0000 49.0000 2.4500 98.0000 4.9000 19.0000 9.5000
25.0000 32.0000 0.8000 78.0000 1.9500 17.0000 4.2500
15.0000 24.0000 0.3600 67.0000 1.0000 14.6000 2.1900
10.0000 18.0000 0.1800 59.0000 0.5900 12.8000 1.2800
5.0000 12.0000 0.0600 38.0000 0.1900 9.7000 0.5000
>> v=M(:,1);
Página 45 de 90
Bases de Matlab Alejandro Hayes
>> I25=M(:,2);
>> vinterp=5:1:220;
>> I25interp=interp1(v,I25,vinterp);
>> subplot(2,1,1)
>> plot(vinterp,I25interp)
>> grid on
>> I40=M(:,4);
>> I40interp=interp1(v,I40,vinterp);
>> hold on
>> plot(vinterp,I40interp,'r')
>> I100=M(:,6);
>> I100interp=interp1(v,I100,vinterp);
>> plot(vinterp,I100interp)
>> plot(vinterp,I100interp,'g')
>> grid on
>> xlabel('V')
>> ylabel('I(V)')
>> title('Variacion de la corriente en funcion de la tension en lamparas de 25 40 y 100 W')
>> P25=M(:,3);
>> P25interp=interp1(v,P25,vinterp);
>> subplot(2,1,2)
>> plot(vinterp,P25interp)
>> P40=M(:,5);
>> P40interp=interp1(v,P40,vinterp);
>> hold on
>> plot(vinterp,P40interp,'r')
>> P100=M(:,7);
>> P100interp=interp1(v,P100,vinterp);
>> plot(vinterp,P100interp,'g')
>> grid on
>> xlabel('V')
>> ylabel('P(V)')
>>
Página 46 de 90
Bases de Matlab Alejandro Hayes
150
I(V)
100
50
0
0 50 100 150 200 250
V
100
80
60
P(V)
40
20
0
0 50 100 150 200 250
V
Figura 21
Con estos dos ejemplos tratamos de ilustrar la gran aplicación que tiene Matlab en Ingeniería y por supuesto
dejar la puerta abierta a un mundo de otras aplicaciones a la ingeniería y a las ciencias.
5.Introducción a la Programación
Hasta ahora hemos visto que todos las instrucciones de Matlab que pueden escribirse y ejecutarse desde la
línea de comandos ingresándolos directamente desde el teclado. Esta forma de trabajar es muy simple pero en
la practica presenta limitaciones cuando de desarrollos grandes se trata y es en estos casos donde el usuario
necesita hacerse un programa propio y personalizarlo a sus necesidades.
Matlab permite desarrollar programas con archivos – M los que pueden hacerse mediante el editor de texto que
viene con Matlab y luego para ser ejecutado se lo llama desde la ventana de comandos con el nombre del
archivo.
Por defecto Matlab guarda estos archivos en un directorio propio llamado work pero es posible guardarlos en
cualquier directorio deseado y luego poder accederlo indicando en forma adecuada la ruta. Estudiaremos dos
tipos de archivos-M que se detallan a continuación.
Es posible demostrar que cualquier problema puede resolverse combinando tres estructuras elementales a
saber:
Página 47 de 90
Bases de Matlab Alejandro Hayes
Sentencia 1
Sentencia 2
................
Sentencia n
Toma de Decisión: Permite tomar una decisión a partir de una o varias condiciones las que según sean
verdaderas o falsas permiten ejecutar una sentencia u otra. Esto se implementa en Matlab mediante la
sentencias if y switch.
La estructura del if en Matlab es la siguiente:
if condicion
Sentenciasx
else
Sentenciasy
end
switch expresión
case exp1
Sentenciax
case exp2
Sentenciay
............
............
otherwise
Sentencia n
end
for cont=n_min:paso:n_max
Sentencias
end
Sentencias
end
Página 48 de 90
Bases de Matlab Alejandro Hayes
5.2.Archivos-M Script
Supongamos que elegimos nuestro editor de texto favorito por ejemplo notepad para crear un archivo llamado
funcion.m conteniendo las lineas:
x=-15:0.01:15;
f=sin(x)+4*sin(3*x)-cos(10*x);
plot(x,f);
» funcion
-2
-4
-6
-15 -10 -5 0 5 10 15
Figura 22
Con esto no hemos hecho otra cosa que juntar un conjunto de instrucciones en un solo archivo y ejecutarlo con
un solo llamado a la función correspondiente, sin embargo hay casos en los que deseamos interactuar con otros
programas así como mecanizar procedimientos entre otras cosas, que hacen que necesitemos hacer un script
mas elaborado y es de eso que se trata esta sección. Cabe aclarar que en este primer curso se dan nociones
básicas de programación pero es intención de un curso futuro y mas avanzado profundizar sobre este tema y
en tópicos tales como noción de algoritmo, estructuras de datos, programación estructurada y otros.
5.3.Archivos-M de Función
Los archivos de función provienen como una extensión de Matlab permitiendo al usuario crear funciones para
problemas específicos. Las funciones son como los Scripts, pero con el propósito de mejorar la velocidad del
computador se compilan en un bajo nivel de codigo de bytes cuando se los llama por primera vez. Los ejemplos
que desarrollaremos son todos de funciones-M para comenzar a familiarizarnos.
Página 49 de 90
Bases de Matlab Alejandro Hayes
Ejemplo 5.3.1:
Supongamos que necesitamos determinar el volumen y la superficie de cilindros de distinto tamaño para lo que
necesitamos una función que ingresándole el radio y la altura del cilindro nos de los datos requeridos.
Entramos en el editor de archivos M de Matlab y desarrollamos el siguiente programa.
%************************************************************************************************%
%Programa para determinar el volumen y la superficie de un cilindro ingresando
%el radio y la altura
%***********************************************************************************************%
function [volumen,superficie]=volumen_y_superficie_cilindro(radio,altura)
volumen=pi*radio.^2*altura;
superficie=2*pi*radio*altura+2*pi*radio.^2;
> cilindro_vol_sup(1,1)
ans =
3.14159265358979
>> cilindro_vol_sup(1,3)
ans =
9.42477796076938
>> cilindro_vol_sup(5,8)
ans =
6.283185307179587e+002
>>
Ejemplo 5.3.2:
Supongamos que deseamos realizar un programa que nos cargue una matriz elemento a elemento. En el
hk
ejemplo realizado armamos la matriz A tal que a( h , k ) = donde le indicamos a la función la dimensión
h2 + k 2
de la matriz veamos el programa:
%**********************************************************************%
%Programa que ingresando como argumentos el numero de filas y el numero
%de columnas de la matriz requerida ubica en cada posicion de la misma
%lo solicitado.
%**********************************************************************%
Página 50 de 90
Bases de Matlab Alejandro Hayes
function y=llenamatriz(num_fila,num_columna)
for k=1:num_fila
for h=1:num_columna
y(k,h)=h.*k/(h.^2+k.^2);
end
end
format rat
>> A=llenamatriz(10,10)
A=
Columns 1 through 5
Columns 6 through 10
>>
Utilizamos el formato racional para obtener resultados exactos y vemos como se genero la matriz pedida.
Ejemplo 5.3.3:
Supongamos ahora que dada una matriz queremos recorrerla y modificar alguno de sus elementos en este caso
el programa que se muestra a continuación.
%*****************************************************************************************%
%Programa que recorre la matriz ingresada y si e elemento hk es negativo
%o cero lo reemplaza por un cero de lo contrario lo reemplaza por un uno
%****************************************************************************************%
function y=recorre_matriz(A)
num_fila=length(A(1,:));
Página 51 de 90
Bases de Matlab Alejandro Hayes
num_columna=length(A(:,1));
for k=1:num_fila
for h=1:num_columna
if A(k,h)<=0
A(k,h)=0;
else
A(k,h)=1;
end
end
end
y=A;
A=
1 2 -4 7
9 -6 -8 5
2 -1 -3 7
9 -6 -5 -3
>> recorre_matriz(A)
ans =
1 1 0 1
1 0 0 1
1 0 0 1
1 0 0 0
Ejemplo 5.3.4:
Supongamos que queremos construir una función que no se encuentra como predeterminada por Matlab por
x
ejemplo la función f ( x ) = la hacemos de la siguiente forma:
x +1
2
%************************************************************************%
%Programa que crea una funcion racional%
%************************************************************************%
function f=func_racional_1(x)
f=x./(x.^2+1);
Página 52 de 90
Bases de Matlab Alejandro Hayes
>> x=-10:0.1:10;
>> f=func_racional(x);
>> plot(x,f);
>> grid on
>>
0.5
0.4
0.3
0.2
0.1
-0.1
-0.2
-0.3
-0.4
-0.5
-10 -8 -6 -4 -2 0 2 4 6 8 10
Figura 23
Ejemplo 5.3.5:
Como ultimo ejemplo vamos a realizar un algoritmo que permita calcular la raíz aproximada de una ecuación
poli nómica mediante la aplicación del método de bisección.
Supongamos que deseamos calcular el valor aproximado de 2 con un error menor que 10 −6 para ello
consideremos la función f ( x ) = x 2 − 2 en el intervalo [1,2] realicemos el siguiente programa:
%******************************************************************************************************************************%
%Programa que aplica el metodo de Biseccion a una funcion f que hay que ingresarla entre comas 'f'%
%******************************************************************************************************************************%
function biseccion(f,x_max,x_min,error)
%El ciclo se ejecuta mientras x_max-x_min sea mayor que el error deseado%
while abs(x_max-x_min)>error
%Evaluamos la funcion en x_max%
y_x_max=feval(f,x_max);
%Evaluamos la funcion en x_min%
y_x_min=feval(f,x_min);
%Vemos si es cero x_max%
if y_x_max==0;
disp('Una Raiz es:');
disp(x_max);
break;
%Vemos si es cero x_min%
elseif y_x_min==0;
disp('Una Raiz es:');
Página 53 de 90
Bases de Matlab Alejandro Hayes
disp(x_min);
break;
%Vemos si el intervalo no cumple Bolzano%
elseif y_x_max*y_x_min>0;
disp('Intervalo Incorrecto')
break;
else
%Calculamos el punto medio%
x_medio=(x_max+x_min)/2;
%Evaluamos la funcion en el punto medio%
y_x_medio=feval(f,x_medio);
%Vuelvo a probar Bolzano%
if y_x_min*y_x_medio<0
x_max=x_medio;
else
x_min=x_medio;
end
end
end
if flag==0
disp('El valor de la raiz es:')
disp(x_medio)
else
end
biseccion('polinomio_1',1,2,0.000001)
El valor de la raiz es:
1.41421413421631
Para poder llamar a la función polinomio_1 esta tuvo que ser definida previamente por el usuario y esto se
logro haciendo el siguiente archivo.
function y=polinomio_1(x)
y=x.^2-2;
Recordemos que un numero complejo no es otra cosa que un par ordenado de números reales de la forma
z = ( a , b ) y que admiten una notación en forma binómica dada por z = a + ib . La importancia de los números
complejos en ingeniería reside en el hecho de que aparecen muy frecuentemente en sistemas oscilatorios,
funciones de transferencia, análisis fasorial, etc. Matlab cuenta con una serie de comandos para un buen
manejo de estos números. La Tabla 1 muestra las funciones básicas que permiten operar con números
complejos.
Página 54 de 90
Bases de Matlab Alejandro Hayes
Tabla 15
Ejemplo 6.1
>> z1=-5+3*i
z1 =
-5.0000 + 3.0000i
>> z2=8-3*i
z2 =
8.0000 - 3.0000i
>> M1=abs(z1)
M1 =
5.8310
>> A1=angle(z1)
A1 =
2.6012
>> M2=abs(z2)
M2 =
8.5440
>> A2=angle(z2)
Página 55 de 90
Bases de Matlab Alejandro Hayes
A2 =
-0.3588
r1=real(z1)
r1 =
-5
>> r2=real(z2)
r2 =
8
>> i1=imag(z1)
i1 =
3
>> i2=imag(z2)
i2 =
-3
>> c1=conj(z1)
c1 =
-5.0000 - 3.0000i
>> c2=conj(z2)
c2 =
8.0000 + 3.0000i
>> plot(-5,3,'o')
>> hold on
>> plot(-5,-3,'o')
>> plot(8,-3,'o')
>> plot(8,3,'o')
>> grid on
>> axis([-8 -10 -6 6])
>> xlabel('x')
>> ylabel('y')
>>
0
y
-2
-4
-6
-8 -6 -4 -2 0 2 4 6 8 10
x
Figura 24
Página 56 de 90
Bases de Matlab Alejandro Hayes
Mediante la utilización del comando line(x,y) podemos trazar líneas desde el origen a cada uno de los puntos
graficados visualizando de ese modo los vectores asociados a cada numero complejo z.
0
y
-2
-4
-6
-8 -6 -4 -2 0 2 4 6 8 10
x
Figura 25
La manipulación de funciones de varias variables reales es similar a la de funciones de una variable por lo que
procedemos a dar un ejemplo:
Ejemplo 7.1:
Página 57 de 90
Bases de Matlab Alejandro Hayes
f : R 2 → R / f ( x , y ) = sen( x + y )
g : R 2 → R / g ( x , y ) = e −( x + y2 )
2
syms x y real
» f=sin(x+y);
» g=exp(-x.^2-y.^2);
» x=2;
» y=3;
» subs(f)
ans =
-0.9589
» subs(g)
ans =
2.2603e-006
La potencialidad de la graficación 3D que posee Matlab permite una excelente visualización de superficies y
manipulación de graficas.
Algunas de los comandos para la graficación 3D se dan en la siguiente tabla:
Página 58 de 90
Bases de Matlab Alejandro Hayes
especificados en C.
surfc(x,y,z,C) Representa el grafico de superficie de la
función z=f(x,y) junto con el grafico de
contorno correspondiente con los colores
especificados en C. (curvas de nivel
proyectadas sobre el plano xy).
surfl(x,y,z,C) Representa el grafico de superficie de la
función z=f(x,y) realizando un dibujo con
sombreado.
mesh( x ,y,z,c) Representa el grafico de malla de la
función z=f(x,y), dibujando las líneas de la
rejilla que componen la malla con los
colores especificados en C.
meshc( x ,y,z,c) Representa el grafico de malla de la
función z=f(x,y), con el grafico de
contorno correspondiente.
meshz( x ,y,z,c) Representa el grafico de malla de la
función z=f(x,y) con una especie de
cortina o telón en la parte inferior.
contour( z) Dibuja el grafico de contorno (curvas de
nivel) para la matriz z. El numero de
líneas de contorno a utilizar se elige
automáticamente.
contour(z,n) Dibuja el grafico de contorno (curvas de
nivel ) para la matriz z usando n líneas de
contorno.
contour( x,y,z,n) Dibuja el grafico de contorno (curvas de
nivel) para la matriz z usando en los ejes
x e y el escalado definido por los vectores
x e y , n líneas.
contour3(z) Superficie de nivel
contour3(z,n) Superficie de nivel
contour3(x,y,z,n) Superficie de nivel
pcolor(x,y,z) Dibuja un grafico de contorno (curvas de
nivel) para la matriz (x,y,z) utilizando una
representación basada en densidades de
colores. Suele denominarse grafico de
densidad.
Tabla 16
Ejemplo 8.1 :
⎧ x = 2 sen t
⎪
⎨ y = 5 cos t 0 ≤ t ≤ 20π
⎪
⎩z = t
2
Página 59 de 90
Bases de Matlab Alejandro Hayes
t=0:pi/50:20*pi;
» x=2*sin(t);
» y=5*cos(t);
» z=t.^2;
» plot3(x,y,z)
4000
3000
2000
1000
0
5
2
0 1
0
-1
-5 -2
Figura 26
Ejemplo 8.2:
sen( x 2 + y 2 )
Dado el campo escalar f ( x , y ) = efectuar una grafica de la superficie en R3
x2 + y2
xa=-2*pi:0.05:2*pi;
» ya=-2*pi:0.05:2*pi;
» [x,y]=meshgrid(xa,ya);
» f=sin(x.^2+y.^2)./(x.^2+y.^2);
» mesh(x,y,f)
Página 60 de 90
Bases de Matlab Alejandro Hayes
Figura 27
Ejemplo 8.3:
Dado el campo escalar f ( x , y ) = sen x sen y se desea graficarla utilizando el comando surf.
xa=-2*pi:0.2:2*pi;
» ya=-2*pi:0.2:2*pi;
» [x,y]=meshgrid(xa,ya);
» f=sin(x).*sin(y);
» surf(x,y,f)
Figura 28
Ejemplo 8.4 :
Para la función del ejemplo 8.3 se desea graficar las 20 primeras curvas de nivel .
Página 61 de 90
Bases de Matlab Alejandro Hayes
xa=-2*pi:0.2:2*pi;
» ya=-2*pi:0.2:2*pi;
» [x,y]=meshgrid(xa,ya);
» f=sin(x).*sin(y);
» contour(f,20)
60
50
40
30
20
10
10 20 30 40 50 60
Figura 29
Sabemos de la teoría de la Variable compleja que una función de variable compleja es una transformación del
plano xy al plano uv donde u y v son campos escalares de x y de y esto es:
f ( z ) = u ( x, y ) + iv( x, y )
Lo que nos interesa es poder visualizar como se transforma una curva descripta en forma Parametrica por:
⎧ x = x(t ) ⎧u = u (t )
γ :⎨ con t ∈ D ⊆ R en el plano xy en otra dada por ξ : ⎨ con t ∈ D ⊆ R en el plano uv.
⎩ y = y (t ) ⎩v = v(t )
f (t ) = u (t ) + i v(t )
Ejemplo 9.1:
Dada la función compleja de variable compleja f : C → C / f ( z ) = z 2 + 1 nos interesa saber sus componentes
real e imaginaria y saber en que se transforma la región:
R = { ( x , y ) ∈ C / x = 5 ,−10 ≤ y ≤ 10 }
Página 62 de 90
Bases de Matlab Alejandro Hayes
syms x y real
>> z=x+i*y;
>> f=z.^ 2+1;
>> u=expand(real(f))
u=
x^2-y^2+1
>> v=expand(imag(f))
v=
2*x*y
>> x=5;
>> y=-10:0.1:10;
>> axis([0 6 -12 12])
>> u=x.^2-y.^2;
>> v=2*x.*y;
>> subplot(1,2,1)
>> plot(x,y)
>> line([5,5],[-10,10])
>> axis([0 6 -12 12])
>> grid on
>> xlabel('x')
>> ylabel('y')
>> subplot(1,2,2)
>> plot(u,v)
>> xlabel('u')
>> ylabel('v')
>> grid on
100
10 80
60
5 40
20
0 0
v
y
-20
-5 -40
-60
-10 -80
-100
0 2 4 6 -100 -50 0 50
x u
Figura 30
Página 63 de 90
Bases de Matlab Alejandro Hayes
En muchos casos nos interesa visualizar la superficie correspondiente al modulo y a la fase de la función de
variable compleja en cuestión. El siguiente ejemplo ilustra este caso.
Ejemplo 9.2
Para la función del ejemplo 4.1 se desea hallar y visualizar los campos escalares dados por:
ρ( x, y ) = f ( z ) θ ( x , y ) = arg( f ( z ))
>> xa=-10:0.1:10;
>> ya=-10:0.1:10;
>> [x,y]=meshgrid(xa,ya);
>> z=x+i*y;
>> f=z.^2+1;
>> M=abs(f);
>> A=angle(f);
>> subplot(1,2,1)
>> meshc(x,y,M)
>> axis([-12 12 -12 12 0 260])
>> xlabel('x')
>> ylabel('y')
>> zlabel('|f|')
>> subplot(1,2,2)
>> meshc(x,y,A)
>> axis([-12 12 -12 12 -4 6])
>> xlabel('x')
>> ylabel('y')
>> zlabel('fase')
250
5
200
150
|f|
0
Arg
100
50
0 -5
10 10
10
0 0
10 0
0
y -10 y -10 -10
-10 x
x
Figura 31
Página 64 de 90
Bases de Matlab Alejandro Hayes
Ejemplo 9.1.3
Dado el circuito de la figura y sabiendo que se trabaja en un rango de frecuencias entre 0 y 20 khz se pide:
b) Graficar el lugar geométrico en el plano complejo de los valores de la impedancia con la pulsación angular
como parámetro.
Figura 32
>> w=0:1.25e5;
>> z1=100+i*w*(1e-3);
>> y1=0.02+i*w*(1e-6);
>> z=z1+1./y1;
>> Z=abs(z);
>> T=angle(z);
>> R=real(z);
>> X=imag(z);
>> plot(w,Z)
>> hold on
>> plot(w,R,’r’)
>> plot(w,X,’g’)
>> grid on
>> xlabel(‘w’)
>>ylabel(‘|z| R X’)
>> figure(2)
>> plot(w,T)
>> T=(180/pi)*T;
>> plot(w,T)
>> grid on
>> xlabel(‘w’)
>> ylabel(‘Fase’)
>>plot(R,X)
>> grid on
>> axis([0 200 –20 120])
Página 65 de 90
Bases de Matlab Alejandro Hayes
>> xlabel(‘R’)
>> ylabel(‘X’)
160
140
120
100
X
80
|z| R
60
40
20 Impedancia
Resistencia
Reactancia
0
-20
0 2 4 6 8 10 12 14
w 4
x 10
Figura 33
50
40
30
Fase
20
10
-10
0 2 4 6 8 10 12 14
w 4
x 10
Figura 34
Página 66 de 90
Bases de Matlab Alejandro Hayes
120
100
80
60
X
40
20
-20
0 20 40 60 80 100 120 140 160 180 200
R
Figura 35
Matlab cuenta con varios comandos que permiten hallar la derivada e integral tanto en forma simbólica como
en forma numérica. La tabla 3 detalla algunas de esas funciones.
Página 67 de 90
Bases de Matlab Alejandro Hayes
Tabla 18
Ejemplo 10.1.1
>> fy=diff(f,y)
fy =
sin(x^2+y^2)+2*(x+y)*cos(x^2+y^2)*y
>>
Ejemplo 10.1.2
>> x=-10:0.01:10;
>> f=exp(-x.^2).*sin(10*x.^2);
>> df=diff(f);
>> fd=df/eps;
>> t=0:10/(length(fd)-1):10;
>> subplot(2,1,1)
>> plot(x,f)
>> grid on
>> xlabel(‘x’)
>> ylabel(‘f’)
>> subplot(2,1,2)
>> plot(t,fd,’r’)
>> grid on
>> xlabel(‘x’)
>> ylabel(‘f´’)
>>
Página 68 de 90
Bases de Matlab Alejandro Hayes
0.5
f
-0.5
-1
-10 -8 -6 -4 -2 0 2 4 6 8 10
14
x
x 10
4
f´ 0
-2
-4
0 1 2 3 4 5 6 7 8 9 10
x
Figura 36
Ejemplo 10.1.3
Ejemplo 10.1.5
Para la función del ejemplo 5.1.3 hallar el vector gradiente asociado a la misma y graficar el modulo del
mismo.
>> xa=-5:0.1:5;
>> ya=-5:0.1:5;
>> [x y]=meshgrid(xa,ya);
>> f=x.^3.*y.^2+4*x.^2.*y.^3+7;
>> [fx,fy]=gradient(f);
>> M=sqrt(fx.^2+fy.^2);
>> surf(x,y,M)
>> xlabel('x')
>> ylabel('y')
>> zlabel('|grad(f)|')
>> axis([-6 6 -6 6 -100 1200])
Página 69 de 90
Bases de Matlab Alejandro Hayes
1200
1000
800
|grad(f)|
600
400
200
5
6
4
0 2
0
-2
-5 -4
y -6
x
Figura 37
Para cerrar esta sección vamos a presentar algunos comandos que permiten trabajar con campos vectoriales,
de hecho vimos algo de funciones de variable compleja pero no vistas como campos vectoriales, y en el
ejemplo 5.1.5 calculamos el vector gradiente de un campo escalar pero solo graficamos su modulo.
Muchas veces se desea visualizar líneas de campo, líneas equipotenciales, así como calcular la matriz Jacobiana
de alguna transformación. La tabla 4 lista algunas de los comandos correspondientes.
Tabla 19
Ejemplo 10.2.1
Dado el campo vectorial f ( x , y ) = ( e − x cos y , e − x sen y ) deseamos graficar las líneas de campo
>> xa=0:0.1:4;
>> ya=0:0.1:10;
>> [x y]=meshgrid(xa,ya);
>> u=exp(-x).*cos(y);
Página 70 de 90
Bases de Matlab Alejandro Hayes
>> v=exp(-x).*sin(y);
>> quiver(u,v)
>> grid on
120
100
80
60
40
20
0
-5 0 5 10 15 20 25 30 35 40 45
Figura 38
Figura 39
∂ 2 v( x , y ) ∂ 2 v( x , y )
+ =0
∂x 2 ∂y 2
Como se ve del análisis del problema las condiciones de contorno son : v(0,y) =v(1,y)= v(x,1)=0 ; v(x,0)=10 .
La resolución del problema lleva a la siguiente solución analítica.
Página 71 de 90
Bases de Matlab Alejandro Hayes
En el primer curso de Matlab aprendimos a realizar programas propios para aplicaciones especificas. En este
hemos realizado un programa que grafica la solución analítica en forma aproximada para n=10. Luego calcula
el campo eléctrico recordando que:
E = −∇v( x , y )
Luego el programa grafica las 50 primeras superficies equipotenciales, las líneas de campo y el modulo del
campo vectorial E .
El código del programa se muestra a continuación.
function [x,y,f]=solucion_analitica
h=0;
xp=0:0.02:1;
yp=0:0.02:0.5;
[x,y]=meshgrid(xp,yp);
for n=1:10
h=h+(-20./((pi*(2*n-1).*sinh(pi*(2*n-1))))*sinh(pi*(2*n-1).*(y-1)).*(sin(pi*(2*n-1).*x)));
end
f=h;
[fx,fy]=gradient(-f);
E=sqrt(fx.^2+fy.^2);
subplot(2,2,1)
mesh(x,y,f);
xlabel('x');
ylabel('y');
zlabel('v(x,y)');
title('Potencial')
subplot(2,2,2)
contour(x,y,f,50)
grid on
xlabel('x')
ylabel('y')
title('Lineas Equipotenciales')
subplot(2,2,3)
quiver(x,y,fx,fy)
grid on
title('Lineas de campo electrico')
subplot(2,2,4)
mesh(x,y,E)
xlabel('x')
ylabel('y')
title('Campo Electrico')
Página 72 de 90
Bases de Matlab Alejandro Hayes
v(x,y)
0.3
5
y
0.2
0
0.5 0.1
1
0.5 0
y 0 0 x 0 0.5 1
x
Lineas de campo electrico Campo Electrico
0.6
4
0.4
2
0.2
0 0
0.5
1
-0.2 0.5
-0.5 0 0.5 1 1.5 y 0 0 x
Figura 40
Este ejemplo ilustra algunas aplicaciones de las funciones vistas. Matlab cuenta con una infinidad de otras
funciones para manejo de gráficos.
Página 73 de 90
Bases de Matlab Alejandro Hayes
Tabla 20
Ejemplo 10.4.1
Se disponen de dos funciones a saber f ( x ) = sen 2 x , g ( x ) = 20 sen 4 x y se desea visualizarlas sobre una misma
grafica.
x=0:0.01:2*pi;
>> f1=sin(2*x);
>> f2=20*sin(4*x);
>> plotyy(x,f1,x,f2)
>> grid on
Figura 41
Ejemplo 10.4.2
x=-4:0.2:4;
>> f=exp(-x.^2);
Página 74 de 90
Bases de Matlab Alejandro Hayes
>> stem(x,f)
>> help stem
Figura 42
Las ecuaciones diferenciales son un tema fundamental en la ingeniería que no puede faltar en ningún curso del
estilo del presente. Actualmente la mayor parte de las ecuaciones diferenciales que aparecen en los modelos de
ciencias e ingeniería no se resuelven por métodos analíticos sino por algoritmos iterativos que resultan ser muy
eficientes a la hora de implementarlos y llevan a soluciones aproximadas muy confiables.
Matlab cuenta con comandos para resolver ecuaciones diferenciales en forma simbólica así también como con
otros que nos dan una solución aproximada, estos últimos son los mas utilizados aunque no es el objetivo de
este curso enseñar los algoritmos de calculo numérico en base a los cuales funcionan estos comandos por lo
cual solo explicaremos los comandos para la resolución simbólica de ecuaciones diferenciales y sistemas de
ecuaciones diferenciales. La Tabla 6 lista algunos de los comandos para la resolución de ecuaciones
diferenciales ordinarias.
Tabla 21
Ejemplo 11.1
Página 75 de 90
Bases de Matlab Alejandro Hayes
⎧ dx( t ) ⎧ d 2 x( t ) dx( t )
⎪ + x( t ) = 2 ⎪ + + x( t ) = e t
a) ⎨ dt b) ⎨ dt 2 dt
⎪ x( 0 ) = 0 ⎪ x( 0 ) = 0 , x' ( 0 ) = 0
⎩ ⎩
x=dsolve('Dx=-x+2','x(0)=0')
x=
2-2*exp(-t)
x=dsolve('D2x+Dx=-x+exp(t)','x(0)=0,Dx(0)=0','t')
x=
1/3*exp(t)-1/3*exp(-1/2*t)*cos(1/2*3^(1/2)*t)-1/3*exp(-1/2*t)*sin(1/2*3^(1/2)*t)*3^(1/2)
Respecto a las ecuaciones diferenciales en derivadas parciales y dejando de lado los algoritmos de calculo
numérico Matlab cuenta con un Toolbox llamado Partial Differential Equation Toolbox. Se invoca por línea de
comando escribiendo pdetool. Dejamos al lector que lo investigue por su cuenta pero es por demás amigable y
muy fácil de utilizar y por otro lada tiene carácter de “caja negra” es decir se ingresan los datos de las
ecuaciones y nos devuelve las graficas de la solución aproximada y otra graficas o datos solicitados solicitadas
aun desconociendo los métodos empleados en su resolución. La figura 41 muestra la interfaz del usuario de
este toolbox.
Figura 41
Página 76 de 90
Bases de Matlab Alejandro Hayes
Página 77 de 90
Bases de Matlab Alejandro Hayes
Tabla 22
Ejemplo 12.1:
Página 78 de 90
Bases de Matlab Alejandro Hayes
x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
y 1 4 -4 8 7 11 2 -3 -6 9 0 5 7 33 29
Tabla 23
Se desea:
f) Encontrar las posiciones de los valores mayores a 3 y de los distintos de cero del vector y.
Página 79 de 90
Bases de Matlab Alejandro Hayes
2 4 5 6 10 12 13 14 15
>> no_cero=find(y)
no_cero =
1 2 3 4 5 6 7 8 9 10 12 13 14 15
>>
Estas funciones y algunas otras presentadas en la tabla 7 son extensivas a matrices veamos el ejemplo 7.2
para visualizar mejor los resultados.
Ejemplo 12.2
Dada la siguiente matriz A realizaremos aplicaremos una serie de comandos que ilustren los resultados
correspondientes.
⎛ 1 2 3 4 5⎞ 0 0 0 0
⎜ ⎟
⎜ 6 7 8 9 10 0 0 0 0 ⎟
⎜ 11 12 13 14 15 0 0 0 0⎟
⎜ ⎟
⎜ 16 17 18 19 20 0 0 0 0⎟
⎜ ⎟
⎜ 21 22 23 24 25 26 27 28 29 ⎟
⎜ 30 31 32 33 34 35 36 37 38 ⎟
⎜ ⎟
⎜ 39 40 41 42 43 44 45 46 47 ⎟
⎜ 48 49 50 51 52 53 54 55 56 ⎟
⎜ ⎟
⎜ 57 58 59 60 61 62 63 64 65 ⎟
A = ⎜⎜ 66 67 68 69 70 71 72 73 74 ⎟⎟
⎜ 75 76 77 78 79 80 81 82 83 ⎟
⎜ ⎟
⎜ 84 85 86 87 88 89 90 91 92 ⎟
⎜ 93 94 95 96 97 98 99 100 101 ⎟
⎜ ⎟
⎜ 102 103 104 105 106 107 108 109 110 ⎟
⎜ 111 112 113 114 115 116 117 118 119 ⎟
⎜ ⎟
⎜ 120 121 122 123 124 125 126 127 128 ⎟
⎜ ⎟
⎜ 129 130 131 132 133 134 135 136 137 ⎟
⎜ 138 139 140 141 142 143 144 145 146 ⎟
⎜ ⎟
⎝ ⎠
A=
1 2 3 4 5 0 0 0 0
6 7 8 9 10 0 0 0 0
11 12 13 14 15 0 0 0 0
16 17 18 19 20 0 0 0 0
21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38
39 40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64 65
66 67 68 69 70 71 72 73 74
75 76 77 78 79 80 81 82 83
84 85 86 87 88 89 90 91 92
93 94 95 96 97 98 99 100 101
Página 80 de 90
Bases de Matlab Alejandro Hayes
>> flip_lr=fliplr(A)
flip_lr =
0 0 0 0 5 4 3 2 1
0 0 0 0 10 9 8 7 6
0 0 0 0 15 14 13 12 11
0 0 0 0 20 19 18 17 16
29 28 27 26 25 24 23 22 21
38 37 36 35 34 33 32 31 30
47 46 45 44 43 42 41 40 39
56 55 54 53 52 51 50 49 48
65 64 63 62 61 60 59 58 57
74 73 72 71 70 69 68 67 66
83 82 81 80 79 78 77 76 75
92 91 90 89 88 87 86 85 84
101 100 99 98 97 96 95 94 93
110 109 108 107 106 105 104 103 102
119 118 117 116 115 114 113 112 111
128 127 126 125 124 123 122 121 120
137 136 135 134 133 132 131 130 129
146 145 144 143 142 141 140 139 138
>> flip_arab=flipud(A)
flip_arab =
138 139 140 141 142 143 144 145 146
129 130 131 132 133 134 135 136 137
120 121 122 123 124 125 126 127 128
111 112 113 114 115 116 117 118 119
102 103 104 105 106 107 108 109 110
93 94 95 96 97 98 99 100 101
84 85 86 87 88 89 90 91 92
75 76 77 78 79 80 81 82 83
66 67 68 69 70 71 72 73 74
57 58 59 60 61 62 63 64 65
48 49 50 51 52 53 54 55 56
39 40 41 42 43 44 45 46 47
30 31 32 33 34 35 36 37 38
21 22 23 24 25 26 27 28 29
16 17 18 19 20 0 0 0 0
11 12 13 14 15 0 0 0 0
6 7 8 9 10 0 0 0 0
1 2 3 4 5 0 0 0 0
>> medio=mean(A)
medio =
63.7222 64.7222 65.7222 66.7222 67.7222 65.7222 66.5000 67.2778 68.0556
>> desvio=std(A)
desvio =
44.8760 44.8760 44.8760 44.8760 44.8760 48.8946 49.2117 49.5305 49.8509
>> ordena=sort(A)
Página 81 de 90
Bases de Matlab Alejandro Hayes
ordena =
1 2 3 4 5 0 0 0 0
6 7 8 9 10 0 0 0 0
11 12 13 14 15 0 0 0 0
16 17 18 19 20 0 0 0 0
21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38
39 40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64 65
66 67 68 69 70 71 72 73 74
75 76 77 78 79 80 81 82 83
84 85 86 87 88 89 90 91 92
93 94 95 96 97 98 99 100 101
102 103 104 105 106 107 108 109 110
111 112 113 114 115 116 117 118 119
120 121 122 123 124 125 126 127 128
129 130 131 132 133 134 135 136 137
138 139 140 141 142 143 144 145 146
>> A(end)
ans =
146
>> tu=triu(A)
tu =
1 2 3 4 5 0 0 0 0
0 7 8 9 10 0 0 0 0
0 0 13 14 15 0 0 0 0
0 0 0 19 20 0 0 0 0
0 0 0 0 25 26 27 28 29
0 0 0 0 0 35 36 37 38
0 0 0 0 0 0 45 46 47
0 0 0 0 0 0 0 55 56
0 0 0 0 0 0 0 0 65
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
>> tl=tril(A)
tl =
1 0 0 0 0 0 0 0 0
6 7 0 0 0 0 0 0 0
11 12 13 0 0 0 0 0 0
16 17 18 19 0 0 0 0 0
21 22 23 24 25 0 0 0 0
30 31 32 33 34 35 0 0 0
39 40 41 42 43 44 45 0 0
48 49 50 51 52 53 54 55 0
57 58 59 60 61 62 63 64 65
66 67 68 69 70 71 72 73 74
Página 82 de 90
Bases de Matlab Alejandro Hayes
75 76 77 78 79 80 81 82 83
84 85 86 87 88 89 90 91 92
93 94 95 96 97 98 99 100 101
102 103 104 105 106 107 108 109 110
111 112 113 114 115 116 117 118 119
120 121 122 123 124 125 126 127 128
129 130 131 132 133 134 135 136 137
138 139 140 141 142 143 144 145 146
>> tamano=size(A)
tamano =
18 9
>> R=reshape(A,3,54)
R=
Columns 1 through 18
1 16 39 66 93 120 2 17 40 67 94 121 3 18 41 68 95 122
6 21 48 75 102 129 7 22 49 76 103 130 8 23 50 77 104 131
11 30 57 84 111 138 12 31 58 85 112 139 13 32 59 86 113 140
Columns 19 through 36
4 19 42 69 96 123 5 20 43 70 97 124 0 0 44 71 98 125
9 24 51 78 105 132 10 25 52 79 106 133 0 26 53 80 107 134
14 33 60 87 114 141 15 34 61 88 115 142 0 35 62 89 116 143
Columns 37 through 54
0 0 45 72 99 126 0 0 46 73 100 127 0 0 47 74 101 128
0 27 54 81 108 135 0 28 55 82 109 136 0 29 56 83 110 137
0 36 63 90 117 144 0 37 64 91 118 145 0 38 65 92 119 146
>> R90=rot90(A)
R90 =
0 0 0 0 29 38 47 56 65 74 83 92 101 110 119 128 137 146
0 0 0 0 28 37 46 55 64 73 82 91 100 109 118 127 136 145
0 0 0 0 27 36 45 54 63 72 81 90 99 108 117 126 135 144
0 0 0 0 26 35 44 53 62 71 80 89 98 107 116 125 134 143
5 10 15 20 25 34 43 52 61 70 79 88 97 106 115 124 133 142
4 9 14 19 24 33 42 51 60 69 78 87 96 105 114 123 132 141
3 8 13 18 23 32 41 50 59 68 77 86 95 104 113 122 131 140
2 7 12 17 22 31 40 49 58 67 76 85 94 103 112 121 130 139
1 6 11 16 21 30 39 48 57 66 75 84 93 102 111 120 129 138
Página 83 de 90
Bases de Matlab Alejandro Hayes
Tabla 24
Ejemplo 12.2.1
Página 84 de 90
Bases de Matlab Alejandro Hayes
P(x)
1
0
Datos Originales
Interpolacion Lineal
-1 Interpolacion por Spline Cubica
Interpolacion por Hermite Cubica
-2
-1 0 1 2 3 4 5
x
Figura 42
Ejemplo 12.2
Dada la función f ( x , y ) = ( x + y ) e −( x + y2 )
2
realizaremos su grafica usando las funciones de interpolación
mostradas en la tabla 8.
>> xa=-2:0.4:2;
>> ya=-2:0.4:2;
>> [x y]=meshgrid(xa,ya);
>> z=(x+y).*exp(-(x.^2+y.^2));
>> xaa=-2:0.1:2;
>> yaa=-2:0.1:2;
>> [xi yi]=meshgrid(xaa,yaa);
>> zi=interp2(x,y,z,xi,yi,'spline');
>> mesh(x,y,z)
>> hold on
>> mesh(xi,yi,zi+2)
Página 85 de 90
Bases de Matlab Alejandro Hayes
-1
2
1
0 2
1
-1 0
-1
-2 -2
Figura 43
En esta sección recordaremos algunas de las funciones asociadas al manejo de polinomios así como
presentaremos otras que incluye Matlab para realizar un ajuste de datos por mínimos cuadrados mediante
funciones Polinomicas. En la siguiente sección mostraremos los casos de ajuste por funciones no Polinomicas
llevando los datos a la forma adecuada. La tabla 9 lista las funciones de las que se dispone para el manejo de
polinomios.
Página 86 de 90
Bases de Matlab Alejandro Hayes
vector
polyvalm(p,A) Evalúa al polinomio p en la matriz A
residue(n,d) Nos da la descomposición en fracciones
simples del cociente de polinomios cuyo
numerador es n y cuyo denominador es d.
roots(p) Nos devuelve un vector con las raíces del
polinomio dado en p.
polyfit(x,y,n) Devuelve los coeficientes del polinomio de
grado n que mejor ajusta los datos de los
vectores x e y por mínimos cuadrados.
Tabla 25
Ejemplo 12.2.2.1.1
Se ha medido una resistencia no lineal con voltímetro y amperímetro y se obtuvieron los siguientes valores:
Tabla 26
Se desea ajustar los datos mediante una recta, y una parábola.
>> i=rnolin(:,1);
>> v=rnolin(:,2);
>> plot(i,v,'*')
>> grid on
>> hold on
>> p1=polyfit(i,v,1)
p1 =
8.2525 23.6281
>> xi=0:0.1:30;
>> pp1=polyval(p1,x);
>> plot(xi,pp1,'k')
>> p2=polyfit(i,v,2)
p2 =
-0.1942 12.8419 12.2369
>> pp2=polyval(p2,x);
>> plot(xi,pp2,'r')
>> xlabel('i')
>> ylabel('v')
>> title('Resistencia no lineal')
Página 87 de 90
Bases de Matlab Alejandro Hayes
Resistencia no lineal
300
250
200
150
v
100
Datos Medidos
Ajuste Lineal
Ajuste Cuadratico
50
0
0 5 10 15 20 25 30
i
Figura 44
En esta sección solo trataremos aquellas funciones llamadas intrínsecamente lineales esto es aquellas funciones
^ ^
que mediante una transformación conveniente se pueden llevar a la forma y = a x + b . La tabla 9 muestra
algunos casos de funciones intrínsecamente lineales y las respectivas transformaciones.
y = a xb ln y ln x ln y = ln a + b ln x
y = a + b ln x ln x y = a + b ln x
b 1 b
y =a+ y =a+
x x x
Tabla 26
Ejemplo 12.2.2.2.1
En el articulo “ Thermal Conductivity of Polyethylene: The effects of Crystal Size, Density, and Orientation on
the Thermal Conductivity ” (Polymer Eng. And Science, 1972,pp. 204-208) sugiere que la conductividad térmica
en función del grosor laminar esta dada por:
b
C( x ) = a + 10 4
x
Página 88 de 90
Bases de Matlab Alejandro Hayes
p=
1.0e+003 *
-1.7079 0.0188
>> plot(x,C,'*')
>> xi=240:830;
>> yi=1./xi;
>> pp=polyval(p,yi);
>> hold on
>> plot(xi,pp,'k')
>> grid on
>> xlabel('Espesor')
>> ylabel('Conductividad Termica')
Figura 45
Página 89 de 90
Bases de Matlab Alejandro Hayes
13.Referencias:
[1] Mark Austin, and David Chancogne : ’’Engineering Programming C , MATLAB , JAVA’’.John Wiley & Sons.
Inc. 1999.
[2] Delores M. Etter: “Solucion de Problemas de Ingeniería con Matlab 2da Edición ”. Prentice Hall 1998.
[3] Cesar Perez: “ Análisis Matemático y Álgebra Lineal con Matlab”. Ra-Ma 1999.
[4] Shoichiro Nakamura: “Análisis Numerico y Visualizacion Grafica con Matlab”. Prentice Hall 1999.
[5] Juan Carlos Lescarboura: “Bases de la Programacion”.
Página 90 de 90