Sunteți pe pagina 1din 23

Variables con subíndices y arreglos

7

MÓDULO SOBRE PROGRAMACIÓN MATLAB

Docente: Francisco Muñoz Paba MSc.

7
7

VARIABLES CON SUBINDICES Y ARREGLOS

OBJETIVOS

Al terminar este módulo el estudiante estará en condiciones de:

Crear manualmente un arreglo o matriz en secuencia. Entender la manipulación y notación de matrices. Determinar el tamaño, longitud y dimensión de una matriz. Identificar un elemento de un arreglo o matriz Utilizar variables con subindices que son elementos de un arreglo. Definir y distinguir arreglos de una dimensión y dos dimensiones de un archivo. Generar valores de arreglos de una dimensión con la proposición for … end. Utilizar entrada/salida de arreglos de una dimensión con las proposiciones input y fprintf con formato dirigido usando el ciclo for … end. Utilizar entrada/salida de arreglos de dos dimensiones con las proposiciones input y fprintf con formato dirigido usando el ciclo for … end anidado.

INTRODUCCIÓN

En el módulo 6 se analizan los descriptores de edición: descriptores de edición de datos, descriptores de edición de control y descriptores de edición de cadena de caracteres para la salida/entrada de valores enteros, reales y complejos. Este módulo describe los arreglos, como se definen en MATLAB y explica la manera de expresar y aplicar las proposiciones que se utilizan en los arreglos. Con frecuencia es necesario trabajar con cantidades numéricas que son elementos de un grupo asociado llamado arreglo y de acuerdo con su forma también se les puede llamar matrices o vectores. Un arreglo o matriz es una familia de elementos o cantidades, relacionados, todos asignados al mismo nombre de variable, cada elemento se identifica por un subindice diferente. Un subíndice es el orden de los elementos en un arreglo. Las variables que son elementos de un arreglo se conocen como variables con subindices. Las variables sin subindices se definen como variables sencillas.

Considérese un programa para resolver tres ecuaciones simultáneas con tres incognitas, X, Y y Z. Se implican tres coeficientes distintos de X, tres coeficientes diferentes de Y, tres coeficientes distintos de Z y tres diferentes constantes (sumas):

2.0

4.0

X Y

X

X

+

+

+

+

3.0

3.0

Z

4.0

Y

Y

= 15.0

+

2.0

+

Z

Z

=

=

49.0

41.0

Variables con subíndices y arreglos

A cada coeficiente y a cada suma podría asignársele un distinto nombre de variable

sencilla:

AX

DX

GX

+

+

+

BY + CZ = R

EY FZ S

HY PZ T

+

+

=

=

Cuando se tienen muchos nombres de variables(12 en este caso) puede requerirse de inventiva, de recordar y de contar. Es posible reducir en forma significativa el número de proposiciones en el programa y muchas de las tareas de recordar y contar pueden pasarse del programador a la computadora si los tres coeficientes de cada una de las incognitas

X, Y y Z son elementos de manera respectiva, de tres arreglos, A, B y C y las tres sumas

son miembros de un cuarto arreglo, SUM:

A

A

A

1

2

3

X B Y C Z SUM

+

1

+

1

=

1

X B Y C Z SUM

+

2

+

2

=

2

X B Y C Z SUM

+

3

+

3

=

3

Los nueve coeficientes también pueden asignarse al nombre de un solo arreglo, como C(por coeficiente), con nueve elementos:

C

C

C

1,1

2,1

3,1

X C Y C Z SUM

+

1,2

+

1,3

=

1

X C Y C Z SUM

+

2,2

+

2,3

=

2

X C Y C Z SUM

+

3,2

+

3,3

=

3

El primer subindice de cada elemento de C se refiere a la ecuación (fila), primera,segunda o tercera; el segundo subíndice especifica la incógnita(columna), la

primera(X), la segunda(Y) o la tercera(Z), SUM, con un subíndice, es un arreglo de una dimensión, C, con dos subíndices, es un arreglo de dos dimensiones.

A través del conocimiento del uso de variables con subindice el programador puede

escribir programas de relativa brevedad que aprovechan todas las ventajas de las capacidades de la computadora para procesar en forma eficiente grandes cantidades de datos numéricos.

ARREGLOS

Los arreglos en MATLAB pueden ser de una a siete dimensiones,lo que significa que una variable con subindice que es un elemento de ese arreglo tendrá de uno a siete subíndices, respectivamente. Cada elemento de un arreglo es un escalar. El análisis en éste módulo se limita a arreglos de una y dos dimensiones, con variables de uno y dos subíndices, respectivamente.

ARREGLOS DE UNA DIMENSIÓN

Un arreglo de una dimensión se escribe en notación

Donde los números pequeños 1, 2, 3, …

subíndices. A causa de que la forma de subíndice no está disponible como parte del conjunto de caracteres MATLAB, deben utilizarse otros símbolos. En MATLAB el subíndice se identifica encerrándolo en paréntesis. El caso anterior, escrito con variables con subíndices MATLAB, es:

impresos un poco debajo de la línea, son los

X X

1

2

X

3

X

n

,n,

Variables con subíndices y arreglos

X (1)

X (2)

X (3)

X (4)KKX (N)

La variable X(N) es una variable real con subíndice de una dimensión con un subíndice, N. El único subíndice en un arreglo de una dimensión específica la posición de un elemento en el arreglo. Por ejemplo, X(3) es el tercer elemento;X(4) es el cuarto y X(N) es el enésimo elemento en el arrglo X de N elementos reales.

ARREGLO DE DOS DIMENSIONES.

