Вы находитесь на странице: 1из 51

Modelamiento Y Simualación Matemática y Estadı́stica C. Ibánez L., Universidad Central, cibanezl@ucentral.edu.

co

1
*
C. Ibánez L.
July 31, 2019

La intención de estas notas de clase es realizar un acompanamiento de los temas que se verán a lo largo del semestre, nuestro principal
objetivo será el de modelar algunas situaciones fı́sicas y estadı́sticas haciendo uso del programa Matlab y Rstudio.

1 Introducción Matlab
El programa Matlab funciona netamente con arreglos vectoriales y matriciales, por lo cual se debe tener presente el manejo que a estos
elementos matemáticos se les da, inicialmente se verán algunos comandos básicos.

• Sı́mbolos operacionales: Al igual que las calculadoras, los comandos para suma +, resta −, multiplicación ∗, división / y poten-
ciación se mantienen invariantes. El signo = se usa para asignar a una variable un valor numérico, por ejemplo la orden a = 3
genera una asignación a la variable a el valor 3, en caso de realizar por ejemplo la operación 2 + (3 ∗ (4 + 2)) se obtiene un reultado
que se guardara en la memoria interna del programa como ans = 20, (recuerde la jerarquia de las operaciones y la importancia del
uso de los parentesı́s) pero al realizar otra operación este valor se borrará, por lo que si usted desea guardar este resultado en una
variable se debe hacer por ejemplo a = 2 + (3 ∗ (4 + 2)), es importante recordar que Matlab distingue el uso de las letras minuscu-
las y mayusculas, ası́, por ejemplo A = 2+5 genera una nueva variable, de manera que al hacer >> a+A se obtiene el resultado 27.

Para evitar la impresión de cada una de las operaciones que se realiza Matlab usa el comando ; punto y coma para evitar la
impresión en pantalla de los resultados obtenidos (este comando es util cuando los resultados operacionales son muy grandes, o
implican manejo de matrices cuya dimensión es muy grande).
En resumen

Variable de salida = Valor

Como se mencionó anteriormente las variables deben ser asignadas mediante caracteres alfabeticos, o también caracteres alfa
numéricos, pero recuerde que Matlab es un programa que funciona mediante el uso de vectores y matrices, ası́ por ejemplo el
vector fila
 
a= −1 0 2

se puede introducir de dos formas

1. a = [−1, 0, 2], el uso de la coma para separar los elementos entre columnas.
2. a = [−1 0 2], el uso de espacio para separar los elementos entre columnas.