Un arreglo bidimensional se expresa en notación matemática como:

n

n

n

n

1,1

2,1

n

1,2

n

2,2

1,3

n

2,3

n

1,4

L

n

2,4

L

n

1, k

2, k

n

LL

n

3,1

j

,1

n

n

3,2

j

,2

n

3,3

n

3,4

LL

n

j

,3

n

j

,4

L

n

3, k

L L

L

n

jk

,

El mismo arreglo expresado en MATLAB es:

Fila

1

2

Columna

3

4

K

1

N(1,1)

N(1,2)

N(1,3)

N(1,4)

 

.

.

.

N(1,K)

2

N(2,1)

N(2,2)

N(2,3)

N(2,4)

.

.

.

N(2,K)

3

N(3,1)

N(3,2)

N(3,3)

N(3,4)

.

.

.

N(3,K)

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

J

N(J,1)

N(J,2)

N(J,3)

N(J,4)

 

.

.

.

N(J,K)

La variable N(J,K) es una variable con subíndices entera, de dos dimensiones con dos subíndices, J y K. El primer subíndice especifica la fila y el segundo subíndice la columna. Por ejemplo,el elemento N(2,3) se localiza en la segunda fila , tercera columna del arreglo entero bidimensional N(J,K).

REGLAS PARA VARIABLES CON SUBINDICES

1. Una variable con subíndice puede ser entera o real. A causa de que cada elemento del arreglo se asigna al mismo nombre de la variable(arreglo). Es obvio que no pueden haber modos mezclados entre los elementos del arreglo. Todos los componentes de un arreglo particular son enteros o reales, como lo especifica el indicador de la primera letra del nombre del arreglo. Las reglas que gobiernan los nombres de variables sencillas también se aplican a todos los nombres de variables con subíndice.

2. Los subíndices siguen al nombre de la variable y se encierran en paréntesis.

3. Los dubíndices dobles se separan por una coma.

4. Los subíndices deben ser valores enteros positivos diferentes de cero. Un subíndice puede ser una constante, una variable o una expresión entera (Tabla 7.1).

5. A las variables con subíndices se les debe dar un valor entero antes de utilizarlas en una proposición ejecutable. Obsérvese que los subíndices cuyos valores se asignan como resultado del cálculo o de una iteracón no sean cero o negativos o mayor que el tamaño del arreglo especificado.

Tabla 7.1

FORMAS PERMITIDAS DE SUBÍNDICES

Variables con subíndices y arreglos

Variables

con subíndice

Subíndice

Arreglo A(5) Arreglo A(N) Arreglo A(N+5) o (N-5)

Arreglo A(5*N)

Constante entera Variable entera Variable más una constante o una variable menos una constante. Constante por una variable.

Arreglo A(5*N+3) o (5*N-3) Constante por una variable más una constante o una constante por una variable menos una constante. Las combinaciones descritas en la Tabla 7.1 representan las formas de subíndices que

en general son aceptadas por muchos compiladores MATLAB.

El arreglo A es un arreglo real de una dimensión(un subíndice) donde el valor mayor del subíndice es N. Si N=5 el arreglo no contiene más de cinco variables reales con subíndices(elementos), estos son:

A

= [A(1)

A(2)

A(3)

A(4) A(5)]

El arreglo B es un arreglo real bidimensional (dos subíndices) donde el valor máximo del primer subíndice es 3, el valor mayor del segundo subíndice es 5 y el arreglo no incluye más de 15 (3x5) valores(elementos) ordenados en 3 filas y 5 columnas:

 

B(1,1)

B(1,2)

B(1,3)

B(1,4)

B(1,5)

B=

B(2,1)

B(2,2)

B(2,3)

B(2,4)

B(2,5)

Arreglo de 3 x 5

B(3,1)

B(3,2)

B(3,3)

B(3,4)

B(3,5)

El arreglo N es un arreglo entero de dos dimensiones(dos subíndices) donde el valor máximo del primer subíndice es 5, el valor mayor del segundo subíndice es 4 y el arreglo no contiene más de 20(5x4) variables enteras con subíndice clasificadas en 5 filas y 4 columnas:

 

N(1,1) N(1,2) N(1,3)

N(1,4)

N=

N(2,1) N(2,2)

N(2,3)

N(2,4)

Arreglo de 3x4

N(3,1) N(3,2)

N(3,3)

N(3,4)

CREANDO UN VECTOR FILA

Hay muchos formas para crear variables de vectores en fila. La forma más directa es colocar los valores requeridos entre corchetes, separados por espacios o comas. Por ejemplo, ambas proposiciones de asignación crean el mismo vector A:

>> A=[1 2 3 4] La salida es:

A=

1 2

3

4

>> A=[1,2,3,4] La salida es:

A=

1 2

3

4

Variables con subíndices y arreglos

EL CARÁCTER DOS PUNTOS Y LA FUNCIÓN LINSPACE

En el ejemplo anterior,se puede utilizar el operador dos puntos (:) para iterar a través de estos valores. Por ejemplo,

>> A=[1:4]

La salida es:

A =

1

2

3

4

Los corchetes no son necesarios para definir el vector. Con el carácter dos puntos (:), un valor de paso puede también especificarse con otros dos puntos, de la forma (inicio:valor de paso:final). Por ejemplo, para crear un vector con todos los enteros de 1 a 9 con valor de paso de 2:

>> B=1:2:9 La salida es:

B =

1 3

5

7

9

De igual forma, la función linspace genera un vector linealmente espaciado, pero en vez de especificar el incremento, especifica el número de valores deseados. La forma general de esta función es: linspace(inicial,final,número). Por ejemplo, para crear un vector con cinco valores linealmente espaciados entre 3 y 15, incluyendo el 3 y el 15:

>> v = linspace(3,15,5)

La salida es:

v =

3 6

9

12

15

El incremento se calcula por la siguiente fórmula:

incremento = (final – inicial)/(número – 1) = 3.

CREANDO EL VECTOR COLUMNA.

Con el carácter punto y coma (;) los elementos de una variable con subíndice de arreglo unidimensional, separados por punto y coma, crean vectores columnas, Por ejemplo, el vector v del ejemplo anterior, se puede convertir en vector columna:

>> v =[3;6;9;12;15] La salida es:

v =

3

6

9

12

15

MATLAB tiene otra forma más rápida para convertir los elementos filas a elementos

columnas de arreglos unidimensionales o bidimensionales, utilizando el carácter apóstrofo

( '

>> v=[3 6 9 12 15]' La salida es:

v =

) :

3

6

9

12

15

Variables con subíndices y arreglos

Un elemento particular de un vector es accedido usando el nombre de la variable del vector

y el número(subíndice) del elemento en paréntesis. Por ejemplo, v(3) corresponde al elemento 9:

>> v(3)

ans =

9

El siguiente ejemplo es una matríz B de 3x3, con sus elementos filas separados por punto y coma (;). Escriba en la línea de comando de MATLAB:

>> B=[1 2 3;;;4;

5 6;;;7;

8 9]

La salida es:

B =

1

2

3

4

5

6

7

8

9

Para convertir los elementos filas a elementos columnas, de éste arreglo bidimensional,