Nota: El uso de los paréntesis en Matlab es sumamente importante, pues por ejemplo [ se usa para crear arreglos matriciales, y (
se usa para ingresar a un arreglo matricial, posteriormente se verá cual es el uso del paréntesis (

 
−1
b= 0 
2

se puede obtener con el comando a = [−1; 0; 2], notese que en este caso el comando ; se usa con el fin de hacer una separación
entre las filas del vector (recuerde que ; es también usado para la no impresión de instrucciones en la pantalla). Tenga presente las
reglas básicas de sumas, restas y multiplicación de matrices, por ejemplo es claro que no se puede realizar la suma a + b por qué?.
Ahora si desea construirse la matriz

2
 
−1 0 2
a=
3 1 −5
,

de dimensiones 2 × 3 se mezclan los comandos antes vistos, en este caso

a=[-1,0,2;3,1,-5]

Tenga presente la cantidad de elementos en cada arreglo, por ejemplo la entrada

a=[-1,0,2;3,1]

generará un error de dimensión por qué?


Nota: También puede ser usado un espacio en vez del caracter , (coma) para separar los elementos entre columnas, ası́ la entrada

a=[-1 0 2;3 1 -5]

produce la misma entrada

 
−1 0 2
a=
3 1 −5

i. Manejo de matrices: Para introducir un vector en matlab se debe tener presente que los sḿbolos adecuados son [ y ] para iniciar
y terminar respectivamente, por ejemplo:

El arreglo matricial A = [1 2], que representa un vector fila con dos columnas, o también el arreglo matricial B = [1, 2], que rep-
resenta el mismo vector, con la diferencia de tener una ”coma” que separa las columnas del vector, como se mencionó en lineas
anteriores. Para representar un vector columna el cambio de fila se hace mediante el sı́mbolo ”; ”, por ejemplo:

C = [1; 2; 3], el sı́mbolo ; también sirve para dar la instrucción de no imprimir, por ejemplo D = [1; 2; 3; 4];.

Para sumar vectores se debe recordar que las dimensiones de los vectores deben ser la misma, por ejemplo:

Para A = [4; 5; 6] y B = [4/5; 5; 8] se puede efectuar C = A + B y D = A − B.

Para multiplicar vectores se debe tener que el número de columnas del vector fila de la izquierda debe ser igual al número de filas
del vector columna de la derecha, por ejemplo:

Para los vectores A = [0, 34, 35, 67] y B = [−1; 0; −8; 89] se pueden efectuar las siguientes operaciones

C = A∗B D = B∗A

Para los vectores X = [12, 45, 78] y Y = [0; −1; 23; 8] Cuál de las siguientes operaciones puede ser efectuada?

X ∗Y Y ∗X Y ∗ X ∗ X0

Otro tipo de matriz importante es la matriz transpuesta, la cual consiste en transformar un vector fila en uno columna y visceversa
(recuerde su curso de álgebra lineal), al igual que ocurre con una matriz. Si el vector fila A = [32, 8, 9] corresponde a un vector de

3
 
32
dimensiones 1 × 3, la matriz transpuesta corresponde a B = A0 =  8 . Otras matrices importantes son las siguientes:
9

• Matriz identidad:
A = eye(2) Matriz identidad 2 × 2
B = eye(3) Matriz identidad 3 × 3.

• Matriz llena de unos:


C = ones(3) Matriz cuadrada 3 × 3
D = ones(2, 3) Matriz rectangular 2 × 3

• Matriz nula:
A = zeros(3), Matriz de dimensión 3 × 3
B = zeros(4, 3), Matriz de dimensión 4 × 3

• Matriz aleatoria:
A = rand(3), Matriz de aleatoria con distribución uniforme de dimensión 3 × 3
B = rand(4, 3), Matriz de aleatoria con distribución uniforme de dimensión 4 × 3

• Rango de una matriz:Recordemos que el rango de una matriz corresponde al número de vectores fila o vectores columna lineal-
mente independiente, por ejemplo para la matriz

A = [2, 3, 4; 0, 1, 3]
el rango rank(A) que da como resultado 2, y para la matriz

B = [4, 5, 6, −15; 0, 3, 2, −9; −1, 9, 0, −27]

el rango es rank(B), el cual da como resultado 3.

• Determinante de una matriz: Recordemos que el determinante de una matriz se puede calcular cuando esta es de naturaleza
cuadrada, y se calcula con el comando det(A), ası́ por ejemplo para la matriz A = [2, 4, 5; −2, 0, 3; 8, 1/2, 5] el determinante es 128.

Si se quiere tener los números de forma fraccionaria, se introduce el comando format rational, este comando debe escribirse en
la pantalla de comandos o en la pantalla edit una única vez.

Otros tipos de escritura numérica se muestran a continuación

Comando Resultado
format rat Aproximación racional
format short Fija 4 dı́gitos después de la coma
format long Fija 15 dı́gitos despueés de la coma
format short e Fija 4 dı́gitos después de la coma en representación cientifica
format long e Fija 15 dı́gitos después de la coma en representación cientifica

Table 1: Comandos de escritura numérica.

Otros comandos que pueden ser importantes se muestran a continuación

4
Comando Resultado
sqrt(x) Raı́z cuadrada del número x
log(x) Logaritmo natural del número x
exp(x) Exponencial del número x
mod(x, y) módulo de la división entre los números x e y
log10(x) Logaritmo en base 10 del número x
gdc(x, y) Máximo común divisor entre los número x e y
ldm(x) Mı́nimo común múltiplo entre los números x e y

Table 2: Comandos de algunas funciones importantes.

• Matriz inversa cuyo comando es inv (recuerde que la inversa de una matriz se calcula cuando dicha matriz es cuadrada) y el
determinante es no nulo.

• Para obtener la forma escalonada reducida se usa el comando rref, el cual hace reducción escalonada por medio de Gauss Jordan,
por ejemplo: para la matriz A = [2, 3, 4; −2, 3, 8; 0, 2, 8] el comando rre f (A) determina una matriz identidad de dimensión 3 × 3
por qué?. Cuál es la relación entre el rango y la matriz escalonada reducida? Qué sucede si la matriz es no cuadrada? Qué sucede
si la matriz es cuadrada pero el rango de la matriz no es igual a la dimensión de la matriz?

• Otra forma de multiplicar, y aclarando que esta forma de multiplicación es usada solamente en Matlab es el caso punto a punto ·
seguido de la operación requerida, por ejemplo para la matriz A = [1, 5; 4, −5] (en páginas posteriores se verá la importancia de la
operación punto en el manejo de matrices em Matlab).

B = A. ∗ A C = A.∧ 2

O para la matriz B = [2, 3, 4; −2, 3, 8] Qué tipo de resultado arroja la operación B ∗ B o la operación B. ∗ B Cuál cree usted que sea
la diferencia entre las operaciones anteriores?

• Otra función importante de Matlab es la caracteristica de eliminar los ceros de una matriz y determinar la posición fila-columna
en la que se encuentran los valores distintos de cero, por ejemplo para la matriz

A = [0, 0, 0, 3; 0, 0, −1, 2; 3, 0, 0, 1; 0, 0, 0, −2]

el comando sparse, sparse(A) identifica la posición en la matriz de cada uno de los números diferentes de cero; Mientra que el
comando full, f ull(A) regresa la matriz original. En caso que los valores numéricos sean muy cercanos a 0, usando el comando
round(x) el cual redondea hacia el entero más próximo, donde x puede ser una matriz o un número.

Otros comando que pueden ser útiles al momento de tratar graficamente las matrices son: spy el cual gráfica en el plano cartesiano
los puntos rescatados

5
Figure 1: Distribución de puntos para la matriz A

Finalmente el comando imagesc hace un barrido de escala de colores de los puntos rescatados, y el comando colorbar determina
la barra de colores, como se muestra a continuación: imagesc(s), colorbar donde los colores van desde azul (valores más bajos)
hasta rojo (valores más altos).

Figure 2: Mapa de colores para la matriz A

EJERCICIOS
Construya las siguientes matrices en Matlab, guardandolas en una pantalla edit con los respectivos nombres

1. 5. 9.
1
   
−7
 
1 1 1 1 3
5 8 E=
2
A = 15 −7
  1 1 1 J= 3 −2 8
0 −5 4 0
21 −8 2 6.  
1 1 10.
2.   F = 1 1 0

−3 5

−1 0 2
B= 1 1 K= 3 0 −4
13 1 −2
−5 4 0
3. 7.  

1 1

1 1 0 0 11.  
C = 1 1 1 G = 0 1 0 1 0
M=
1 1 1 0 0 1 −1 0
4.   8.   12.  
0 0 0 −1 13 0 −8 0
D = 0 0 0 H = 0 1 N = 0 0 0
0 0 0 2 −2 0 5 1

6
Determine cada una de las operaciones indicadas en caso que sea posible, justifique su respuesta

13. A+B 20. A8 27. D ∗ 8G 34. A0 ∗ B0


14. J0 21. B∗H 28. A ∗ (H ∗ E)2 35. (B ∗ A)0
15. K0 22. A∗G∗A∗G 29. 2C + F 36. C0
16. K0 + K 23. C29 30. 5F ∗ H 37. (F ∗ E)0 ∗ A + G
17. N2 24. (B + E) ∗ F 31. F −H
18. B∗F 25. 2A + 3F ∗ B 32. A0
19. A∗A 26. A+B 33. G0

Realice cada una de las operaciones indicadas con ayuda de los comandos vistos

38. rank(A) 51. Haga A34 ,A44 , A54 , A64 , A74 , A84 , A94 , A10
4 , para
39. A−1  
1 −2 −6
40. (A2 )−1
A4 = −3 2 9
41. det(N) 2 0 −3
42. det(K)
52. Haga A25
43. det(N 2 )  
0 1
44. det(C) A5 =
0 0
45. det(C2 )
46. det(F) 52. Haga A26 , A46 , A66 Qué sucede con A102
6 ?

47. det(K 0 + K)  
0 −8 0
48. Haga A01 + A1 A6 = 0 0 0
  0 5 0
1 1 −4
A1 = −1 3 2
4 −2 0 53. Haga A27 , A37 Qué sucede con A38
7 ?
,  
5 −3 2
Nota algo extraño en el resultado? Qué nombre puede A7 = 15 −9 6
recibir este tipo de matriz? 10 −6 4
49. Haga A2 ∗ A02
  54. Haga A28
cos(π) sin(π)
A2 =
 
−sin(π) cos(π) 1 1
A8 =
0 −1
50. Haga A3 ∗ A03
√ √  55. Usando los comandos spy y imagesc, colorbar determine
2 2
 √2 − el mapa de colores para las matrices A1 , A2 , A3 , A4 , A5 , A6 ,
A3 =  √2 
2 2
 A7 , A8 y cada una de las operaciones indicadas los ejerci-
cios anteriores.
2 2

ii. Propiedades de Matrices: Extracción de la diagonal de una matriz, comando diag(A) para la matriz
A = [3, 1, 2; 5, 3, 1; −8, 0, 7; 8, 12, 0]

Una parte importante del estudio de las matrices, son las submatrices, y en ocasiones los bloques de Jordan. A continuación se
mostrará como extraer elementos, submatrices y bloques de una matriz

A = [3, 1, 2; 5, 3, 1; −8, 0, 7; 8, 12, 0]

 
3 1 2
 5 3 1
A=
−8

0 7
8 12 0

7
Para la extración de elementos de una matriz, se hace uso de los parentesis ( y ), por ejemplo:
• Extraer un único elemento:

A(3, 2), Extrae el elemento ubicado en la fila 3 columna 2.

Figure 3:

• Extraer una porción de una fila o una columna


A(2, 1 : 2), primero se indica la fila, y luego : indica el rango de extracción para la columna

Figure 4:

A(2 : 3, 3), se indica el rango de movimiento en las filas y luego la columna que se desea extraer

Figure 5:

• Extraer una fila o una columna completa, en este caso el simbolo : hace referencia al recorrido completo de la fila o columna
seleccionada

A(1, :) Extracción de la primera fila


A(:, 2) Extracción de la segunda columna
• Extracción de una submatriz, en este caso se pueden combinar las ordenes para filas y columnas

A(1 : 2, 2 : 3), extrae la intersección de las filas 1 y 2 con las columnas 2 y 3

Figure 8:

• Extracción de filas y columnas determinadas (intersección)

8
Figure 6:

Figure 7:

• Extracción de bloques no consecutivos, para esto se usan los parentesis [ y ] dentro de los patentesis ( y ), con el efecto de
intersecciı́on entre los elementos seleccionados, por ejemplo:

Considere la matriz A = [3, 1, 2, 0, −1; 0, 1, 5, 3, 1; 15, 8, −8, 0, 7; 2, −8, 8, 12, 0]

 
3 1 2 0 −1
0 1 5 3 1
A= 
15 8 −8 0 7
2 −8 8 12 0

A([1, 3], [1, 5]), se intersectan las filas 1 y 3 con las columnas 1 y 5 (note detenidamente que se usa la coma , dentro de los parentesis
cuadrados)

Figure 9:

Si se desea añadir una fila o una columna en una matriz, por ejemplo para la matriz A = [3, 1, 2; 5, 3, 1; −8, 0, 7; 8, 12, 0], anexar el
vector fila u = [0, 0, 0] o el vector columna v = [0; 0; 0; 0];

• Construcción de matrices con base en otras matrices

Añadir una fila al inicio o al final de una matriz, por ejemplo B1 = [u; A] o B = [A; u]. O añadir una columna al principio C = [A, v]
o a principio C = [v, A]. O si se desea añadir una columna dentro de una matriz se debe hacer la extracción de los bloques
correspondientes para poder construir la matriz deseada, por ejemplo D = [A(:, 1 : 2) v A(:, 3)].

9
EJERCICIOS
Considere las matrices AyB

1
 
4 2
3 4 7
 3 
5 0 2 −1 
 2 
4 
 
B = 3 2 −3 4

  
1 2 4 −1  5 
 2
 3 2 
0 3 4 4 1 0 
A=   2 3 
 31 8 7 −2  1 1
−2 1 3 5 π 5 −2 −
3 2

Extraiga los elementos indicados en cada numeral (usando lintersecciones si es posible) y en la forma que se precisa

56. Extraiga la fila 1 de la matriz A y guardela en un vector


columna llamado c1.  
A A12
57. Extraiga la columna 2 de la matriz A y guardela en un vec- C3 = 11
A21 A22
tor columna llamado c2.
58. Construya una matriz de dimensiones 4 × 2 con los vec- 63. Usando lo visto en clase construya la matriz indicada a
tores columna c1 y c2 en dicho orden. continuación
59. Usando intersecciones entre filas y columnas, extraiga los
elementos A21 , A24 , A42 y A44 y guardelos en una subma-
triz de dimensión 2 × 2 respetando el orden de extracción.  
B11 B12 B13
60. Usando intersecciones entre filas y columnas construya la B21 B22 B23 
matriz indicada a continuación C4 = 
B34

B44 B54 
B35 B45 B55
 
A31 A33 A34 64. Extraiga diag(A) y guardela en un vector columna llamado
C1 =
A41 A43 A44 DA.
61. Usando lo visto en clase construya la matriz indicada a 65. Extraiga diag(B) y guardela en un vector fila llamado DB.
continuación 66. Averigue como extraer las matrices diagonal superior e in-
ferior de cada una de las matrices A y B.
  67. Extraiga la fila 2 de la matriz A y anexela a la matriz A
C2 = A11 A12 A13 A31 A32 A33
como un nuevo vector fila en cualquier posición.
62. Usando lo visto en clase construya la matriz indicada a 68. Extraiga la diagonal de la matriz B y anexela a la matriz B
continuación como un nuevo vector columna (columna 5).

iii. Uso de matrices: Para solucionar sistemas de ecuaciones, como se explicó anteriormente se pueden usar terminos como el rango rank,
el determinante det para saber si un sistema de ecuaciones lineales tiene solución, (si sus vectores son una combinación linealmente
independiente o dependiente) el comando rref determina la forma escalonada reducida de un sistema matricial, por ejemplo el sistema

3x − y = 5
−2x + y + z = 0
2x − y + 4z = 15

El cual conforma las matrices de coeficientes dependientes y coeficientes asociados:

A = [3, −1, 0; −2, 1, 1; 2, −1, 4];


b = [5; 0; 15];
Ab = [A, b]

10
y cuya solución se puede calcular mediante el comando rref(Ab). Cómo interpretar el resultado dado por Matlab?

iv. Vectores en el uso discreto de funciones: Para identificar algunos valores de funciones en una variable real de a forma y = f (x),
se puede hacer uso del comando linspace el cual construye un vector fila con lı́mites inferior y superior, por ejemplo el vector
x = linspace(−5, 5, 20); realiza una división del intervalo [−5, 5] (inclusive los extremos) en 19 subintervalos
h π π i de igual longitud o 20
puntos equidistantes. O el intervalo x1 = linspace(−pi/2, pi/2, 20); que realiza la división del intervalo , en 19 subintervalos de
2 2
igual longitud.

Para poder usar funciones matemáticas en una variable real, es aconsejable que se tenga previo conocimiento del dominio en el cual
se trabajará, por ejemplo la función y = sin(x); (función seno), representada en el dominio de la variable independiente x, o la función
y1 = cos(x1); (función coseno) hcon variable independiente x1. Con lo cual la función seno se define en el intervalo [−5, 5] y la función
π πi
coseno se define en el intervalo , .
2 2

Otra forma de construir puntos dentro de un intervalo se hace considerando la orden a = 1 : 3 que construye un intervalo con lı́mite
inferior 1 y lı́mite superior 3, haciendo saltos de unidad, o la orden b = 1 : 0.5 : 4 la cual construye un intervalo de lı́mite inferior 1 y
lı́mite superior 4 con saltos de 0.5 unidades; O por ejemplo la orden c = 0 : 0.3 : 1 que construye un intervalo con lı́mite inferior 0 y hace
saltos de 0.3 unidades hasta llegar a un número menor más cercano a 1 que corresponde al lı́mite superior.

Todo lo anterior (la construcción del intervalo variable independiente y del intervalo variable dependiente) permite graficar la función en
el plano cartesiano, para lo cual se pueden usar los comandos plot y subplot. Como ilustra el siguiente ejemplo

x = linspace(−5, 5, 20);
y = sin(x);
plot(x, y)

cuya gráfica es

Figure 10:

Pero en el anterior ejemplo no se ve la graficación punto a punto, para poder realizar esto se recurre al mismo comando pero al momento
de graficar se usa 0 o0 , 0 ∗0 entre otros, por ejemplo

x = linspace(−5, 5, 20);
y = sin(x);
plot(x, y,0 o0 )

11
El comando figure( ) permite enumerar las figuras, además de no permitir que no se sobrepongan. Mientras que con el comando plot(x,y)
se visualiza la gráfica en dos dimensiones para las variables x independiente, y dependiente, es importante señalar que en este comando
la construcción gráfica se hace uniendo mediante segmentos de recta cada uno de los puntos determinados por ambas variables el cual
se hace hace de manera continua. Si usted desea insertar titulos o comandos de texto Matlab ofrece algunos comandos básicos, por
ejemplo title(0 FuncinSeno0 ), xlabel(0 E jex0 ) que corresponde a una leyenda en el eje x, ylabel(0 e jey0 ) leyenda en el eje (como muestra
10), si por el contrario desea construir una gráfica donde se resalten unicamente los puntos en consideración, se hace uso de la instrucción
interna 0 o0 , o 0 ∗0 plot(x, y,0 o0 ) el cual hace una construcción discreta de la función. legend(0 Funciónseno) que determina una leyenda
dentro de la gráfica (como muestra 11).

Figure 11:

En algunos casos por facilidad se pueden ordenar varias gráficas en una sola pantalla, esto se hace con el comando subplot, a contin-
uación encontrará un ejemplo que iluste lo anterior

x = linspace(−5, 5, 20);
x1 = linspace(−pi/2, pi/2, 20);
x2 = linspace(0, 20, 45);
y = sin(x);
y2 = cos(x);
y3 = tan(x1);
y4 = exp(x2);
subplot(2, 2, 1)
plot(x, y,0 o0 )
title(0 FuncinSeno0 )
xlabel(0 E jex0 )
ylabel(0 e jey0 )
subplot(2, 2, 2)
plot(x, y2,0 o0 )
legend(0 Funcincoseno0 )
xlabel(0 E jex0 )
ylabel(0 e jey0 )
subplot(2, 2, 3)
plot(x1, y3)
legend(0 Funcintangente0 )
xlabel(0 E jex0 )

12
ylabel(0 e jey0 )
subplot(2, 2, 4)
plot(x2, y4)
legend(0 Funcinexponencial 0 )
xlabel(0 E jex0 )
ylabel(0 e jey0 )

Figure 12:

EJERCICIOS

69. Usando los comandos adecuados, gráfique las siguientes funciones en los intervalos y cantidad de puntos indicados

a. y = x3 , [−2, 2], 25 puntos. g. y = sec(x), [−π/2, π/2], 100 puntos.


b. y = ex , [−10, 20], 100 puntos. h. y = tan(x), [−π/2, π/2], 100 puntos.
c. y = e−x , [−10, 20], 100 puntos. i. y = cos2 (x), [−2π, 2π], 50 puntos.
1
d. y = cos(x2 ), [−2π, 2π], 50 puntos. j. y = x−1 , [−20, 20], 25 puntos.
e. y = sin(x2 ), [−2π, 2π], 50 puntos. k. y = x4 + x2 + x − 2, [−2, 2], 25 puntos.
f. y = log(x), [1, 20], 75 puntos. l. y = x − 1x , [−2, 2], 25 puntos.

70. Considere las diez funciones de anterior numeral y grafiquelas en grupos de 4 gráficas (usando solamente los puntos coorde-
nados) con los respectivos titulos y leyendas.
71. Con las herramientas dadas en clase, realice las siguientes gráficas de funciones por partes:

3x + x2 si


 5 si x≤2 
 x ≤ −4

 

 
x
a. f (x) = x2 − 6x + 10 si 2 < x < 5 b. f (x) = x2 +1
si −3 < x < 5

 


 

4x − 15 si x≥5  2
x≥5

2x + 1 si

13


 −x2 si −4 ≤ x ≤ 0




 x2 si 0<x<4


c. f (x) =
4x − 10 si 4≤x≤5








 x
e si x>5

72. Realice las graficas de las siguientes funciones paramétricas y polares en R2 , haciendo uso de los comandos (plot, comet y
polar, según sea el caso) vistos en clase

a. y = sin(t), para t ∈ [0, 2π]. 1


d. y = , para t ∈ [−5, 5].
x
b. y = x2 , para t ∈ [−2, 2]. e. r = cos(2θ ), para θ ∈ [0, 2π].
f. r = sin(θ ), para t ∈ [−π, π].
1
c. y = , para t ∈ [−5, −1]. g. r = 2sin(θ /2), para t ∈ [0, 4π].
x

v. Gráficas en 3 dimensiones: En Matlab se pueden generar gráficas en tres dimensiones usando algunos comandos, como:

plot3 genera una gáfica en tres dimensiones.


comet3 genera trayectoria en 3 dimensiones.
surf genera una superficie.
contour genera un contorno en 2 dimensiones.
quiver3 genera campo vectorial en 3 dimensiones.
mesh genera membrana 3 dimensiones.

Dependiendo de las caracteristicas de cada una de las funciones, se pueden tener funciones vectoriales a valor real o funciones paramétricas.
Iniciamos con las funciones paramétricas:

t = linspace(0, 8 ∗ pi, 2000);


plot3(sin(t), cos(t),t)
grid on

este comando le comunica a Matlab que no debe borrar el contenido de la figura, pintando ası́ un gráfico encima de otro.

Figure 13:

14
t = linspace(0, 8 ∗ pi, 2000);
plot3(cos(t), sin(t),t)
grid on

en este caso se determina el valor de cada una de las variables, en este caso cos(t) y sin(t) determinan los valores de las coordenadas x e
y, y t es el parametro que en nuestro caso tiene como lı́mite inferior 0 y lı́mite superior 8π.

Figure 14:

t = linspace(0, 8 ∗ pi, 2000);


comet3(sin(t), cos(t),t)
grid on

este comando permite generar una simulación en tiempo real del comportamiento de la función paremétrica con relación a los vectores
velocidad de la misma.

Vectores velocidad con diferentes longitudes

t = linspace(0, 8 ∗ pi, 150);


quiver3(sin(t), cos(t),t, cos(t), −sin(t),t)

15
Figure 15:

t = linspace(0, 8 ∗ pi, 150);


quiver3(sin(t), cos(t),t, cos(t), −sin(t), 2)
quiver3(sin(t), cos(t),t, cos(t), −sin(t), 3)
t = linspace(−100, 100, 1000);
subplot(1, 2, 1)
plot3(exp(t/4). ∗ sin(2 ∗ t), exp(t/4). ∗ cos(2 ∗ t),t)
subplot(1, 2, 2)
comet3(exp(t/4). ∗ sin(2 ∗ t), exp(t/4). ∗ cos(2 ∗ t),t)

Para gráficar funciones en dos variables x, y (funciones vectoriales a valor real) f : R2 → R se hace uso de una malla la cual se consigue
con el comando meshgrid

[t1,t2] = meshgrid(−10 : 0.5 : 10, −15 : 0.4 : 15); Representa una rejilla o malla para el plano, la variable t1 es la variable asignada al
eje x, y t2 la variable asiganada al eje y. Dicha rejilla también puede ser conseguida mediante el comando linspace como se estudio
en sesiones anteriores [t1;t2] = meshgrid(linspace(−10, 10, 40), linspace(−15, 15, 60)); para luego construir por ejemplo la función
f (x, y) = x ∧ 2 + y ∧ 2 que en nuestro caso estará dada por
z = t1. ∧ 2 + t2. ∧ 2; Preste mucha atención a la operación .
subplot(2, 2, 1)
sur f (t1,t2, z), colorbar
subplot(2, 2, 2)
plot3(t1,t2, z)
subplot(2, 2, 3)
contour3(t1,t2, z) grafica las curvas de nivel
subplot(2, 2, 4)
mesh(t1,t2, z)

16
Figure 16:

Si se desea consruir una rejilla cuadrada bastará con usar el comando de la siguiente forma
[x, y] = meshgrid(−2 : .1 : 2);
z = exp(−x. ∧ 2 − y. ∧ 2); Preste mucha atención a la operación ·
subplot(2, 2, 1)
plot3(x, y, z)
subplot(2, 2, 2)
mesh(x, y, z)
subplot(2, 2, 3)
sur f (x, y, z)
subplot(2, 2, 4)
sur f (x, y, z), shading f lat el comando ”shading flat” es un efecto de sombreado.

Figure 17:

Algunos trucos de mallas y de sombreado

17
[t1,t2] = meshgrid(−10 : 0.5 : 10, −15 : 0.4 : 15);
z = cos((t1. ∗ t2)./(t1. ∧ 2 + t2. ∧ 2 + 1));
pcolor(t1,t2, z), colorbar el comando ”pcolor” permite ver mapa de colores.
sur f (t1,t2, z), colorbar Para realizar dos graficas 3D en la misma pantalla se usa el comando y hold on, por ejemplo

Figure 18:

[x, y] = meshgrid(−10 : 0.5 : 10);


z1 = x. ∧ 2 + y. ∧ 2;
sur f (x, y, z1)
holdon

Figure 19:

z2 = x + y + 1
sur f (x, y, z2)

Si se desea poner leyendas o cambiar el color de una grafica, se usa el comando facecolor

18
Figure 20:

sur f (x, y, z1,0 f acecolor0 ,0 red 0 )


holdon
z2 = x + y + 1
sur f (x, y, z2,0 f acecolor0 ,0 blue0 )
legend(0 Paraboloide0 ,0 plano0 )
[x, y] = meshgrid(−4 ∗ pi : 0.5 : 4 ∗ pi);
z = sin(sqrt(x. ∧ 2 + y. ∧ 2));
sur f (x, y, z), colorbar

Figure 21:

axis([−4 ∗ pi, 4 ∗ pi, −4 ∗ pi, 4 ∗ pi, −3, 3])


colormap bone, este comando proporciona una escala de grises superficies con curvas de nivel incluidas.

[x, y] = meshgrid(−4 : .1 : 4);


z = sin(sqrt(x. ∧ 2 + y. ∧ 2));

19
sur f (x, y, z) comando para graficar superficie

Figure 22:

contour3(x, y, z), comando para graficar curvas de nivel

Figure 23:

EJERCICIOS
Grafique cada una de las siguientes funciones en el dominio indicado y con la función indicada

72. f (x, y) = x2 + y2 , dominio (x, y) ∈ [−10, 10] × [−10, 10]. 77. f (t) = (t, sin2 (t), cos2 (t)), dominio t ∈ [−3π, 6π]. comet3.
contour y surf. 1
73. f (x, y) = x2 − y2 , dominio (x, y) ∈ [−10, 10] × [−15, 15]. 78. f (x, y) = , dominio (x, y) ∈ [−3, 3] × [−2, 2]. plot3,
x 2 + y2
contour y surf. contour3, mesh, surf.
74. f (x, y) = 2x3 + 2y2 , dominio (x, y) ∈ [0, 2π] × [−π, π]. 79. f (x, y) = x2 +y2 , dominio (x, y) ∈ [, ]×[, ]. plot3, contour3,
contour y surf. plot3 mesh, surf.
75. f (x, y) = sin(x) + cos(y), dominio (x, y) ∈ [−π, π] × x+y
[−π, π]. contour y surf. plot3. 80. f (x, y) = 2 , dominio (x, y) ∈ [, ] × [, ]. plot3, con-
x + y2
76. f (t) = (sin(t), cos(t),t), dominio t ∈ [−π, π]. comet3. tour3, mesh, surf.

20
vi. Comando function En algunas ocasiones como es usual al manejar cualquier software de programación es usual hacer uso de funciones,
las cuales son de gran utilidad; por ejemplo si se desean usar varios valores de entreda en una única función y se desean obtener varios
valores de salida la estructura será

f unction [y1, y2, · · · , yN] = my f unction(x1, x2, · · · , xM)

La decaración de la izquierda de la igualdad será siempre igual, pero la declaración de la derecha será elegida por usted con un monbre
que sea facı́l de manipular y recordar, teniendo presente que habrán variables de salida y de entrada (lo cual se explicará en lineas
posteriores). Es importante tener presente las siguientes recomendaciones

1. Las variables de salida son aquellas que se ubican en la parte izquierda del signo = (recuerde que este signo sirve para asignar
valores a una variable), y las variables de entrada son aquellas que se encuentran delimitadas con el nombre de la función.
2. El nombre del archivo debe coincidir con el nombre de la primera función, en este caso se pueden incluir carácteres alfa
numéricos, empezando por un carácter alfabético, también se puede hacer uso de guiones bajos Jamas deje espacios entre
los caracteres.

Por ejemplo para declarar una función con solo una variable de entrada y una variable de salida

f unction f = f act(n)
f = prod(1 : n);
end

En este caso se hace uso del comando prod el cual ya se encuentra preestablecido por Matlab, el cual realiza la multiplicación de los
números naturales que se le indiquen, por ejemplo si se hace n = 5 el resultado será 120 que corresponde a la multiplicación 1 · 2 · 3 · 4 · 5.

Lo importante del uso de funciones es el posterior llamamiento de la función construida desde la ventana de comandos.

En caso de requerir el uso de dos o mas variables de entrada y una única variable de salida, por ejemplo

f unction p = perm(n, r)
p = f actorial(n) ∗ f actorial(n − r);
end

Recordando que para guardar el script se debe llamar en este caso perm, y se llama desde la ventana de Command Window por ejemplo
con la instrucción perm(4, 3) que realiza la permutación de los elementos 3 y 4, la cual da 6.

Si se desea construir una función con múltiples salidas

f unction [x, v] = caidalibre(t)


v = 40 − 10 ∗ t
x = 200 + 40 ∗ t − 5 ∗ t 2
end

En la cual se tiene una única variable de entrada t y dos variables de salida x y v, en cuyo caso la instrucción en el Command Window
será por ejemplo caidal ibre(5), para obtener los valores v = −10 y x = 275.

En algunas ocasiones no será necesaria la declaración de variables de salida, únicamente con la declaración de las variables de entrada y
el nombre de la función bastará para determinar un resultado interesante, por ejemplo

21
f unction e jemplo5(R, zo)
R = input(0 introduzca el valor de R : 0 ); el comando input realiza la primera interacción con el usuario, determinando el mensaje en el
Command Window que se especifique en la instrucción, y guardando el valor asignado por el usuario en la variable asignada, en nuestro
caso R.
zo = input(0 introduzca el valor de zo : 0 );
r = linspace(0, R, 50); el cual construye un vector fila de 50 elementos con mı́nimo 0 y máximo R.
theta = linspace(0, 2 ∗ pi, 50);
x = cos(theta0 ) ∗ r; en este caso se usa el comando 0 que constituye la transpuesta de la matriz theta y donde el producto con el vector r
genera una matriz de dimensiones 50 × 50, por qué?
y = 5 + sin(theta0 ) ∗ r; Cuál es la dimensión de y?
hold o f f
z = repmat(zo, size(x)); este comando construye una arreglo matricial cuadrado con tantas copias como zo indique.
sur f (x, y, z)
end

es importante señalar que la construcción de este tipo de funciones es tan versatı́l como usted permita.

f unction [med, des] = estadistica(x)


n = length(x); la función length calcula el número de elementos del vector x.
med = sum(x)/n La función sum calcula la suma de los elementos de un vector x.
des = sqrt(sum((x − med). ∧ 2/(n − 1)))
end

EJERCICIOS

81. Considere la función de Cobb-Douglas en las variables α (exponente de capital) y β (exponente de trabajo), con ecuación
CB(H, K) = K α H β , para (K, H) ∈ [1, 100] × [1, 100], haga además una gráfica con los comandos mesh y surf.
82. Construya una función donde el usuario introduzca un número natural n, y se arroje el promedio y la desviación estándar
poblacional de los primeros n números naturales.

En ocasiones se pueden construir variables simbólicas las cuales permite trabajar de manera similar algunas de las funciones que estamos
viendo, por ejemplo si se considera la función f (x) = x2 Matlab no reconocera ninguna acción, para esto Matlab reconoce tres tipos de
instrucción

• syms. Crea una variable simbólica


• sym. Convertir a una variable simbólica.
• double. Convierte a una variable numérica

Un ejemplo sencillo es el simbólo π el cual reconocemos como una aproximación 3.1416, en este caso el sotfware reconoce el valor
numérico y el valor simbólico, ası́ que por ejemplo

p = sym(pi)
q = double(p)
o
a = sym(sqrt(2))

En caso que usted quiera crear variables simbólicas que no posean valores numéricos especificos se hace uso del comando sym, por
ejemplo

22
syms x y

declarando como variables simbólicas x e y, las cuales pueden ser usadas posteriormente para crear funciones de tipo algebraico, a saber
la función f (x) = x2 , puede ser conocido el valor en cualquier asignación para x

syms x
f (x) = x2 ;
x = 3;
f (x) o tambien se puede declarar f (3)
x = 5;
f (x)

o por ejemplo

syms x y
g(x, y) = x2 + y2 ;
x = 3;
y = 4;
g(x, y)
x = 5;
y = 7;
g(x, y)

Si desea hacer una sustitución de manera inmediata se usa el comando subs(función, variable, valor), por ejemplo

syms x
f = x2 ; note la diferencia con la anterior instrucción.
subs( f , x, 8)

o
syms x y
g = x2 + y2 ;
subs(g, {x, y}, {4, 1})

si se desean reemplazar mas de una variable. Además si se desea reemplazar por un vector se hace

syms x
f = x2 ;
subs( f , x, [1 : 5])

Con todo lo anterior es natural preguntarse si se pueden manejar funciones como las conocemos de los cursos de cálculo, por ejemplo
derivar o integrar una función de la forma y = f (x), y la respuesta a esto es sı́.

• di f f ( f ), para derivar una variable simbólica.


• di f f ( f , x), para derivar una variable simbólica con respecto a la variable x.
• int( f ), para hallar la primitiva de la variable simbólica f .
• int( f , x) para hallar la primitiva de la variable simbólica f con respecto a la variable x.

23
• int( f , a, b), para hallar el valor de la integral de la variable simbólica entre los valores a y b.
• int( f , x, a, b), para hallar el valor de la integral de la variable simbólica en la variable x entre los valores a y b.

Por ejemplo al considerar la expresión simbólica f = ax2 + b

• syms x a b
f = a ∗ x2 + b;
di f f ( f )

• syms x y a b
f = a ∗ x2 + b ∗ y2 + c;
di f f ( f , x)
di f f ( f , y)
• syms x a b
f = a ∗ x2 + b;
int( f )
• syms x y a b c
f = a ∗ x2 + b ∗ y2 + c;
int( f , x)
int( f , y)
• syms x a b
f = a ∗ x2 + b;
int( f , 0, 1)
• syms x y a b c
f = a ∗ x2 + b ∗ y2 + c;
int( f , x, 0, 1)

• En ocasiones la construcción de matrices como se hizo al inicio de la unidad puede ser tediosa y aburrida, pero mediante las variables
simbólicas, esto gracias a la concatenación de matrices , como se muestra a continuación:

A = sym(0 a0 , [14])
B = sym(0 b0 , [14])

Donde la construcción se hace en vector fila, y como se hizo con el manejo de matrices se hace

M = [A, B]

para generar el arreglo matricial. También se puede declarar y manipular matrices de variables simbólicas, por ejemplo con el arreglo
matricial M = [A; B] se puede efectuar la suma

sum(M(1, :))

o la suma

sum(M(:, 2))

La construcción de matrices no debe ser siempre numérica, estas pueden ser construidas mediante variables simbólicas y luego reem-
plazadas numéricamente, por ejemplo

symsx

24
A = [x, x2 ; x + 1, x2 − 2 ∗ x]

de manera que se puede reemplazar la variable simbólica x por cualquier cantidad numérica creando el arreglo matricial f (x) = [A], en
cuyo caso

f (x) = [A]
f (2)

En caso que se desee calcular el valor del anterior arreglo matricial en un vector, por ejemplo x = [1, 2] se reasigna el valor de la variable
simbólica de la siguiente manera
syms x
A = [x, x2 ; x + 1, x2 − 2 ∗ x]
f (x) = [A];
xvec = [1, 2];
y = f (xvec)
y{1} se visualizan los elementos (1, 1) del arreglo matricial, en este caso [1, 2].
y{2} se visualizan los elementos (2, 1) del arreglo matricial, en este caso [2, 3].
y{3} se visualizan los elementos (1, 2) del arreglo matricial, en este caso [1, 4].
y{4} se visualizan los elementos (2, 2) del arreglo matricial, en este caso [−1, 0].

Si la variable no es un vector sino una matriz, la lectura cambia mas no su estructura, a saber

syms x
A = [x, x2 ; x + 1, x2 − 2 ∗ x]
f (x) = [A];
xmat = [1, 2; 0, 3];
y = f (xmat)

obteniendo una matriz de células de matrices simbólicas donde cada uno de los elementos de dicha matriz es un nuevo arreglo con los
primeros elementos, en efecto y{1} corresponde a

 
1 2
0 3

y{2} a

 
2 3
1 4

y{3} a

 
1 4
0 9

y{4}

25
 
−1 0
0 3

EJERCICIOS

83. Construya una función donde se calcule la derivada de las funciones f (x) = x2 en x = −2, x = 0, x = 2 y que además grafique
la recta derivada en cada uno de los valores indicados. Como variable simbólica.
84. Constuya una función donde se calcule la integral de la función f (x) = sin(x) en el intervalo [0, π]. Como variable simbólica.
85. Construya una función con variables simbólicas que genere una matriz de dimensiones 4 × 5.
86. Construya una función con variables simbólicas que exprese la matriz

x2
 
1 x
x3 x4 x5 
x6 x7 x8
,

y calcule el calor de la matriz para x = 0, x = 1, x = 2 y x = 3

87. Con la matriz del ejercicio 86 construya el vector v = [0, 1] y calcule el arreglo correspondiente
88. Con la matriz del ejercicio 86 construya la matriz

 
0 1
2 3
,

y calcule el arreglo correspondiente.


Anidadas y ficheros compartidos En ocasiones se requiere hacer uso de dos o más funciones en el mismo script, con lo cual se
pueden usar de manera compartida o anidada, de esta manera es posible definir funciones dentro del cuerpo de otra función. Ası́, una
funcin anidada contiene algunos o todos los componentes de cualquier otra función. La estructura general de este tipo de anidamientos es:

f unction x = A(p1, p2)


...
B(p2)
f unction y = B(p3)
...
end
...
end

Es importante señalar que una función anidada en cualquier nivel dentro de la función principal puede leer o sobrescribir una variable
que tenga un valor asignado por esa función principal. De manera similar, una variable asignada en una función anidada puede ser leı́da
por cualquiera de las funciones que contengan dicha función. Veamos a continuación un ejemplo de cada uno de los casos.

26
i. Funciones en el mismo script: En el siguiente ejemplo se ilustra el uso de funciones en las cuales se usa

f unction [r1, r2] = raices(a, b, c)


x1 = raiz1(a, b, c)
x2 = raiz2(a, b, c)
end

f unction raiz = raiz1(a, b, c)


raiz = (−b + sqrt(b ∗ b − 4 ∗ a ∗ c))/(2 ∗ a);
end

f unction raiz = raiz2(a, b, c)


raiz = (−b − sqrt(b ∗ b − 4 ∗ a ∗ c))/(2 ∗ a);
end

ii. Funciones anidadas:


NOTA: Es importante señalar que las variables de salidas en este caso son siempre locales, y solamente están disponibles para otras
funciones dentro del mismo scritp

27
2 Ciclos de Sentencia
En programación es usual hacer uso de los ciclos de sentencia como if, for, while, switch los cuales permiten ahorrar lineas de progra-
mación y tiempos de ejecución a la hora de programar.

Es importante aclarar que la escogencia de cada una de las sentencias antes mencionadas no tiene orden de prioridad alguno, y que
este tipo de sentencias no son mas que un bucle a una ejecución repetidas veces de un mismo conjunto de sentencias, lo que permite
generar un auto contenido o repetición de alguna función que se desee programar; ası́ que es importante construir correctamente en
inicio, el nudo y el final de cada sentencia.

Sentencia if: Este tipo de sentencia se usa como delimitadora de alguna orden y se suele construir ascendentemente teniendo en
cuenta el orden de los números enteros. A continuación veamos algunos ejemplos:

i. n = input(0 Introduzca un número : 0 )


i f n < 10
n=1
else
n=0
end

El anterior ciclo permite concluir si el número introducido por el usuario es menor o igual de 10. Donde el comando input permite
realizar la primera interacción con el usuario.

La secuencia generica para este ciclo es:


i f {condición}
Instrucción
f inal

o también

i f {condición}
Instrucción verdadera
else
Instrucción f alsa
f inal

Veamos otros ejemplos

ii. n = input(0 Introduzca un número : 0 )


i f n == 0
disp(0 El número es igual a cero0 )
else
disp(0 El número es di f erente de cero0 )
end

iii. n = input(0 Introduzca un número : 0 )


if n > 0
disp(0 El número es positivo0 )

28
else
disp(0 El número es negativo0 )
end

Lo anterior puede ser anidado en un solo ciclo, como se muestra a continuación

iv. n = input(0 Introduzca un número : 0 )


i f n == 0
disp(0 El número es igual a cero0 )
else i f n > 0
disp(0 El número es positivo0 )
else
disp(0 El número es negativo0 )
end
end

Otro ejemplo

v. x = input(0 Abscisa x : 0 );
y = input(0 Ordenada y : 0 );
i f x >= 0
theta = atan(y/x);
if y < 0
theta = theta + 2 ∗ pi;
end
else
theta = atan(y/x) + pi;
end

Si usted se ha dado cuenta cada vez que necesita obtener un resultado se debe compilar nuevamente el programa, para evitar esto
se hace uso del comando function como ha sido costumbre hasta aquı́,

vi. f unction sgn = signo(x)


if x > 0
sgn = 1
elsei f x < 0
sgn = −1
else
sgn = 0
end
end

en este caso simplemente se debe llamar la función desde la ventana de comandos; O si se desea construir una función definida
por partes

29
vii. f unction y = f (x)
i f x >= 0 & x <= 1
y = x;
elsei f x > 1 & x <= 2
y = 2 − x;
else
y = 0;
end
end

En este ejemplo se calcula el valor correcto de la función unicamente en un punto, por ejemplo f (3). Recuerde que debe crear un
script con el mismo nombre de la función.

viii. f unction x = sistemaecuaciones(A, b)


rangoA = rank(A);
rangoAb = rank([Ab]);
[m, n] = size(A);
f print f (0 Sistema de % i ecuaciones con % i incógnitas0 , m, n);
i f rangoA ∼= rangoAb
disp(0 El sistema no tiene solución0 )
elsei f rangoA == n
disp(0 Hay una solución nica0 )
x = A b;
elsei f rangoA < n
disp(0 Hay in f initas soluciones0 );
end
end

En este ejemplo se ilustra el uso de las sentencias if y switch; más el uso del comando lower el cual permite convertir las letras a
minúsculas. El programa consiste en determinar la cantidad de dı́as que tiene el mes de febrero en caso de ser año bisiesto o no.

Mes = input(0 Introduzcaelnombredelmes :0 ,0 s0 ); el comando 0 s0 permite declarar y guardar una variable tipo string.
mes = lower(Mes(1 : 3)); esto permite usar las tres primeras letras del mes.
i f mes ==0 f eb0
bisiesto = input(0 Es año bisiesto? :0 ,0 s0 );
bi = lower(bisiesto(1));
end
switch mes
case{0 sep0 ,0 abr0 ,0 jun0 ,0 nov0 }
dias = 30
case 0 f eb0
i f bi ==0 s0
dias = 29
else
dias = 28
end
otherwise
dias = 31
end

30
Ahora nos dedicamos a estudiar el ciclo de sentencia while el cual actua como un contador y/o delimitador ascendente o descendente,
a continuación veamos el siguiente ejemplo en el cual se ace uso de este tipo de ciclo:

i. Este programa permite contar los números naturales desde n = 3 hasta n = 9

n = 3;
while n < 10
n = n+1
end

Por último se estudia el ciclo for, el cual actua netamente como un contador.

i. Construcción de una matriz 3 × 3 con valores naturales consecutivos.


z = zeros(3);
f or i = 1 : 3
f or j = 1 : 3
z(i, j) = i + j;
end
end
z
ii. Cálculo de factorial para un número natural n.

n = 0;
f actorial = 1;
n = input(0 Factorial del nmero :0 );
f or i = 1 : n
f actorial = f actorial ∗ i;
end
disp(sprint f (0 El f actorial del número %des%d 0 , n, f actorial)) el comando sprintf permite imprimir formatos en cadena, en este
caso imprimir el valor n y el valor f actorial.

iii. Otra forma de construir el factorial de un número n mediante el uso del comando function es la siguiente:

f unction e jemplo = f actorial(n)


n = input(0 introduzca el número natural del cual desea conocer el f actorial : 0 );
f actorial = 1;
i f n >= 1
f or k = 1 : n
n = k ∗ n;
end
else
disp(0 El número n es negativo y por tanto no puede ser calculado su f actorial 0 )
end
end

31
iv. Se define el número de términos de una sucesión, ası́ como los extremos inferior y superior donde se quiera representar la sucesión.

in f erior = input(0 valor de n a partir del cual quieres analizar la sucesión : 0 );


terminos = input(0 N úmero de t érminos a dibu jar : 0 );
superior = in f erior + terminos − 1;
x = linspace(in f erior, superior,terminos);
syms n
sucesion = input(0 sucesión en f unción de n : 0 );
f or k = 1 : terminos
an(k) = subs(sucesion, n, in f erior + k − 1); Término k-ésimo de la sucesión definido en un arreglo vectorial, donde el comando
subs determina una copia de la variable sucesion, reemplazando todas los resultados de la variable n con la variable inferior+k-1
para luego evalúar uevamente sucesion.
end
plot(an,0 ∗0 )
v. Construcción de una matriz consecutiva de orden 6 × 6. Con ciclosfor anidados.

z = zeros(6);
f or i = 1 : 6
f or j = 1 : 6
z(i, j) = j + (6 ∗ (i − 1));
end
end
disp(z)
vi . Diferentes procesos para construir una matriz consecutiva.

z = zeros(6);
x = 1;
f or i = 1 : 6
f or j = 1 : 6
z(i, j) = x;
x = x + 1;
end
end
disp(z)

O también
h = zeros(6);
cont = 1;
f or i = 1 : 6
f or j = 1 : 6
h(i, j) = cont;
cont = cont + 1;
end
end

32
h

O también
n = 0;
z = zeros(6);
while n < 36
f or i = 1 : 6
f or j = 1 : 6
n = n + 1;
z(i, j) = n;
end
end
end
z

O también
z = zeros(6);
f or i = 1 : 6
f or j = 1 : 6
z(i, j) = j + (6 ∗ (i − 1));
end
end
z
vii. Rescate de bloques principales, bloques principales de Jordan

z1 = zeros(6)
f or t = 1 : 3
f or i = (2 ∗ t − 1) : (2 ∗ t)
f or j = (2 ∗ t − 1) : (2 ∗ t)
z1((2 ∗ t − 1) : (2 ∗ t), (2 ∗ t − 1) : (2 ∗ t)) = z((2 ∗ t − 1) : (2 ∗ t), (2 ∗ t − 1) : (2 ∗ t));
end
end
end
z1
o también:
n = input(0 introduzca la dimensión de la matriz : 0 )
z = zeros(n);
m = n/2;
f or t = 1 : m
f or i = (2 ∗ t − 1) : (2 ∗ t)
f or j = (2 ∗ t − 1) : (2 ∗ t)
z(i, j) = j + (6 ∗ (i − 1));
end
end
end
z

33
Procesos que se pueden mejorar quitando un ciclo for. Intente estructurar un programa donde se usen solamente dos ciclos for.

EJERCICIOS

89. Construya un programa con ciclos anidados que pida al usuario la dimensión de una matriz cuadrada, y dé como resultado una
matriz consecutiva de orden 2n × 2n.
90. Construya una matriz de bloques principales 2 × 2 con dimensión 2n × 2n.
91. Construya una matriz triángular superior de orden n × n.

92. Construya una matriz de orden 2n × 2n donde se rescaten los bloques principales del orden 2 × 2.
93. Construya una matriz de orden 3n × 3n donde se rescaten los bloques principales del orden 3 × 3.

3 Conceptos Básicos de Estadı́stica


El manejo de herramientas estadı́sticas es quizás una de las principales aplicaciones de las matemáticas a las diferentes ramas del
conocimiento, es ası́ como su estudio permite analizar de manera cientifica diferentes procesos cuantitativos o cualitativos, a contin-
uación usted encontrará un pequeño resumen de algunos conceptos básicos estadı́sticos.

Barra de frecuencias: Conocida como una herramienta gráfica que permite visualizar comportamientos de repetición en analisis
cuantitativos. Veamos a continuación algunos ejemplos:

i. x = 0.5 : 21.5;
length(x)
horas = [6, 31, 30, 50, 69, 75, 60, 59, 69, 61, 43, 44, 54, 43, 21, 11, 7, 4, 2, 1, 1, 3];
f rec = horas/sum(horas);
bar( f rec,0 c0 )
xlabel(0 Observación0 )
ylabel(0 Frecuencia0 )
ii. a = 5; temperatura mı́nima.
b = 35; temperatura máxima.
T = round(a + (b − a) ∗ rand(30, 1)) 30 temperaturas al azar, se usa el comando round el cual aproxima al entero mas proximo, y
el comando rand que genera un vector de 30 números aleatorios entre 0 y 1
x = a + 5 : 10 : b;
hist(T, x)

Gráficos estadı́sticos y diagrama de sectores: Otros tipos de gráficos usados en estadı́stica son los diagramas de sectores o diagra-
mas de tortas y los diagramas de barras. Aplicados como se muestra a continuación:

x = [12, 15, 185, 42, 85, 96];


sum(x)
pie(x) Comando para indicar un diagrama de sectores.
legend(0 grupo10 ,0 grupo20 ,0 grupo30 ,0 grupo40 ,0 grupo50 ,0 grupo60 )
pie3(x)
pie3(x, [110000]) en esta instrucción, los unos hacen que los primeros dos datos se separen del diagrama de sectores.
pie3(x, [010101])
Diagramas de barras

x = [12, 15, 185, 42, 85, 96];


subplot(2, 2, 1), bar(x),title(0 Barras Verticales0 )
subplot(2, 2, 2), barh(x),title(0 Barras Horizontales0 )

34
subplot(2, 2, 3), bar3(x),title(0 Barras Verticales 3D0 )
subplot(2, 2, 4), bar3h(x),title(0 Barras Horizontales 3D0 )

carga de datos de Excel en Matlab: Para cargar datos de excel en matlab, se debe guardar el fichero en la misma carpeta de
ejecución, y cargarlo en el CURRENT DIRECTORY, luego de esto se procede a cargar el archivo de EXCEL en matlab mediante el
comando XLSREAD.

1. Si el archivo excel tiene una sola hoja de lectura se procede de la siguiente forma:
a = xlsread(0 nombre del archivo excel 0 ,0 columna o f ila que se desea guardar0 )
datos = xlsread(0 Libro10 )
o también
datos = xlsread(0 Libro10 ,0 B35 : B490 ) indicando el dominio que se quiere cargar.
2. Si el archivo excel tiene mas de una hoja de lectura se procede de la siguiente forma:
a = xlsread(0 nombre del archivo0 ,0 nombre de la ho ja0 ,0 f ila o columna a guardar0 )
datos = xlsread(0Cuadros0 )

Con esto datos se pueden sacar todos las medidas estadı́sticas, tanto las centrales como las de dispersión. Si al leer y guardar los
datos se desea guardar en otra variable, se puede hacer, pero recuerde que las variables siempre serán matriciales o vectoriales. Para usar
medidas de tendencia central como: media y mediana, se usan los comandos mean y median resectivamente. Por ejemplo:

media = mean(datos)
mediana = median(datos)
Los comandos para medidas de dispersión como: desviación y varianza, los cuales son std y var

desviacion = std(datos, 1)
varianza = var(datos, 1)

El coeficiente de variación como se sabe es la desviación/media. También el coeficiente de variacin permite comparar las dispersiones
de dos distribuciones distintas, siempre que sus medias sean positivas. El coeficiente de simétria y la curtosis, el cual mide el grado de
asimetria de la muestra, se usan las siguientes formulas:

Coe fVar = desviacion/media


Coe f Sim = (sum(datos − media)3)/lenght(datos/desviacion3)
curtosis = (sum(datos − media) ∧ 4)/lenght(datos/desviacion ∧ 4)

Para graficar un diagrama de barras se procede de la siguiente forma: El vector datos servira para graficar las frecuencias, y se debe
construir un vector de posiciones, el cual se puede construir como sigue:

y = 1 : 14
titulos = xlsread(0Cuadros0 ,0 Cuadro10 ,0 A35 : A490 )
bar(y, datos) Se usa el comando bar para construir el diagrama de barras. En ocaciones es buena estrategia organizar los datos de
menor a mayor, para esto se usa el comando sort.
datosascendentes = sort(datos) Datos ordenados de menor a mayor
datosdescendentes = sort(datos,0 descend 0 ) Datos ordenados de mayor a menor

Si se desean gráficar varias columnas en un mismo plot con poligono de frecuencias, primero se deben cargar los datos en todo el
dominio de las filas y columnas.

tabla = xlsread(0Cuadros0 ,0 Cuadro10 ,0 D35 : I490 )


[n, p] = size(tabla); en este vector se guardan las dimensiones de la matriz, en orden fila columna.
t = 1 : p; se guarda en un vector t el número de columnas.
plot(t,tabla)
legend(0 Menos de 1 salario mı́nimo0 ,0 De1amenos de 2 S.M.0 ,0 De 2 a menos de 3 S.M.0 ,0 De 3 a menos de 4 S.M.0 ,
0 De 4 a menos de 5 S.M.0 ,0 De 5 a menos de 6 S.M.0 ,0 De 6 a menos de 7 S.M.0 ,0 De 7 a menos de 8 S.M.0 ,0 De 8 a menos de 9 S.M.0 ,
0 De 9 a menos de 10 S.M.0 ,0 De 10 a menos de 12 S.M.0 ,0 De 12 a menos de 15 S.M.0 ,0 De 15 a menos de 20 S.M.0 ,0 De 20 S.M. y más0 ,

35
0 Sin
in f ormación de monto0 )
xlabel(0 N úmerodesalarios0 )
ylabel(0 Población0 )

Diferentes gráficos estadı́sticos:

1. Diagrama de cajas y bigotes: Es una representación visual que muestra caracterı́sticas como dispersión y simétria. Recordando
que los lados más largos presentan el rango intercuartilico, donde el segmento vertical indica la posición de la mediana y su relación
con el primer y tercer cuartil. Las lineas que salen de las cajas se llaman bigotes, los cuales tienen un lı́mite de prolongación, de
manera que cualquier dato que no se encuentre dentro de dicho rango es marcado e identificado de manera individual. Ejemplo:
Consideremos distribución de edades en 20 personas:

X = [25, 36, 24, 37, 20, 39, 36, 45, 31, 31, 39, 24, 29, 23, 41, 40, 33, 24, 34, 40];
X1 = sort(X)
mean(X)
median(X)
boxplot(X) la orden boxplot gráfica el diagrama de cajas y bigotes para el vector X
subplot(1, 2, 1)
boxplot(X, 1) este comando corresponde a un gráfico con muescas
subplot(1, 2, 2)
boxplot(X, 2)
2. x = 0 : pi/10 : pi;
y = sin(x);
e = std(y) ∗ ones(size(x)); desviación estandar del vector y
errorbar(x, y, e) gráfico del vector x contra el vector y, con barras de error dadas por e simétricas respecto a al vector y.
3. A continuación se muestra un ejemplo de lectura y ejecución en gráficos de dispersión de algunos datos internos en Matlab por
ejemplo discrim, dicha lectura se hace con el comando load , dicha lectura se hace en 6 diferentes matrices, la primera ratings
matriz numérica, la segunda es names matriz de caracteres, la tercera idx numérica,
gplotmatrix(ratings(:, 1 : 3), ratings(:, 4 : 7), group,0 rb0 ,0 .o0 , [ ], 0 on0 , 0 0 , categories(1 : 3, :), categories(4 : 7, :)) los tres puntos se
usan para cambiar de linea
ratings(:, 1 : 3) lee las 329 filas y las tres primeras columnas
ratings(:, 4 : 7) lee las 329 filas y las columnas 4 a 7, rb asigna rojo y azul a las dos series de datos .o asigna . y o respectivamente
a los datos [ ] funciona como leyenda para . y o. (puede omitirse) on funciona en este caso para poder gráficar ambas series de
datos la lectura de la matriz categories funciona para las etiquetas de los ejes en cada caso. El comando ”gscatter(x,y,g)” crea un
grfico de dispersin entre variables x e y, agrupado según g.
gscatter(ratings(:, 1), ratings(:, 2), group,0 br0 ,0 xo0 )
xlabel(0 climate0 );
ylabel(0 housing0 );
Diagrama de pareto o distribución A − B −C. Recordando que organiza los datos de forma que estos quedan en orden decreciente,
de izquierda a derecha y permite visualizar la ojiva.
pareto(x)

Modelos lineales y no lineales: Estos modelos sirven para obtener el modelo de una variable de respuesta como función de una
o más variables predictorias, los cuales hacen previsiones, y establecen relaciones entre variables. Entre estos modelos se destacan
anova1(X): One way balanceado que compara las medias de las columnas de una matriz X. Dando el p-valor que permite contrastar la
hipótesis nula que las muestras (columnas) provienen de la misma población, donde 0.01 < p < 0.05. Mientras que anova2(X,replicas);
Consideremos la siguiente matriz:

A = [24, 14, 11, 7, 19; 15, 7, 9, 7, 24; 21, 12, 7, 4, 19; 27, 17, 13, 7, 15; 33, 14, 12, 12, 10; ...23, 16, 18, 18, 20];

36
[p,tbl, stats] = anova1(A) Obteniendo el p − valor. Veamos el comportamiento de la media por cada una de las columnas

mediac ol1 = mean(A(:, 1))


mediac ol2 = mean(A(:, 2))
mediac ol3 = mean(A(:, 3))
mediac ol4 = mean(A(:, 4))
mediac ol5 = mean(A(:, 5))

Analice cada uno de los diagramas de caja que sale en la figura. El siguiente ejemplo muestra un diseño bifactorial con dos variables.
Se está comprobando si la dosis de cierta droga y el momento en el dı́a en la que se administran tiene efecto sobre una enfermedad
determinada, para esto se seleccionaron diez sujetos y se les proporciono una dosı́s en seis ocaciones distintas, tres en la mañana, tres en
la tarde y tres en la noche con tres niveles de droga diferentes en cada ocasión, produciendo la siguiente matriz: Analice cada uno de los
diagramas de caja que sale en la figura.

Se desean comparar las calificaciones promedio que obtienen los estudiantes en matemáticas, que imparten 4 profesores diferentes,
para esto se eligieron 32 estudiantes y se distibuyeron aleatoriamente los estudiantes por profesor, los datos correspondientes son:

C = [68, 80, 87, 56; 90, 73, 82, 80; 67, 68, 92, 71; 85, 67, 72, 91; 86, 49, 45, 80; 53, 67, 74, 56; 64, 63, 85, 67; 71, 60, 93, 53];

Este ejercicio es diferente ya que nos dicen que el nivel de significancia es del 0.05. se deben mirar las tablas correspondientes a la
f-distribución; Se sabe en este caso que la hipótesis no es nula pues las medias no son iguales. Además se debe calcular el estadı́stico de
prueba F mirando los grados de libertad v1 = 4 − 1, v2 = 32 − 4. Se calcula ahora la región de rechazo Fa,v1,v2 = 2.95 esto con la tabla
F. Obteniendo que F0 = 1.4314. El cual se cálcula como sigue:

Primero se calcula la media de toda la muestra tomando filas y columnas

mediacolumnas = mean(C(:, :))


mediageneral = mean(mediacolumnas) Media muestral general
[ f , c] = size(C);
SCT = 0;
f or i = 1 : f
f or j = 1 : c
SCT = SCT + (mediageneral −C(i, j))2 ;
end
end
SCT Lo anterior es la variación total (suma cuadrática total)
SCTr = 0
f or i = 1 : c
SCTr = SCTr + f ∗ (mediacolumnas(1, i) − mediag eneral)2 ;
end
SCTr Lo anterior es la suma cuadrática de tratamientos
SCE = SCT − SCTr Suma cuadrática del error
SCE = SCT − SCTr Variación aleatoria o error
f 0 = (SCTr/(c − 1))/(SCE/(( f ∗ c) − c))
[p,tbl, stats] = anova1(C)

En la tabla ANOVA se muestra lo siguiente:

Source SS(Suma de cuadrados) d f (Grados de libertad) F Prob > F(p − valor)


CMT R
Columna(inter grupos) SCTr c − 1(k − 1) CME
Error(intragrupos) SCE c + f − 1(nT − k)
Total SCT nT − 1

Con todo lo anterior F0 no cae en la región de rechazo. Por lo tanto no se puede rechazar la hipótesis de que las medias de las califi-
caciones de los cuatro profesores son iguales. Se analiza el nivel de significancia alpha α, y se miran las siguientes dos posibilidades:

i. si F > fal pha se rechaza H0 (medias de los grupos no son iguales).

37
ii. Si F < fal pha no se puede rechazar la H0 , por lo tanto las medias de los grupos son iguales, con lo cual no hay diferencias
significativas entre los niveles.

Análisis de varianza y diseo completamente aleatorio: El uso de análisis de varianza para probar la igualdad de k medias pobl-
cionales en un diseño completamente aleatoriazo. La forma general de esta prueba de hipótesis es

H0 : m1 = x2 = .... = mk

Ha : No todas las medias poblacionales son iguales

Se supone que de cada una de las k poblaciones se toma una muestra aleatoria simple de tamaño n j . Para los datos muestrales, sean:

xi j = valor de la observación
deltratamiento
j.
n j = Número de observaciones en el tratamiento j.
x j = media muestral del tratameinto j.
s2j = varianza muestral del tratamiento j.
s j = desviacin estándar muestral del tratamiento j.
Donde como es costumbre la formulas de la media muestral y la varianza son las conocidas en los cursos de estadı́stica básica

nj
∑ xi j
x j = i=1
nj
y
nj
∑i=1 (xi j − x j )2
s2j =
nj −1

La media muestral general se denota por

∑kj=1 ∑ki=1 xi j
x=
nT
con nT = n1 + n2 + cdots + nk

Estimación de la varianza poblacional entre tratamientos cuadrado Medio debido a los Tratamientos CMTR

∑kj=1 n j (x j − x)2
CMT R =
k−1
Al numerador de la anterior ecuación se le llama suma de cuadrados debido a los tratamientos SCTR, y el denominador representa
los grados de libertad. Estimación de la varianza poblacional dentro de los tratamientos cuadrado medio debido al error CME

∑kj=1 (n j − 1)s2j
CME =
nT − k
El denominador se llama suma de cuadrados debido al error SCE, y el denominador corresponde a los grados de libertad.

Comparación de las estimaciones de las varianzas: la prueba F, si la hipótesis nula es verdadera, el CMTR y el CME proporcionan
dos estimaciones insesgadas e independientes de σ 2 . Se debe recordar que cuando se tienen poblaciones normales, la distribución nor-
mal del cociente de las dos estimaciones independientes de σ 2 sigue una distribución F. Por tanto, si la hipótesis nula es verdadera y se
satisfacen las suposiciones del ANOVA, la distribución muestral

CMT R
CME

38
será una distribución F con k − 1 grados de libertad en el numerador y nt − k grados de libertad en el denominador. Pero si la
hipótesis nula es falsa, el valor CMT R 2 CMT R
CME será muy grande debido a que CMTR sobreestima σ . Por tanto, si el valor de CME resulta ser
demasiado grande para haber sido tomado de la distribucin F con k − 1 grados de libertad en el numerador y nT − k grados de libertad
en el denominador, se rechaza H0 . Como la decisión de rechazar H0 está basada en el valor de CMT R
CME , el estadı́stico de prueba que se usa
para probar la igualdad de k poblaciones es
CMT R
F=
CME
A continuación se ilustraran algunos ejemplos de estadı́stica multivariante:

1. Los datos de la siguiente tabla muestran los precios de apartamentos en la ciudad de Bogotá con sus respesctivas hipotecas, valor
medio y superficie de la cocina.

Agencia Duración media de hipoteca (años). x1 Valor medio. x2 Superficie media de cocina. x3
1 8.7 0.3 3.1
2 14.3 0.9 7.4
3 18.9 1.8 9.0
4 19.0 0.8 9.4
5 20.5 0.9 8.3
6 14.7 1.1 7.6
7 18.8 2.5 12.6
8 37.3 2.7 18.1
9 12.6 1.3 5.9
10 25.7 3.4 15.9

Table 3: Tabla Ejemplo 1.

a. Dibújese el diagrama de dispersión múltiple usando el comando plotmatrix.


b. Para las variables x1 y x2 cálcule las medias muestrales x1 , x2 , las varianzas muestrales σ12 , σ22 , además de la covarianza
entre x1, x2 , σ12 y correlación r12 .
c. Usando la matriz de datos X y la matriz de centrados H, cálcule el vector de medias muestrales x y la matriz de covarianzas
muestrales Σ, y obtenga la matriz de correlaciones R.

Solución:

a. Para dibujar el diagrama de dispersión solamente ingrese la matriz correspondiente y use el comando plotmatrix.

Figure 24:

39
b. Para el cálculo de las medias muestrales
[n, p] = size(x)
m1 = sum(x(:, 1))/n o con el comando mean
m2 = sum(x(:, 2))/n

Para el cálculo de las varianzas


s11 = (sum(x(:, 1)).2 )/n − m12

y
s12 = (sum(x(:, 2)).2 )/n − m22 o usando
s11 = var(x(:, 1), 1)
s22 = var(x(:, 1), 2)

Por último para las correlaciones entre las variables x1 y x2 se usan las siguientes instrucciones

s12 = sum(x(:, 1). ∗ x(:, 2))/n − m1 ∗ m2

y
r12 = s12/sqrt(s11 ∗ s22)
Bajo la luz de estos resultados se observa que la correlación es positiva y alta.

c. Se sabe que la matriz de centrado está definida por

1
H = I − J · J0
n
Donde I corresponde a la matriz identidad y J corresponde al vector columna de dimensiones n × 1, por tanto se cálcula:

m = X 0 ∗ ones(n, 1)/n

y se construyen las matrices

1
S = X 0 HX
n
,

d = diag(S). ∧ (0.5)

R = diag(d) ∗ S ∗ diag(d)

Instrucciones por las cuales usted puede obtener el valor deseado

m = mean(X)

S = cov(X, 1)

R = corrcoe f

40
4 Herramienta GUIDE
Esta herramienta se conoce por ser la interfas gráfica de usuario, la cual permite crear interacción entre el usuario y el programa, a
continuación se verán algunos ejemplos para el uso de dicha herramienta:

1. Primero se reconoce el comando xlsread, el cual sirve para realizar lectura de datos desde un archivo Excel por ejemplo, si
se tiene un archivo de Excel llamado Cuadros, la orden para cargar dicho archivo a Matlab es la siguiente:

tabla1 = xlsread(0Cuadros0 )

donde se guardan dichos datos en la variable tabla1, en el caso que usted quiera extraer un dominio especifico, la orden
debe ser por ejemplo:

tabla1 = xlsread(0Cuadros0 ,0 A1 : B150 )

Y si el archivo de Excel tiene más de una hoja de cálculo, se usa:

tabla1 = xlsread(0Cuadros0 ,0 Cuadro10 ,0 A1 : B150 )

2. Ahora se considera el comando xlswrite, el cual permite reescribir archivos de Excel (el cual debe ser creado con anterioridad
y guardado en la misma carpeta que guarde el scritp de Matlab), por ejemplo
x = rand(12, 20);
y = ones(12, 22);
z = eye(5);
xlswrite(0 e jemplo.xlsx0 , x);

Se reescribe en el archivo de Excel llamado ejemplo la variable x.

xlswrite(0 e jemplo.xlsx0 , y,0 Ho ja20 );

Se reescribe en el archivo de Excel llamado ejemplo la variable y. en la hoja 2.

xlswrite(0 e jemplo.xlsx0 , y,0 Ho ja30 ,0 B2 : W 130 );

Se reescribe en el archivo de Excel llamado ejemplo la variable y en la hoja 2 en el dominio indicado si conoce con exactitud
dicho dominio.

xlswrite(0 e jemplo.xlsx0 , z,0 Ho ja40 ,0 B20 );

Se reescribe en el archivo de Excel llamado ejemplo la variable z en la hoja 2 en la casilla indicada.

Nota: Tenga presente que usted debe crear con anterioridad el archivo de Excel con el nombre que usará en el comando
interno.

NOTA: La estructura de la interfaz GUIDE y la funcionalidad de cada uno de los botones se hace en clase, en estas notas
solamente se mostrarán algunos ejemplos y las ordenes que se usarán en cada uno.
3. La siguiente interfaz pretende interactuar con el usuario de manera que introduzca un nombre y un número de cédula, y al
pulsar un botón esta información quede guardada en un archivo Excel

41
Figure 25:

Para que esta interaz funcione correctamente, en el Callback del botón Push Button se deben introducir las siguientes lineas:

Figure 26:

Donde la primera linea accede a la información consignada en la tabla llamada uitable1, esta información la realiza en
forma de datos, para esto se usa el comando data.

En la segunda linea se guarda en la variable n el número de filas (que en nuestro caso es 4) que tiene la tabla.

En la tercera linea la orden datos.csv permite guardar los datos de la tabla en formato csv, y w da permisos de escritura.

El comando fprintf permite imprimir los datos guardados en la variable A, donde s da formato string, n determina un enter
en cada una de las filas, y C{i, :} permite imprimir en la fila i.

Y finalmente xlswrite(0 Tabla1.xlsx0 ,C); permite reescribir la información recopilada en la tabla directamente en el archvo
llamado Tabla1.

4. En este ejemplo se muestra la construcción de una tabla con el número de filas y columnas modificables, como muestra a
figura 27

42
Figure 27:

En el Callback del botón insertar se debe introducir las lineas mostradas en la figura 28:

Figure 28:

donde las dos primera lineas obtienen los valores numéricos como variable String, lo cual se hace con el comando get, y
mediante el comando str2double (el cual convierte un caracter string a un caracter numérico).

El tercer renglón con el comando cell crea una celda, que se guarda en la variable nums, detallando el número de filas y
columnas que el usuario ingreso previamente.

En el cuarto renglón se crea una celda vacia, y el quinto y sexto renglón se crea una matriz de valores lógicos de una fila.

Para el botón Guardar las lineas se muestran en la figura 29

Figure 29:

Las cuales son las mismas lineas de programación del ejemplo anterior, y permite guardar la información en el archivo de
Excel llamado Tabla2.

43
5. En este ejemplo se pretende ilustrar cómo guardar información nombre y número de cédula sin tener que indicar el número
de filas columnas; con dos botones, el primero es guardar, que permite imprimir la información suministrada en la tabla,
y el segundo botón Cargar, permite guardar la información en un archivo de Excel, en la figura 30 se muestra la interfaz
correspondiente

Figure 30:

La primera orden ser declarar una variable global llamada en nuestro caso t, la cual nos permitir ”transportar” entre funciones
la información suministrada por el usuario en los espacio Nombre y Cédula, esto se debe hacer directamente desde la función
identificada OpeningFcn como se muestra en la figura 31

Figure 31:

El siguiente paso corresponde a programar las lineas de comando para el botón guardar, las cuales se muestran en la figura
32

Figure 32:

donde se recopila la variable global t, y se guarda la informacin suministrada por el usuario en las variables Nombre y
Cedula, posteriormente se crea un arreglo matricial el cual está compuesto por la variable t.Mydata creada en la función
OpeningFcn, para finalmente ubicar la información recopilada en la variable t.MyData en la tabla, las dos últimas instruc-
ciones se usan para borrar el contenido registrado en los espacios Nombre y Cedula, lo cual permite que el usuario registre

44
nuevos datos.

Finalmente para e botón Cargar se repite el proceso que se ha hecho en los dos anteriores ejemplos, lo cual se muestra en
la figura 33.

Figure 33:

Mostrando el resultado esperado en el archivo de Excel llamado Tabla4.


6. Ahora se estudiará la opción popupmenu, la cual nos permite desplegar varias opciones de selección; en el siguiente ejemplo
se pretende mostrar la opcin que la persona ha seleccionado, como muestra la figura 34

Figure 34:

Las lineas de programación deben estar sobre el Callback correspondiente al botón popupmenu como muestra la figura 35

Figure 35:

En este caso las instrucciones son sencillas, en la primera linea se guarda la opción seeccionada por el usuario en la variable
Opc la cual se guarda como un String; haciendo lo mismo en la segunda linea, pero en este caso la variable nom se guarda
como un Value; la tercera linea hace la relación ente ambas variables guardando esto en la variable texto, para finalmente
imprimir en un cuadro de dialogo la opción seleccionada por el usuario.

7. Este ejemplo pretende imprmir dos respuestas en botones Edit Text a una selección hecha por el usuario en el popupmenu,
como se muestra en las figuras 36 y 37

45
Figure 36:

Figure 37:

En este caso se arroja la respuesta capital en el espacio con Tag edit1, e idioma hablado en el espacio con Tag edit2, a
continuación se muestran las lineas de programación

Figure 38:

Es importante reslatar que en este ejemplo se ha hecho uso del ciclo switch, el cual actua ejecutando uno o varios grupos de
instrucciones según sea el caso, como se muestra en la figura 38, donde la primera linea de programación recopila la opción
que el usuario ha seleccionado, guardandola en la variable valor la cual es de naturaleza numérica, en este ejemplo para

46
la opción Colombia se tendrá valor=1, para Brasil se tendrá valor=2 y ası́ consecutivamente, para la linea switch valor se
despliegan los casos case 1, case 2, case 3 y case 4, en las cuales se indica mediante la instrucción set las lineas de texto
que se ubicaran en los espacios edit 1 y edit 2.
8. En este ejemplo se muestra una situación similar al ejemplo 7, con la diferencia que la respuesta a la opción seleccionada es
una imagen, para esto se hace uso del comando imread, en la figuras 39 y 40 se muestra la intefaz esperada

Figure 39:

Figure 40:

A continuación se muestran las lineas de programación del botón popupmenu con tres opciones Colombia, Perú y Chile

Figure 41:

47
En cada una de los tres casos de opciones en el switch case, se guarda en la variable imagen mediante el comando imread
el cual hace la lectura de la imagen seleccionada como una matriz, en la segunda linea de programación se considera la
instrucción image que permite hacer la lectura y ubicarla en el espacio correspondiente al axes1.

5 Modelación Matemática
En esta sección se pretende mostrar algunos modelos matemáticos aplicando ecuaciones diferenciales.

1. Movimiento Amortiguado: Se pretende analizar el comportamiento de un modelo con una masa atada a un muelle elástico
con constante γ y una fuerza de rozamiento proporcional a la velocidad. Conociendo la ecuación de movimiento para el
sistema

dx2 dx
2
+ 2γ + ω02 x = 0, (1)
dt dt
donde:

ω0 corresponde a la frecuencia propia de oscilador.


γ corresponde a la constante de amortiguador.

En este caso se analizará el caso cuando γ < ω0 , cuya soluci´n viene dada por la ecuación

x(t) = e−γt (Asin(ωt) + Bcos(ωt)), (2)

donde A y B corresponden a constantes las cuales son determinadas por medio de las condiciones iniciales del problema,
posición inicial x0 y velocidad inicial v0 , de donde se obtiene

v0 + γx0
B = x0 A=
ω
q
donde ω = ω02 − g2 , lo cual permite determinar con exactitud la ecuación de movimiento de la masa con respecto al
oscilador
  
v0 + γx0
x(t) = e−γt sin(ωt) + x0 cos(ωt) (3)
ω

En la figura 42 se observan las lineas de programación para un oscilador con frecuencia propia w0 = 100, constante de
amortiguador g y posición inicial x0 = 2

Figure 42:

48
La idea de este ejemplo es construir una interfaz donde se pueda evidenciar el movimiento del oscilador modificando el
valor de la constante del amortiguador ω, mediante un slider que permita modificar el valor de γ como muestra la figur 43

Figure 43:

Para esta interfaz se programan los botones slider y textBar los cuales deben estar comunicados para mostrar el valor
correspondiente de γ como muestra la figura 44

Figure 44:

en la cual se obtiene el valor dado por el slider guardandolo en la variable numérica valor, en la segunda linea se pasa
esta variable a string, para luego enviarla a textBar, posteriormente se realiza la programación correspondiente a la imple-
mentación de las ecuaciones correspondientes. Finalmente para enlazar lo que el usuario digite en el textBar se realizan las
lineas de programación que se muestran en la figura 45

Figure 45:

2. Masa - Resorte: En este ejemplo se considera un sistema masa resorte, en el cual se tiene un resorte con longitud l, el cual
se encuentra suspendido verticalmente de un soporte horizontal y del cual cuelga una masa m. En este sistema se pueden
tener las siguientes opciones:

i. Movimiento armónico simple, o libre no amortiguado. Con ecuación de movimiento

d2y
+ ω 2 y = 0,
dt 2

49
k
donde ω 2 = , donde k corresponde a la constante del resorte y m la masa del cuerpo que cuelga de resorte; con
m
solución viene dada por la ecuación

y(t) = y0 sin(ωt),
donde y0 corresponde a la posición inicial de la masa.
ii. Movimiento libre amortiguado. Con ecuación de movimiento

d2y dy
2
+ 2β + ω 2 y = 0,
dt dt
En cuya solución

y(t) = Aeλ1 t + Beλ2 t ,


con

p p
λ1 = −β + β 2 − ω2 λ2 = −β − β 2 − ω2

γ k
se tienen tres casos, que dependen de los valores para β = la constante de amortiguamiento, ω 2 = la frecuencia
2m m
propia del osciladror,las condiciones iniciales sobre la posición inicial y(t = 0) = y0 , la velocidad inicial ẏ(t = 0) = v0 ,
los cuales se enuncian a continuación:
a. Sobreamortiguado: β > ω0 , que corresponde a raices reales distintas y negativas, por lo cual la solución a la
ecuación de movimiento viene dada por

y(t) = Ae−|λ1 |t + Be−|λ2 |t ,


de donde |λ1 | < |λ2 |, con lo cual e−|λ2 |t < e−|λ1 |t , y por tanto e−|λ1 |t determina el tiempo con el cual decae la
solución
b. Subamortiguado: β < ω0 , que correspode a raices complejas conjugadas, donde la solución a la ecuación de
movimiento

y(t) = e−βt (Acos(ωt) + Bsin(ωt),


la cual puede ser reescrita como

y(t) = A(t)cos(ωt + ϕ),


con A(t) = A0 e−βt que determina el ”lı́mite gráfico” de la ecuación de movimiento.
c. Criticamente amortiguado: β = ω, que corresponde a una única raı́z real, y cuya solución a la ecuación de
movimiento viene dada por

y(t) = (A + Bt)e−βt
iii. Movimiento forzado amortiguado. Con ecuación de movimiento

d2y dy Fext
2
+ 2β + ω 2 y = cos(ωε t),
dt dt m
donde Fext 6= 0, es una fuerza externa que afecta el movimiento natural del sistema, esto puede ser la fricción del aire,la
resistencia que puede hacer un medio viscoso en el cual el sistema se mueve, o movimientos vibratorios externos. y
ωε corresponde a la frecuencia externa de excitación.

La solución a la ecuación de movimiento como es sabido en este caso viene dada por la combinación de la solución
particular y p (t) asociada a la ecuación homogenea, y la solución general yc (t) asociada a la ecuación no homogenea, a
saber y(t) = y p (t) + yc (t), donde y p (t) = Acos (ωε t − φε ), con

Fext
A= p
(ω − ωε2 )2 + (2β ωε )2
2

50
La solución general viene dada por el uso del método de coeficientes indeterminados como es sabido del curso de
ecuaciones diferenciales.
iv. Movimiento forzado no amortiguado. En este caso β = 0, por lo cual la ecuación de movimiento queda expresada por

d2y Fext
2
+ ω 2y = cos(ωε t),
dt m
Para esta ecuación se pueden analizar dos casos, el primero ω 6= ωε , es decir, que la fuerza externa de excitación es
diferente a la frecuencia natural del oscilador ω; donde la solución particular viene dada por

Fext
y p (t) = cos(ωε t).
ω − ωε2
2

Y el segundo caso corresponde a ω = ωε en cuyo caso la solución particular viene dada por

Fext
y pt(t) = t(ωt)

EJERCICIOS

94. Considere el modelo masa resorte explicado en las páginas anteriores y construya una interfaz, en la cual el usuario
pueda seleccionar el tipo de sistema: Movimiento armónico simple, movimiento libre amortiguado, movimiento forzado
amortiguado y movimiento forzado no amortiguado, donde el usuario introduzca el valor de las correspondientes
constantes y tenga como resultado la correspondiente gráfica solución al sistema.
95. Considere el modelo de crecimiento poblacional Malthus o exponencial, y construya una interfaz donde se arroje como
salida la gráfica del sistema.
96. Considere el modelo de ley de enfriamiento de Newton, y construya una interfaz donde se arroje como salida la gráfica
del sistema.
97. Considere el modelo de mezclas, y construya una interfaz donde se arroje como salida la gráfica del sistema.
98. Considere el modelo de dinamica de epidemias, y construya una interfaz donde se arroje como salida la gráfica del
sistema.
99. Considere el modelo de dinámica de poblaciones ecuación logistica, y construya una interfaz donde se arroje como
salida la gráfica del sistema.
100. Considere el modelo de descomposición radioactiva, y construya una interfaz donde se arroje como salida la gráfica
del sistema.

51

Вам также может понравиться