se coloca un apóstrofo ( ' ) al final del corchete :

>> B=[1 2 3;;;4;

5 6;;;7;

8 9]'

La salida es:

B =

1 4

7

2 5

8

3

6

9

Los siguientes diagramas muestran, de izquierda a derecha, un escalar, un vector columna, un vector fila y una matríz

4 7 6 8
4
7
6
8
5 10 12
5 10
12
7 9 12 11 14 18 5 20 15
7
9
12
11
14
18
5
20
15

TABLA 7.2

LECTURA Y ESCRITURA DE TABLAS (USO DE LOS DOS PUNTOS (:))

Arreglo

Descripción

A(:,n)

Se refiere a todos los elementos de la fila de una columna n de la matríz A. Se refiere a los elementos de todas las columnas de la fila n de la matríz A. Se refiere a los elementos de toda la fila entre columnas m y n de la matríz A. Se refiere a los elementos en todas las columnas entre las filas m y n de A.

A(n,:)

A(:,m:n)

A(m:n,:)

A(m:n,p:q) Se refiere a los elementos en las filas m hasta n y las columnas p hasta q de A.

A(:)

Lista todos los elementos de A en secuencia ordenada en columna.

Una vez generada la tabla, los elementos o componentes de la tabla son identificados por sus subíndices (ver Tabla 7.2), tal como se ilustran en los siguientes ejemplos:

Si se tiene una matríz M =[7 9 12; 11 14 18;5 20 15] y se quiere trabajar con la columna 2

de elementos 9 14 y 20 de la matríz M. Escriba en la línea de comando de MATLAB:

>> M2=M(:,2)

La salida es:

M2 =

9

14

20

>> M3=M(2:3,1:2)

La salida es:

M3 =

11

14

5

20

Variables con subíndices y arreglos

Selecciona los valores de las 2ª y 3ª filas de las columnas 1 y 2 .

EJEMPLO 7.1 GENERACIÓN DE VALORES DE ARREGLOS CON CICLOS for … end

El siguiente programa muestra la forma de definir un arreglo real unidimensional de cinco elementos y como se asignan valores numéricos a cada elemento del arreglo:

A= [0.5 1.0 1.5 2.0 2.5]

% ************* Programa 7.1 *****************

clear all

clc

X=0;

for N=1:5

X=X+0.5;

A(N)=X; if N > 5 end end disp([A])

La salida del programa es:

A =

0.5000

1.0000

1.5000

2.0000

2.5000

Para utilizar datos de un arreglo, sólo tiene que usar el subíndice del elemento de el arreglo que desea trabajar. Los valore asignados en notación matemática son:

A(1) = 0.5

A(2) = 1.0

A(3) = 1.5

A(4) = 2.0

A(5) =2.5

Si en el programa anterior, cambia la proposición disp por la proposición fprintf, dada a continuación, se obtienen los valores del arreglo A, con sus respectivos subíndices:

>> fprintf('A(1)=%2.1f A(2)=%2.1f A(3)=%2.1f A(4)=%2.1f A(5)=%2.1f \n',A)

La salida es:

A(1)=0.5 A(2)=1.0 A(3)=1.5 A(4)=2.0 A(5)=2.5

El carácter corchete [ ] puede usarse para otorgar los cinco valores, en orden, a los cinco elementos de la variable A con subíndice:

>> A=[0.5 1.0 1.5 2.0 2.5] La salida es:

A =

0.5000

1.0000

1.5000

2.0000

2.5000

Variables con subíndices y arreglos

EJEMPLO 7.2 GENERACIÓN DE VALORES DE ARREGLOS CON CICLOS for … end anidados.

Dado que los valores asignados a las 48 variables con subíndice en este arreglo aumentan por incrementos uniformes de 1 a 48, tanto los valores del arreglo como el índice entero pueden generarse anidando en el programa ciclos for … end implícitos como sigue:

% **************** Programa 7.2 *********************** clear all,clc

N=0;

for J=1:6 for L=1:8

N=N+1;

K(J,L)=N;

KCUAD(J,L)=K(J,L)^2;

disp(ʹ ESTE ES EL ARREGLO K ʹ ) disp([K]) disp(ʹ ESTE ES EL ARREGLO KCUAD ʹ ) disp([KCUAD]) end end

La salida del programa es:

ESTE ES EL ARREGLO K

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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

ESTE ES EL ARREGLO KCUAD

1

4

9

16

25

36

49

64

81

100

121

144

169

196

225

256

289

324

361

400

441

484

529

576

625

676

729

784

841

900

961

1024

1089

1156

1225

1296

369

1444

1521

1600

1681

1764

1849

1936

2025

2116

2209

2304

EJEMPLO 7.3 GENERACIÓN DE VALORES DE ARREGLOS CON CICLOS for … end anidados.

Genere el siguiente arreglo de A de 4x5, usando un ciclo for …end anidado:

 

1 2

3

4

5

A =

2 4

6

8

10

3 6

9

12

15

4 8

12

16

20

El siguiente programa genera la matríz A de 4x5:

% ****************** Programa 7.3 ******************** clear all,clc % A=[1 2 3 4 5;2 4 6 8 10;3 6 9 12 15;4 8 12 16 20];

s=0;

for J=1:5 for I=1:4 A(I,J)=I*J; end

end

A

Variables con subíndices y arreglos

La salida del programa es:

A =

1

2

3

4

5

2 4

6

8

10

3 6

9

12

15

4 8

12

16

20

EJEMPLO 7.4

GENERACIÓN DE VALORES DE ARREGLOS CON CICLOS for … end

Se desea almacenar solamente la porción inferior triangular de la matriz A en un arreglo unidimensional B:

 

1

2

3

4

1

A =

2

4

6

8

B =

2

4

3

6

9

12

3

6

9

4

8

12

16

4

8

12

16

El siguiente programa genera el arreglo B en una dimensión:

% ********** Programa 7.4 ********** clear all

clc

K=1;

for J=1:4

for I=J:4

B(K)=I*J;

K=K+1;

end

end

BBBB

La salida del programa es:

B =

3

1

2

4

4

6

8

9

12

16

EJEMPLO 7.5

Sea la matriz A = [2 1;3 4;7 0], determine la traspuesta de A mediante un programa

usando MATLAB.

MATRIZ TRASPUESTA DE A.

% *********** Programa 7.5 ********** clear all

clc

A=[2 1;3 4;7 0]; for I=1:3 for J=1:2

B(J,I)=A(I,J);

end

end

B

La salida del programa es:

B =

2

1

3

4

7

0

Variables con subíndices y arreglos

EJEMPLO 7.6 GENERACIÓN DE UNA MATRIZ TRASPUESTA DE A DE 3X3

El siguiente programa genera los valores de A= [1 2 3;2 4 6;3 6 9] y halla la traspuesta de A:

% ************* Programa 7.6 *************** clear all

clc

for J=1:3 for I=1:3 A(I,J)=I*J;

end

end

disp(ʹ Esta es la matriz A ʹ)

A

for i=1:3 for j=1:3 B(j,i)=A(i,j);

end

end disp(ʹ Esta es la matriz traspuesta de A ʹ )

B

La salida del programa es:

Esta es la matriz A

A =

1 2

3

2 4

6

3 6

9

Esta es la matriz traspuesta de A

B =

1 2

3

2 4

6

3 6

9

Para trabajar con estos elementos del arreglo en forma unidimensional, escriba en la línea de comando de MATLAB:

>> A=A(:)

A =

1

2

3

2

4

6

3

6

9

LOCALIZACION ESPACIAL PARA ARREGLOS BIDIMENSIONALES

MATLAB almacena un arreglo bidimensional como una secuencia continúa lineal de celdas. Una celda es un elemento de un arreglo de cualquier dimensión. En los ejemplos, se usan constantes enteras, pero en general cada subíndice puede formarse de una expresión escalar, es decir, cualquier expresión aritmética cuyo valor es del tipo escalar. Cada

Variables con subíndices y arreglos

subíndice debe estar dentro de los rangos correspondientes definidos en la declaración del arreglo y el número del subíndice debe ser igual al rango. Por ejemplo, el siguiente diagrama muestra la localización espacial de un arreglo b de 5x4 y el orden en que se realizan los cálculos en el arreglo:

y el orden en que se realizan los cálculos en el arreglo: EJEMPLO 7.7 SALIDA DE

EJEMPLO 7.7 SALIDA DE DATOS CON ENCABEZADOS DE COLUMNAS.

Escriba y ejecute un programa que lea cuatro números reales A,B,C,D y un número entero J de datos suministrados en forma de arreglos unidimensionales. Dependiendo del valor de J el programa debe ejecutar alguno de los siguientes cálculos:

Si

J=1

X= A + B + C + D

Si

J=2

X= (A + B + C +

D)/4

Si

J=3

X= (A + B)/(C + D)

Si

J=4

X= A/B + C/D

Si

J=5

X= A/B - C/D

Imprima todos los datos iniciales y los valores de X con encabezados adecuados. Considere un escape en el programa si J es mayor que 5. El programa debe terminar

cuando se lea el último valor. Use los siguientes datos de prueba:

J

A

B

C

D

1

1.0

2.0

3.0

4.0

2

5.6

2.0

10.4

4.0

3

-10.0

3.5

35.3

6.3

4

27.8

38.33

45.75 -41.02

5

33.68 21.46

13.21 14.36

El siguiente es el programa codificado en MATLAB:

% ************* Programa 7.7 *************** clear all clc A=[1 5.6 -10.5 27.8 33.68]ʹ; B=[2.0 2.0 3.5 38.33 21.46]ʹ; C=[3.0 10.4 25.2 45.75 13.21]ʹ; D=[4.0 4.0 6.3 -41.02 14.36]ʹ; JJ=[1 2 3 4 5]ʹ;

C

disp(ʹ

for J=1:5 if J==1 X(J)=A(J)+B(J)+C(J)+D(J);

J

A

B

end if J==2

X(J)=(A(J)+B(J)+C(J)+D(J))/4;

D

Xʹ )

end if J==3 X(J)=(A(J)+B(J))/(C(J)+D(J));

end if J==4 X(J)=A(J)/B(J)+C(J)/D(J);

end if J==5 X(J)=A(J)/B(J)- C(J)/D(J);

end

if J>5

end

end

break

disp([JJ A B C D X(:)])

La salida del programa es:

J

A

B

C

Variables con subíndices y arreglos

D

X

1.0000

1.0000

2.0000

3.0000

4.0000

10.0000

2.0000

5.6000

2.0000

10.4000

4.0000

5.5000

3.0000 -10.5000

3.5000

25.2000

6.3000

-0.2222

4.0000

27.8000

38.3300

45.7500 -41.0200

-0.3900

5.0000

33.6800

21.4600

13.2100

14.3600

0.6495

EJEMPLO 7.8

En este ejemplo se cálcula las ventas brutas de un vendedor que vende un cierto número de cada uno de cada cinco articulos. Donde P representa la lista de precios , C el número

de articulos , S el precio total de las ventas y CP la venta bruta de cada uno de los articulos:

El siguiente programa realiza los calculos:

USO DE LISTA DE VALORES

% ************* Programa 7.8 ***************

clear all,clc

P=[1.2 2.15 0.65 4.30 2.00]; C=[5 3 0 2 2];

S=0;

for I=1:5 S= S + C(I)*P(I);

end CP=C(:).*P(:); CP fprintf(ʹPrecio total=%3.3f\nʹ,S)

La salida del programa es:

CP =

6.0000

6.4500

0

8.6000

4.0000

Precio total=25.050

Variables con subíndices y arreglos

EJEMPLO 7.9 GENERACIÓN DEL PRODUCTO DE DOS MATRICES A y B

El siguiente programa genera las matrices A y B y cálcula el producto A*B:

 

1 2

3

1 2

3

4

A=

2 4

6

B=

2 4

6

8

3 6

9

3 6

9

12

La multiplicación realizada manualmente es :

C(:,1)=[1*1+2*2+3*3;1*2+2*4+3*6;1*3+2*6+3*9]

C(:,2)=[1*2+2*4+3*6;2*2+4*4+6*6;3*2+6*4+9*6]

C(:,3)=[1*3+2*6+3*9;2*3+4*6+6*9;3*3+6*6+9*9]

C(:,4)=[1*4+2*8+3*12;2*4+4*8+6*12;3*4+6*8+9*12]

Donde C(:,1),C(:,2),C(:,3) y C(:,4) son los valores de las filas de las columnas 1, 2, 3 y 4.

El siguiente programa realiza los calculos hechos anteriormente:

% *********** Programa 7.9 ***********

% Este programa calcula la operación

% por matrices de C=A*B clear all

clc

for i=1:3 for j=1:3 A(i,j)=i*j;

end

end

disp(’Matríz A generada’)

A

for I=1:3 for J=1:4 B(I,J)=real(I+J);

end

end

disp(’Matríz B generada’)

B

disp(’CALCULO DEL PRODUCTO A*B ʹ) for I=1:3 for J=1:4

sum=0;

for K=1:3 sum= sum+A(I,K)*B(K,J); C(I,J)=sum;

end

end

end

C

La salida del programa es:

Matríz A generada

A =

1

2

3

2

4

6

3

6

9

Matríz B generada

B =

2 3

4

5

3 4

5

6

4 5

6

7

CALCULO DEL PRODUCTO A*B

C =

14

28

42

56

28

56

84

112

42

84

126

168

Variables con subíndices y arreglos

La multiplicación de dos matrices es solamente posible, cuando el número de columnas de la primera matriz es igual al número de filas de la segunda matriz. El resultado de la matriz tiene el mismo número de filas como la primera matriz y el mismo número de columnas como la segunda matriz. Observe que de acuerdo a su definición, la multiplicación de matrices no es commutativa: A*B ≠ B*A.

ASIGNACIÓN DE VALORES A TABLAS

Además de las listas, MATLAB también permite tablas,que son arreglos bidimensionales. Se puede considerar que las listas son cantidades con un solo subíndice y las tablas como cantidades con doble subíndice. Las tablas son llamadas por letras solas, igual que las listas, así que una letra dada puede representar una lista o una tabla, pero no las dos en el mismo programa. Definir el contenido de una tabla; es decir, dar valores a cada uno de sus elementos o componentes, puede realizarse componente por componente, o bien de manera global. La asignación de valores, componente por componente de una tabla de un tipo dado, se basa en el principio que cada componente es una variable (independiente) del mismo tipo de la tabla, por lo tanto la asignación se hace de la misma manera que para una variable no de la tabla.

EJEMPLO 7.10

USO DE TABLAS DE VALORES

En este programa, tomamos los datos del ejemplo 7.8, añadimos la estadistica de ventas por articulos así como por vendedor. Se suministra una tabla de datos de ventas de C, donde las filas corresponden a los vendedores y las columnas a los articulos.

% ************ Programa 7.10 ************* clear all,clc P=[1.20 2.15 0.65 4.3 2.0]; C=[5 3 0 2 2;7 1 12 1 5;3 3 6 6 8]; for I=1:3

S=0;

S1=0;

for J=1:5 S=S + C(I,J)*P(J); S1= S1 + C(I,J);

end fprintf('\n') fprintf('Vendedor %2i\n',I) fprintf('Número de articulos =%3i\n',S1) fprintf('Precio total =%3.3f\n',S)

end fprintf('\n\n') for j=1:5

S=0;

for i=1:3 S= S + C(i,j); Vb=S*P(j);

end fprintf('\n') fprintf('Articulo %i

fprintf('Ventas brutas=%3.3f\n',Vb)

%i \n',j,S)

end

La salida del programa es:

Vendedor 1 Número de articulos= 12 Precio total =25.050

Vendedor 2 Número de articulos= 26 Precio total =32.650

Vendedor 3 Número de articulos= 26 Precio total =55.750

Articulo 1

Ventas brutas=18.000

15

Articulo 2

Ventas brutas=15.050

7

Articulo 3

Ventas brutas=11.700

18

Articulo 4

Ventas brutas=38.700

9

Articulo 5

Ventas brutas=30.000

15

EJEMPLO 7.11

GENERACIÓN DE UNA MATRÍZ B DE 2x6

Variables con subíndices y arreglos

Este programa genera una matríz B de NxM de números reales en secuencia lineal por filas hasta el número 12.

% ************ Programa 7.11 ************ clear all

clc

K=0;N=2;M=6;

for I=1:N for J=1:M

K=K+1;

B(I,J)=real(K);

end

end

B

La salida del programa es:

B =

1

2

3

4

5

6

7

8

9

10

11

12

EJEMPLO 7.12

% *********** programa 7.12 *************

% Este programa calcula la operación de la matriz

% C= transpose (B)*A*B

% Donde A es una matriz cuadrada

% N: Número de filas y columnas de A y filas de B

% M: Número de columnas de B.

% BB: Arreglo auxiliar.

GENERACIÓN DE LA TRASPUESTA B POR EL PRODUCTO DE A * B.

Variables con subíndices y arreglos

clear all

clc

N=3;M=3;

A=[1 2 3;4 5 6;7 8 9];B=[2 4 6;3 6 9;4 8 12]; for I=1:N for J=1:M

BB(I,J)=0;

for K=1:N BB(I,J)=BB(I,J)+A(I,K)*B(K,J);

end

end

end

% Este es el producto A*B

BB;

for i=1:M for j=1:M

C(i,j)=0;

for k=1:N C(i,j)=C(i,j)+B(k,i)*BB(k,j);

end

end

end

%

Este es el producto C=transpose (B)*A*B

C

La salida del programa es:

C =

477

954

1431

954

1908

2862

1431

2862

4293

CONVERSIÓN DE ARREGLOS MULTIDIMENSIONALES A UNIDIMENSIONALES

Y VICEVERSA CON LA FUNCIÓN reshape

Para convertir un arreglo multidimensional A a un arreglo unidimensional B, se utiliza la función intrínseca reshape. La forma genérica de la función es:

Arreglo B = reshape(Arreglo A,N,M,[ ])

Donde: Arreglo A Arreglo B

es el arreglo para la conversión. es el arreglo convertido de dimensión n x m.

N

es el número de filas del arreglo.

M

es el número de columnas del arreglo.

[

]

representa la longitud de la dimensión.

Por ejemplo, para convertir la siguiente matriz A = [1 2 3 4;2 4 6 8;3 6 9 12] de 3x4 a una matriz B de 2x6, escriba en la línea de comando de MATLAB:

>> A = [1 2 3 4;2 4 6 8;3 6 9 12]

A =

 

1 2

3

4

2 4

6

8

3 6

9

12

>> B=reshape(A,2,6)

 

B

=

 

1 3

4

3

9

8

2 2

6

6

4

12

Variables con subíndices y arreglos

Para convertir la matriz B de 2x6 a un vector fila C, escriba en la línea de comando de MATLAB:

>> C = reshape(B,1,[ ])

C =

1 2

3

2

4

6

3

6

9

4

8

12

Para realizar el proceso contrario, escriba en la línea de comando de MATLAB:

>> matriz=reshape([1 2 3 2 4 6 3 6 9 4 8 12],[2,6]) matriz =

1 3

4

3

9

8

2 2

6

6

4

12

Genera una matriz de 2x6

>> matriz=reshape([1 2 3 2 4 6 3 6 9 4 8 12],[3,4]) matriz =

1 2

3

4

2 4

6

8

3 6

9

12

Genera una matriz de 3x4.

Una fila o una columna de una matriz A, se puede borrar asignandole un vector nulo [ ]. Por ejemplo, sea A= [1 2 3 4;2 4 6 8;3 6 9 12] para borrar la segunda columna de A, escriba en la línea de comando de MATLAB:

>> A(:,2)=[] La salida es:

A =

1 3

4

2 6

8

3 9

12

EJEMPLO 7.13

COPIA DE UNA MATRIZ EN OTRA

Este programa copia una matriz A y la almacena en una matriz B. Sea A=[2 1;3 4;7 0]

% *********** Programa 7.13 *************** clear all

clc

A=[2 1;3 4;7 0]; for I=1:3 for J=1:2 B(I,J)=A(I,J);

end

end

B

La salida del programa es:

B =

2

3

7

1

4

0

EJEMPLO 7.14

MULTIPLICACIÓN DE UNA MATRIZ POR UN VECTOR.

Un caso especial de multiplicación de matrices, se presenta cuando la segunda matriz es una matriz columna o vector. Considere una matriz A de dimensión NxM y un vector B de dimensión M. La multiplicación de la matriz C =A*B, dá cómo resultado un vector C de dimensión N, cuyos coeficientes son calculados por:

C

i

=

M

j = 1

a b

ij j

para i

= 1,2,

N

Variables con subíndices y arreglos

El siguiente programa multiplica la matriz A=[1 2 3;2 4 6;3 6 9] de dimensión 3x3 por el vector B=[4 8 12] de dimensión 1x3:

% *********** Programa 7.14 *************** clear all

clc

A=[1 2 3;2 4 6;3 6 9]; B=[4 8 12]; for I=1:3

C(I)=0;

for J=1:3 C(I)=C(I)+A(I,J)*B(J);

end

end

C

La salida del programa es:

C =

56

112

168

EJEMPLO 7.15 RECORRE LA MATRIZ EN ORDEN SECUENCIAL LINEAL POR FILA.

Se desea almacenar solamente la porción a=[1 2;3 4]de la matriz A=[1 2 3;4 5 6;7 8 9], siguiendo un orden secuencial por fila.

A =

7

2

4 5

8

1

3

6

9

a =

2

3 4

1

El siguiente programa codificado en MATLAB, realiza esa operación :

% *********** Programa 7.15 *************** clear all,clc

N=3;

M=3;

COUNT=1;

for I=1:N for J=1:M A(I,J) = real(COUNT); COUNT = COUNT + 1; end end

A;

count=1;

for I=1:2 for J=1:2 a(I,J)=real(count); count=count + 1;

end

end

B

La salida del programa es:

a =

1

3

2

4

EJEMPLO 7.16

Variables con subíndices y arreglos

INVERSIÓN DE UNA MATRIZ TRIANGULAR SUPERIOR.

En algunos casos se necesita invertir una matriz triangular superior S, como se muestra a continuación. El siguiente modelo calcula la inversa de la matriz triangular superior S. Sea la ecuación matricial:

S

0

0

0

11

S

S

12

2 2

S

13

S

23

S

14

S

2 4

S

0

Matriz S

0

0

S

34

S

4 4

33

x

A       0

0

0

11

A

12

A

2 2

0

0

A

13

A

23

A

0

33

A

14

A

2 4

A

A

34

4 4

Matriz A

=

Matriz unidad

1

0

0

0

0

1

0

0

0

0

1

0

0

0

0

1

Donde la matriz A es la inversa de S. Puede fácilmente verificarse que A es también una matriz triangular superior. Multiplicando la i-ésima fila de S por la i-ésima columna de A se obtiene:

despejando

S

ii

a

ii

A = 1

1

ii

=

S

ii

calculamos los elementos de la diagonal principal de la matriz de A.

Multiplicando la i-ésima fila de S por la j-ésima columna de A, con j=i+1, tenemos:

S A

ii ij

+

S A

ij

jj

= 0

Para calcular los elementos de la diagonal de A, siguiendo la diagonal principal, se utiliza la siguiente fórmula:

A

ij

=−

1

S ij

S A

ij

jj

Si seguimos éste camino encontramos que para calcular los elementos de la diagonal de A de las posiciones de K desplazada desde la diagonal principal, utilizamos la fórmula:

A

ij

=−

i + K

l = i +1

S A

il lj

j

= +

i

K

El siguiente ejemplo ilustra la aplicación de éste módelo:

Se desea hallar la matriz inversa A de la siguiente matriz triangular superior S:

1

S =



0

0

0

2

4

0

0

3

6

9

0

4

8

12

16

El siguiente programa codificado en MATLAB, realiza esa operación :

% *********** Programa 7.16 *************** clear all clc S=[1 2 3 4;0 4 6 8;0 0 9 12;0 0 0 16]; for I=1:4

A(I,I)=1/S(I,I);

end

A;

N1=3;

for K=1:N1

NK=4-K;

for I=1:NK J=I+K;

D=0;

I1=I+1;

IK=I+K; for L=I1:IK D=D+S(I,L)*A(L,J); A(I,J)= -D/S(I,I);

end

end

end

A

La salida del programa es:

A =

1.0000

-0.5000

0

0

0

0.2500

-0.1667

0

0

0

0.1111

-0.0833

0

0

0

0.0625

Variables con subíndices y arreglos

GENERACIÓN DE ARREGLOS DE CELDAS

Los arreglos de celdas, son arreglos cuyos elementos son celdas. Cada celda es un arreglo de celda y puede soportar cualquier tipo de datos de MATLAB, incluyendo arreglos numéricos,cadena de caracteres, objetos simbólicos, otros arreglos de celdas y estructuras. Por ejemplo, una celda de un arreglo de celda, puede contener un arreglo numérico, una cadena de caracteres y un vector de valores complejos. Los arreglos de celdas, pueden generarse con cualquier dimensión exacta que requiera un arreglo numérico. Sin embargo, en muchos casos los arreglos de celdas son generados como un simple vector de celda. Los arreglos de celdas pueden crearse, asignando datos a las celdas individuales. Existen dos formas diferentes para acceder a las celdas:

Si se utiliza una sintáxis de arreglos estandar para direccionar los arrglos, se deben encerrar los contenidos de celdas entre llaves {} . Estas llaves {} construyen un arreglo de celda. Estas actúan como la proposición cell incorporada de MATLAB. Por ejemplo, las siguientes asignaciones generan arreglos de celdas de diferentes tipos: numéricos, complejos, cadena de caracteres y vectores.

>> A{1,1}=[1 2 3;4 5 6;7 8 9] >>A{1,2}= 2 + 3i >>A{2,1}=’Una cadena de caracteres’ >> A{2,2}=12:-2:0

>> A En éste caso, el carácter {} aparece del lado izquierdo del signo igual. El término A{1,1}, indica que A es un arreglo de celda y el contenido de la primera fila y primera columna del arreglo de celda, están del lados derecho del signo igual. Esto se denomina direccionando el contenido. El carácter {}, se usa para acceder o especificar el contenido de las celdas.

Si se utiliza la sintáxis de arreglos estandar para indexar los arreglos de celdas, debe encerrar los contenidos de celdas entre paréntesis ( ). Este carácter ( ), construye un arreglo de celda y actúa como la función cell de MATLAB. Por ejemplo, las siguientes asignaciones generan arreglos de celdas de diferentes tipos: numéricos, complejos, cadena de caracteres y vectores.

>> A(1,1)=[1 2 3;4 5 6;7 8 9] >>A(1,2)= 2 + 3i >>A(2,1)=’Una cadena de caracteres’

>> A(2,2)=12:-2:0

>> A

Variables con subíndices y arreglos

En éste otro caso, el carácter ( ), aparece del lado izquierdo del signo igual. El término A(1,1), indica que A es un arrglo de celda y el contenido de la primera fila y primera columna del arreglo, se encuentran del lado derecho del signo igual. Esto se denomina indexando la celda. Los paréntesis ( ), se usan para identificar las celdas, pero sin mirar su contenido.

PARTICIÓN DE MATRICES

Algunas veces las matrices, se expresan en términos de sus coeficientes escalares, pero a veces, es conveniente escribir la matriz en forma particionada, es decir, subdividida en submatrices. Por ejmplo, la matriz:

A =

4

6

4

1

2

8

3

7

3

5

1

9

0

1

3

Puede ser particionada en 4 submatrices, como sigue:

Donde:

4

6

1

2

3

7

A

A = −−− −−−− =  −−−−

A

A

|

|

|

11

2 1

1 2

A

2 2

4

8

3

A

11

=

4

6

1

2

3

7

A =

12

|

|

|

|

5

1

0

−−− 

5

1

1

3

9

0

1

A

21

=

[4

8

3]

A

2 2

=

[9 3]

Para un elemento de la matriz, las submatrices de una matriz particionada son identificadas por subíndices de filas y de columnas. La matriz A puede ser particionada como se desee. Debe ser obvio, sin embargo, que la partición no altere la matriz, porque sólo se escribe en forma diferente, pero sin cambiar su naturaleza. Las operaciones de matrices pueden realizarse entre matrices expresadas en forma particionada, de la misma forma en que se escriben en términos de sus coeficientes escalares. Por ejemplo, considere la matriz A anterior y la siguiente matriz B:

Donde:

B

1

1

0

2

3

2

1

3

B

B

1

B = −−− = −−

1

4

1

2

1 2

2

3

= 0

1

B =

2

1

3

4

1

Variables con subíndices y arreglos

El producto de matrices A*B en forma particionada es :

A

*

A

A

A

12

11

B = −−−−−

21

A

2 2

B

B

AB A B

11

1

+

1

12

2

−− = −−−−−−−

2

A B

21

1

+

A B

2 2

2

0.632

0.693

= −−−

Utilizando las mismas reglas de las matrices, se obtienen los mismos resultados de la multiplicación de matrices particionadas, escribiendolas en términos de sus coeficientes escalares. Sin embargo, se recomienda, al realizar una operación con matrices particionadas, sus particiones deben ser relativamente compatible con la operación que se esté realizando. Por lo tanto, en los casos anteriores, el número de columnas de A11 deben ser igual al número de filas de B1, la misma aplicación para A12 y B2, A21 y B1, A22 y B2 o de lo contrario la matriz no estaría definida.

EJEMPLO 7.17

PRODUCTO DE DOS MATRICES PARTICIONADAS.

Considere las siguientes dos matrices A y B particionadas:

1

1

3| 0

0

0

0

1

3

2 |

A

|

0

11

A =  −−−− −−− = −−−−−

0

0

|

0 |

0 |

2

1

0

|

A

2 2

2 3|

1

1|

0

0

0

0

B

11

|

0

B =  −−−−−−−−− = −−−−−

0

0

0 |

0 |

1

1

3

2

0

|

B

2 2

El producto de A y B es:

A * B

AB | 0

  

11

11

= −−−−−−−

0

| A B

2 2

2 2

1

|

0

1

= −−−−

0

|

= Matriz unidad

Variables con subíndices y arreglos

El siguiente programa códificado en MATLAB, realiza los cálculos hechos anteriormente:

% ************ programa 7.17 ************

clear all clc A{1,1}=[1 3;-1 -2];% Los subindices se escriben entre {}

X=A{1,1};

A{2,2}=[2 3;1 1]; % Los subindices se escriben entre {}

Y=A{2,2};

B{1,1}=[-2 -3;1 1];% Los subíndices se escriben entre {}

U=B{1,1};

B{2,2}=[-1 3;1 -2];% Los subindices se escriben entre {}

T=B{2,2};

MultAB=(X*U)/(Y*T);

disp(MultAB)

La salida del programa es:

MultAB =

1

0

0

1