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

UNIVERSIDAD VERACRUZANA Experiencia Programación

FACULTAD DE INGENIERÍA MECÁNICA Educativa


ELÉCTRICA Tema El entorno de Matlab
REGIÓN XALAPA Practica 1
B2-S1 Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO
Que el alumno se familiarice con las características generales de MATLAB.

SUSTENTO TEÓRICO
MATLAB es la abreviatura de “Matriz LABoratory”. Es un programa para realizar cálculos
numéricos con vectores y matrices. Como caso particular puede también trabajar con números
escalares -tanto reales como complejos-, con cadenas de caracteres y con otras estructuras de
información más complejas. Una de las capacidades más atractivas es la de realizar una amplia
variedad de gráficos en dos y tres dimensiones. MATLAB tiene también un lenguaje de
programación propio. Este manual hace referencia a la versión 6.5 de este programa, aparecida
a mediados de 2003.

MATLAB dispone de un código básico y de varias librerías especializadas (toolboxes). En


éstos apuntes se hará referencia exclusiva al código básico. Se puede arrancar como cualquier
otra aplicación de Windows, haciendo click dos veces en el icono correspondiente en el
escritorio:

Al arrancar MATLAB se abre una ventana del tipo de la indicada en la Figura 1. Ésta es la vista
que se obtiene eligiendo la opción Desktop Layout/Default, en el menú View. Como esta
configuración puede ser cambiada fácilmente por el usuario, es posible que en muchos casos
concretos lo que aparezca sea muy diferente. En cualquier caso, una vista similar se puede
conseguir con el citado comando View/Desktop Layout/Default. Esta ventana inicial requiere
unas primeras explicaciones.

DRA. ROSARIO ALDANA FRANCO


ESPACIO DE
TRABAJO
VENTANA DE
COMANDOS

HISTORIA DE
COMANDOS

Figura 1. Opción Desktop Layout/Default de Matlab

La parte más importante de la ventana inicial es la Command Window, que aparece en la parte
derecha. En esta sub-ventana es donde se ejecutan los comandos de MATLAB, a continuación
del prompt (aviso) característico (>>), que indica que el programa está preparado para recibir
instrucciones.

En la parte superior izquierda de la pantalla aparecen dos ventanas también muy útiles: en la
parte superior aparece la ventana Launch Pad, que se puede alternar con Workspace clicando
en la pestaña correspondiente. Launch Pad da acceso a todos los módulos o componentes de
MATLAB que se tengan instalados, como por ejemplo al Help o a las Demos. El Workspace
contiene información sobre todas las variables que se hayan definido en esta sesión.

En la parte inferior derecha aparecen otras dos ventanas, Command History y Current
Directory, que se pueden mostrar alternativamente por medio de las pestañas
correspondientes. La ventana Command History muestra los últimos comandos ejecutados en
la Command Window.

Estos comandos se pueden volver a ejecutar haciendo doble clic sobre ellos. Clicando sobre un
comando con el botón derecho del ratón se muestra un menú contextual con las posibilidades
disponibles en ese momento. Para editar uno de estos comandos hay que copiarlo antes a la
Command Window. Por otra parte, la ventana Current Directory muestra los ficheros del
directorio activo o actual. A diferencia de versiones anteriores de MATLAB en que el directorio
activo se debía cambiar desde la Command Window, a partir de la versión 6.0 se puede
cambiar desde la propia ventana (o desde la barra de herramientas, debajo de la barra de
menús) con los métodos de navegación de directorios propios de Windows. Haciendo click dos

DRA. ROSARIO ALDANA FRANCO


veces sobre uno de los ficheros *.m del directorio activo se abre el editor de ficheros de
MATLAB, herramienta fundamental para la programación sobre la que se volverá en las
próximas páginas.

MÉTODOS Y PROCEDIMIENTOS

La variable por defecto es ans, ahí se guardan los resultados de la última operación realizada
en la ventana de comandos, a menos que le indiquemos donde guardarla, por ejemplo:

>> 3+4
ans =
7
Pero en cambio, si hacemos:
>> a=3+4
a =
7
El resultado se guardó en a y no en ans. Para verificar que el resultado está guardado en
una variable sólo tecleamos el nombre de la variable en la ventana de comandos:
>> a
a=
7
Pero Matlab puede distinguir entre mayúsculas y minúsculas, ahora escriba en la ventana de
comandos A, ¿Qué le respondió?

_____________________________________________________________________

Por favor, en la pantalla mostrada en la Figura 1 ejecute el comando A=magic(4), y muestre a


continuación el resultado proporcionado por MATLAB.

Para apreciar la potencia de MATLAB, se puede comenzar por escribir en la Command


Window la siguiente línea, a continuación del prompt. Al final hay que pulsar intro.

>> A=rand(6), B=inv(A), B*A


A =
0.9501 0.4565 0.9218 0.4103 0.1389 0.0153
0.2311 0.0185 0.7382 0.8936 0.2028 0.7468
0.6068 0.8214 0.1763 0.0579 0.1987 0.4451
0.4860 0.4447 0.4057 0.3529 0.6038 0.9318
0.8913 0.6154 0.9355 0.8132 0.2722 0.4660
0.7621 0.7919 0.9169 0.0099 0.1988 0.4186

DRA. ROSARIO ALDANA FRANCO


B =
5.7430 2.7510 3.6505 0.1513 -6.2170 -2.4143
-4.4170 -2.5266 -1.4681 -0.5742 5.3399 1.5631
-1.3917 -0.6076 -2.1058 -0.0857 1.5345 1.8561
-1.6896 -0.7576 -0.6076 -0.3681 3.1251 -0.6001
-3.6417 -4.6087 -4.7057 2.5299 6.1284 0.9044
2.7183 3.3088 2.9929 -0.1943 -5.1286 -0.6537

ans =
1.0000 0.0000 0 0.0000 0.0000 -0.0000
0.0000 1.0000 0.0000 0.0000 -0.0000 0.0000
0 0 1.0000 -0.0000 -0.0000 0.0000
0.0000 0 -0.0000 1.0000 -0.0000 0.0000
-0.0000 0.0000 -0.0000 -0.0000 1.0000 0.0000
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 1.0000

En realidad, en la línea de comandos anterior se han escrito tres instrucciones diferentes,


separadas por comas. Como consecuencia, la respuesta del programa tiene tres partes
también, cada una de ellas correspondiente a una de las instrucciones. Con la primera
instrucción se define una matriz cuadrada (6x6) llamada A, cuyos elementos son números
aleatorios entre cero y uno (aunque aparezcan sólo 4 cifras, han sido calculados con 16 cifras
de precisión). En la segunda instrucción se define una matriz B que es igual a la inversa de A.
Finalmente se ha multiplicado B por A, y se comprueba que el resultado es la matriz unidad.

Otro de los puntos fuertes de MATLAB son los gráficos, que se verán con más detalle en una
sección posterior. A título de ejemplo, se puede teclear la siguiente línea y pulsar intro:

>> x=-4:.01:4; y=sin(x); plot(x,y), grid, title('Función seno(x)')

En la Figura 2 se puede observar que se abre una nueva ventana en la que aparece
representada la función sin(x). Esta figura tiene un título "Función seno(x)" y una cuadrícula o
"grid". En realidad la línea anterior contiene también varias instrucciones separadas por comas
o puntos y comas. En la primera se crea un vector x con 801 valores reales entre -4 y 4,
separados por una centésima. A continuación se crea un vector y, cada uno de cuyos
elementos es el seno del correspondiente elemento del vector x. Después se dibujan los
valores de y en ordenadas frente a los de x en abscisas. Las dos últimas instrucciones
establecen la cuadrícula y el título.

DRA. ROSARIO ALDANA FRANCO


Figura 2. Gráfica de la función seno.

ACTIVIDAD INDEPENDIENTE
Teclee los siguientes comandos y diga ¿qué obtiene?:

a) help

b) who

c) whos

d) help sin

Para borrar todas las salidas anteriores de MATLAB y dejar limpia la Command Window se
pueden utilizar las funciones clc y home. La función clc (clear console) elimina todas las
salidas anteriores, mientras que home las mantiene, pero lleva el prompt (>> ) a la primera
línea de la ventana, clear all borra de la memoria todas las variables. Teclee las instrucciones y
constate los resultados.

Si se desea salir de MATLAB basta teclear los comandos quit o exit, elegir Exit MATLAB en el
menú File o utilizar cualquiera de los medios de terminar una aplicación en Windows.

BIBLIOGRAFÍA

• The MathWorks. The Student Edition of Matlab, Versión 4. Users


Guide.Prentice Hall, 1995.

• Long, Larry y Long, Nancy. Introducción a las computadoras y a los sistemas


de información. Prentice hall. México, 1999.

DRA. ROSARIO ALDANA FRANCO


• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice
Hall. España, 2002.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería


Mecánica Eléctrica. Universidad Veracruzana. Septiembre de 2007.

DRA. ROSARIO ALDANA FRANCO


Experiencia Programación
UNIVERSIDAD VERACRUZANA
Educativa
FACULTAD DE INGENIERÍA MECÁNICA
Tema Operadores aritméticos en
ELÉCTRICA
Matlab
REGIÓN XALAPA
Practica 2
B2-S1
Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO

Que el alumno se realice operaciones aritméticas usando Matlab.

SUSTENTO TEÓRICO
MATLAB es un programa para cálculo matricial. Antes de tratar de hacer cálculos
complicados, la primera tarea será aprender a introducir matrices y vectores desde
el teclado. Más adelante se verán otras formas más potentes de definir matrices y
vectores.

1. Definir matrices desde teclado

En MATLAB las matrices y vectores son variables que tienen nombres. Se


utilizarán letras mayúsculas para nombrar a las matrices y minúsculas para los
vectores. MATLAB determina el número de filas y de columnas en función del
número de elementos que se proporcionan (o se utilizan).

Las matrices se definen por filas; los elementos de una misma fila están
separados por blancos o comas, mientras que las filas están separadas por intro o
por caracteres punto y coma (;). Por ejemplo, el siguiente comando define una
matriz A de dimensión (3x3):

A=[1 2 3; 4 5 6; 7 8 9]

La respuesta es la siguiente:
A =
1 23
4 56
7 89

Para calcular A' (traspuesta de A) basta teclear:


>> A'

DRA. ROSARIO ALDANA FRANCO


ans =
147
258
369

También podría haberse asignado el resultado a otra matriz llamada B:


>> B=A'
B=
147
258
369

Ahora ya están definidas las matrices A y B, y es posible seguir operando con ellas.
Por ejemplo, se puede hacer el producto B*A (deberá resultar una matriz
simétrica):
>> B*A
ans =
66 78 90
78 93 108
90 108 126

En MATLAB se accede a los elementos de un vector poniendo el índice entre


paréntesis (por ejemplo x(3) ó x(i)). Los elementos de las matrices se acceden
poniendo los dos índices entre paréntesis, separados por una coma (por ejemplo
A(1,2) ó A(i,j)). Las matrices se almacenan por columnas (aunque se
introduzcan por filas, como se ha dicho antes), y teniendo en cuenta esto puede
accederse a cualquier elemento de una matriz con un sólo subíndice. Por ejemplo, si
A es una matriz (3x3) se obtiene el mismo valor escribiendo A(1,2) que escribiendo
A(4).

Invertir una matriz es casi tan fácil como trasponerla. A continuación se va a definir
una nueva matriz A -no singular- en la forma:
>> A=[1 4 -3;2 1 5;-2 5 3]
A=
1 4 -3
215
-2 5 3

Ahora se va a calcular la inversa de A y el resultado se asignará a B. Para ello basta


hacer uso de la función inv( ) (la precisión o número de cifras con que se muestra
el resultado se puede cambiar con el menú File/Preferences/General):

DRA. ROSARIO ALDANA FRANCO


>> B=inv(A)
B=
0.1803 0.2213 -0.1885
0.1311 0.0246 0.0902
-0.0984 0.1066 0.0574

Para comprobar que este resultado es correcto basta pre-multiplicar B por A;


>> B*A
ans =
1.0000 0.0000 -0.0000
0 1.0000 0.0000
0 -0.0000 1.0000

De forma análoga a las matrices, es posible definir un vector fila x en la forma


siguiente:
>> x=[10 20 30] % vector fila
x=
10 20 30

Por el contrario, si los números están separados por intros o puntos y coma (;) se
obtendrá un vector columna:
>> y=[11; 12; 13] % vector columna
y=
11
12
13
MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Por
ejemplo, si se intenta sumar los vectores x e y se obtendrá un mensaje de error.
Estas dificultades desaparecen si se suma x con el vector traspuesto de y:
>> x+y'
ans
21 32 43

2 Operaciones con matrices

MATLAB puede operar con matrices por medio de operadores y por medio de
funciones. Los operadores matriciales de MATLAB son los siguientes:
+ adición o suma ./ y .\ división elemento a elemento
– sustracción o resta .^ elevar a una potencia elemento a
* multiplicación elemento.
' traspuesta
^ potenciación
\ división-izquierda
/ división-derecha
.* producto elemento a elemento

DRA. ROSARIO ALDANA FRANCO


Estos operadores se aplican también a las variables o valores escalares, aunque con
algunas diferencias. Si los operadores no se usan de modo correcto se obtiene un
mensaje de error.

MÉTODOS Y PROCEDIMIENTOS

A continuación se usará cada uno de los operadores definidos antes; defina las
matrices A y B: A=[1 2;3 4] y B=[5 6; 7 8] y anote el resultado de las operaciones

1.- Adición o suma (+):

a) Escalar y matriz A+3

b) Dos matrices del mismo tamaño: C=A+B

2.- Sustracción o resta (-):

a) Escalar y matriz A-2

b) Dos matrices de igual tamaño C=B-A

3.- Multiplicación (*):

a) Escalar y matriz 4*A

b) Dos matrices cuadradas de igual tamaño D=A*B y E=B*A

c) ¿Por qué D y E no son iguales?

4.- Traspuesta (‘)

a) De una matriz E’

5.- Potenciación (^). La F=A ^ 2

6.- División-izquierda (\)

a) Escalar y Matriz 4\B

b) Matriz fila y escalar G=[1 3] teclear: D\5

c) Dos matrices cuadradas de igual tamaño A\B

7. - División-derecha (/) A/B y B/A

8.- Producto elemento a elemento (.*): H=A.*B

9. - División elemento a elemento

DRA. ROSARIO ALDANA FRANCO


a) División inversa: A.\B

b) División directa: A./B

10.- Elevar a una potencia elemento a elemento D.^4

EJERCICIOS

Realice las siguientes operaciones y reporte el resultado para acreditar su práctica.

1. ¿Cuál es el contenido y tamaño de las siguientes matrices?, compruebe su


respuesta usando el comando whos y compruébelo usando el comando size:

a. x=[1;5;7;9]

b. y=[4 2 4;6 -3 1]

c. z=[1 2 3 0;5 6 4 2;1 2 8 5]

d. a=[5 2 9]

2. ¿Cuáles son las operaciones aritméticas que se pueden realizar con las variables
definidas en el ejercicio 1.

3. Muestre los resultados de sus operaciones del ejercicio 2.

11. Sean las matrices x=[1 3 5 7] e y=[2 4 6 8], ¿cuál es el contenido del vector z
después de cada operación?

a. z=x+y f. z=2*x/3.*y

b. z=2*x-y g. z=x./y+y.*x

c. z=y-x+5 h. z=x\y

d. z=y.*x i. z=2*x\3.*y

e. z=3.^y+x j.z=x.\y+y.*x

BIBLIOGRAFÍA

• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice


Hall. España, 2002.

DRA. ROSARIO ALDANA FRANCO


• The MathWorks. The Student Edition of Matlab, Versión 4. Users Guide.Prentice
Hall, 1995.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería Mecánica


Eléctrica. Universidad Veracruzana. Septiembre de 2007.

DRA. ROSARIO ALDANA FRANCO


Experiencia Programación
UNIVERSIDAD VERACRUZANA
Educativa
FACULTAD DE INGENIERÍA MECÁNICA
Tema Definición de matrices en
ELÉCTRICA
Matlab
REGIÓN XALAPA
Practica 3
B2-S2
Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO

Que el alumno defina matrices usando funciones, operadores y otras matrices usando
Matlab.

SUSTENTO TEÓRICO
Ya se ha visto que en MATLAB se definen las variables, dando entrada a cada uno de
sus valores, pero dispone de varias formas de definir matrices:

• El introducirlas por teclado sólo es práctico en casos de pequeño tamaño y


cuando no hay que repetir esa operación muchas veces.

• Las matrices toman tamaño al ser definidas y este tamaño puede ser
modificado por el usuario mediante adición y/o borrado de filas y columnas.

A continuación se describen otras formas más potentes y generales de definir y/o


modificar matrices, como el uso de funciones predefinidas, operadores específicos y
operaciones con matrices que permiten la construcción de cualquier matriz.

Una de las ventajas de MATLAB es que no requiere que el usuario defina el tipo de las
variables que declara, el lenguaje los asigna y pocas veces hay conflictos entre los
tipos, haciendo la programación más sencilla, proporcionando continuidad entre
valores enteros, reales y complejos

Las matrices son un tipo de dato estándar, que en MATLAB es fundamental pues es la
forma en que el lenguaje representa internamente todos los datos.

En notación matemática, las matrices son conjuntos de datos agrupados con


corchetes; en MATLAB matriz y arreglo son sinónimos. En matemáticas, una matriz es
un arreglo rectangular de números agrupados con corchetes.

DRA. ROSARIO ALDANA FRANCO 13


Una matriz tiene tamaño m por n, donde m es el número de filas y n es el número de
columnas. Así, una matriz cuadrada es la que tiene el mismo número de filas y de
columnas, una matriz nula es que tiene como elementos “0” y una matriz identidad
tiene como elementos “1” en la diagonal principal y ceros en las demás posiciones.

Con las matrices es posible realizar operaciones aritméticas como suma, resta,
multiplicación, división, potenciación y radicalización; así como operaciones matriciales
como trasponer, permutar y producto cruz.

Un vector es una matriz que tiene una sola fila o una sola columna.

MÉTODOS Y PROCEDIMIENTOS

El método que se usará es el ejemplo guiado, mientras usted realiza su ejercicio en su


PC, su docente le muestra en la pantalla del aula el resultado correcto para que pueda
verificar sus resultados. Anote los resultados obtenidos

1 Tipos de matrices predefinidos

Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de
tipos particulares. Algunas de estas funciones son las siguientes:

• eye(4) forma la matriz identidad de tamaño (4x4):

• zeros(3,5) forma una matriz de ceros de tamaño (3x5)

• zeros(4) ídem de tamaño (4x4)

• ones(3) forma una matriz de unos de tamaño (3x3)

• ones(2,4) idem de tamaño (2x4)

• linspace(x1,x2) genera un vector con 100 valores igualmente espaciados entre x1 y


x2

>> linspace(0,10)

• linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y


x2

>> linspace(0,10,5)

• logspace(d1,d2,n) genera un vector con 50 valores espaciados logarítmicamente


entre 10^d1 y 10^d2

DRA. ROSARIO ALDANA FRANCO 14


>> logspace(0,10)

• logspace(d1,d2,n) genera un vector con n valores espaciados logarítmicamente entre


10^d1 y 10^d2. Si d2 es pi (es una variable predefinida en MatLab), los puntos se
generan entre 10^d1 y pi

>> logspace(0,10,5)

• Operador dos puntos: x1:x:x2, genera un vector cuyo primer valor es x1, el último
valor es x2, espaciados de manera regular por x.

>> 1:0.1:2

• Operador dos puntos: x1:x2, genera un vector cuyo primer valor es x1, el último
valor es x2, espaciados de manera regular por 1.

>> 1:10

• rand(3) forma una matriz de números aleatorios entre 0 y 1, con distribución


uniforme, de tamaño (3x3)

>> rand(3)

• rand(2,5) idem de tamaño (2x5) randn(4) forma una matriz de números aleatorios
de tamaño (4x4), con distribución normal, de valor medio 0 y varianza 1.

>> rand(2,5)

• magic(4) crea una matriz (4x4) con los números 1, 2, ... 4*4, con la propiedad de
que todas las filas y columnas suman lo mismo

>> magic(4)

• kron(x,y) produce una matriz con todos los productos de los elementos delvector x
por los elementos del vector y. Equivalente a x'*y, donde x e y son vectores fila
>> x=[1 2 3]
>> y=[4 5 6]
>> kron(x,y)
• compan(pol) construye una matriz cuyo polinomio característico tiene como
coeficientes los elementos del vector pol (ordenados de mayor grado a menor)

>> pol=[1 0 -1]

>> compan(pol)

DRA. ROSARIO ALDANA FRANCO 15


Existen otras funciones para crear matrices de tipos particulares. Con Help/Help
Window se puede obtener información sobre todas las funciones disponibles en
MATLAB. En matlab\elmat aparecen la mayor parte de las funciones estudiadas
eneste apartado.

>> help elmat

2 Formación de una matriz a partir de otras

MATLAB ofrece también la posibilidad de crear una matriz a partir de matrices previas
ya definidas, por varios posibles caminos:

1. recibiendo alguna de sus propiedades (como por ejemplo el tamaño),

2. por composición de varias submatrices más pequeñas,

3. modificándola de alguna forma.

A continuación se describen algunas de las funciones que crean una nueva matriz a
partir de otra o de otras, comenzando por dos funciones auxiliares:

• [m,n]=size(A) devuelve el número de filas y de columnas de la matriz A. Si la matriz


es cuadrada basta recoger el primer valor de retorno:
>> A=rand(2,3)
>> [m,n]=size(A)
• n=length(x) calcula el número de elementos de un vector x:

>> x

>> length(x)

• zeros(size(A)) forma una matriz de ceros del mismo tamaño que una matriz A
previamente creada

>> C=zeros(size(A))

• ones(size(A)) ídem con unos

>> D=ones(size(A))

• A=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los
elementos de un vector ya existente x

>> A=diag(x)

DRA. ROSARIO ALDANA FRANCO 16


• z=diag(A) forma un vector z a partir de los elementos de la diagonal de una matriz
ya existente A

>> A=rand(3)

>> z=diag(A)

• diag(diag(A)) crea una matriz diagonal a partir de la diagonal de la matriz A

>> E=diag(diag(A))

• blkdiag(A,B) crea una matriz diagonal de submatrices a partir de las matrices que se
le pasan como argumentos

>> B=rand(3)

>> F=blkdiag(A,B)

• triu(A) forma una matriz triangular superior a partir de una matriz A (no tiene que
ser cuadrada). Con un segundo argumento puede controlarse que se mantengan o
eliminen más diagonales por encima o debajo de la diagonal principal.

>> triu(A)

• tril(A) ídem con una matriz triangular inferior

>> tril(A)

• rot90(A,k) Gira k*90 grados la matriz rectangular A en sentido antihorario. k es un


entero que puede ser negativo. Si se omite, se supone k=1

>> rot90(A,30)

• flipud(A) halla la matriz simétrica de A respecto de un eje horizontal

>> flipud(A)

• fliplr(A) halla la matriz simétrica de A respecto de un eje vertical

>> fliplr(A)

• reshape(A,m,n) Cambia el tamaño de la matriz A devolviendo una matriz de tamaño


m×n cuyas columnas se obtienen a partir de un vector formado por las columnas de A
puestas una a continuación de otra. Si la matriz A tiene menos de m×n elementos se
produce un error.

DRA. ROSARIO ALDANA FRANCO 17


Un caso especialmente interesante es el de crear una nueva matriz componiendo
como submatrices otras matrices definidas previamente. A modo de ejemplo, ejecute
las siguientes líneas de comandos y observe y anote los resultados obtenidos:

>> A=rand(3)
>> B=diag(diag(A))
>> C=[A, eye(3); zeros(3), B]
En el ejemplo anterior, la matriz C de tamaño (6x6) se forma por composición de
cuatro matrices de tamaño (3x3). Al igual que con simples escalares, las submatrices
que forman una fila se separan con blancos o comas, mientras que las diferentes filas
se separan entre sí con intros o puntos y comas. Los tamaños de las submatrices
deben de ser coherentes.

3 Direccionamiento de vectores y matrices a partir de vectores

Los elementos de un vector x se pueden direccionar a partir de los de otro vector v. En


este caso, x(v) equivale al vector x(v(1)), x(v(2)), ... Considérese el siguiente
ejemplo:
>> v=[1 3 4]
>> x=rand(1,6)
>> x(v)
De forma análoga, los elementos de una matriz A pueden direccionarse a partir de los
elementos de dos vectores f y c. Véase por ejemplo:
>> f=[2 4]; c=[1 2];
>> A=magic(4)
>> A(f,c)
El siguiente ejemplo (continuación del anterior) permite comprobar cómo los
elementos de una matriz se pueden direccionar con un sólo índice, considerando que
las columnas de la matriz están una a continuación de otra formando un vector:
>> f=[1 3 5 7];
>> A(f), A(5), A(6)

DRA. ROSARIO ALDANA FRANCO 18


4 Operador dos puntos (:)

Este operador es muy importante en MATLAB y puede usarse de varias formas. Se


sugiere al lector que practique mucho sobre los ejemplos contenidos en este apartado,
introduciendo todas las modificaciones que se le ocurran y haciendo pruebas
abundantes (¡Probar es la mejor forma de aprender!). Para empezar, defina un vector
x con la siguiente instrucción:

>> x=1:10

En cierta forma se podría decir que el operador (:) representa un rango: en este caso,
los números enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este
operador puede también utilizarse con otros valores enteros y reales, positivos o
negativos. En este caso el incremento va entre el valor inferior y el superior, en las
formas que se muestran a continuación:
>> x1=1:2:10
>> x2=1:1.5:10
>> x3=10:-1:1
Puede verse que, por defecto, este operador produce vectores fila. Si se desea obtener
un vector columna basta trasponer el resultado. El siguiente ejemplo genera una tabla
de funciones seno y coseno. Ejecútese y obsérvese el resultado (recuerde que con (;)
después de un comando el resultado no aparece en pantalla).
>> x=[0.0:pi/50:2*pi]';
>> y=sin(x); z=cos(x);
>> [x y z]

EJERCICIOS

Realice las siguientes operaciones y reporte el resultado para acreditar su práctica.

1. M1=[2.8 3.1 4.7]; M2=[1.5 M1]

2. M2(3)

3. M2(8)

4. M1(2,3)

5. Cuál es el contenido y tamaño de las siguientes matrices, compruebe su respuesta


usando el comando whos; defina x=[1;5;7;9] y=[4 2 4;6 -3 1]

z=[1 2 3 0;5 6 4 2;1 2 8 5] a=[5 2 9] b=[a 3 a] y determine:

DRA. ROSARIO ALDANA FRANCO 19


a) c=[y(2,1);x] d) f=[[1;2;3]z]

b) d(2,2)=-4 e) g=[[4;7;2][8;9;f(3,4)]]

c) e=[y d]

6. Sea la matriz C=[-1 4 2;5 2 -3;4 -4 0;0 0 2], realice las siguientes operaciones:

a) X=C(:,1) d) S1=C(:,2:3)

b) Y=C(2,:) e) S2=C(3:4,1:2)

c) Z=C(:,:) f) S3=C(5:6,:)

7. R=1:10

8. T=0.0:0.5:5.0

9. V=1.5:-0.25:0.0

10. Sea la matriz: x=[5 7 8 2;3 2 4 7;5 2 8 9;2 3 1 5;9 6 3 5], indique el contenido
de las siguientes matrices:

a) a=x(:,2) f) f=x(1:2:5,:)

b) b=10:15 g) g=x(:,4:-2:1)

c) c=[4:9;1:6] h) h=x(5:-3:1,2:2:4)

d) d=0.0:0.1:1.0 i) i=0.5:-0.1:0.1

e) e=x(4:5,1:3) j) j=x(4:-2:1,3:-1:2)

BIBLIOGRAFÍA

• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice


Hall. España, 2002.

• Etter, Delores. Solución de problemas de ingeniería con MATLAB. Prentice


Hall. México, 1997.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería


Mecánica Eléctrica. Universidad Veracruzana. Septiembre de 2007.

DRA. ROSARIO ALDANA FRANCO 20


UNIVERSIDAD VERACRUZANA Experiencia Programación
FACULTAD DE INGENIERÍA MECÁNICA Educativa
ELÉCTRICA Tema Estructuras de decisión
REGIÓN XALAPA Practica 4
B2-S2 Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO

Que el alumno aplique las estructuras de decisión a la solución de problemas


usando Matlab.

SUSTENTO TEÓRICO
Un algoritmo es un conjunto de pasos para resolver un problema, sus características
son:

1. Son finitos: su número se puede representar mediante un número entero.

2. Son secuenciales: se realiza uno por uno.

3. Son ordenados: tienen un orden como parte de su objetivo en el


programa.

4. Son confiables: siempre dan el mismo resultado ante las mismas


condiciones de entrada.

Un programa de computadora es un conjunto de instrucciones que una máquina


puede entender, pero está basado en un algoritmo que resuelve un problema lo
más general posible.

Recuerde que el problema se resuelve cuando se diseña el algoritmo, el programa


es la codificación de esa solución en un lenguaje de programación, como Matlab.

La programación estructurada es un paradigma propuesto por Djisktra, que dice que


todo problema puede resolverse usando un conjunto de estructuras de
programación combinados. Las estructuras pueden ser de decisión, de repetición o
de control.

En esta práctica se abordará el estudio de las estructuras de decisión, que son:

DRA. ROSARIO ALDANA FRANCO 21


• De única alternativa: IF. Se evalúa una condición, si el resultado es falso no
se ejecuta la sentencia; si se evalúa verdadero, se ejecuta la sentencia.

• De dos alternativas: IF-ELSE. Se evalúa una condición, si el resultado es


verdadero se ejecuta la sentencia 1, si es falso, se ejecuta la sentencia 2.

• De múltiples alternativas: IF-ELSE y SWITCH. En el caso de IF-ELSE se


evalúan varias condiciones y se ejecutan las sentencias de acuerdo a los
resultados; pero en el caso de SWITCH se manejan varias alternativas (case),
el usuario elige una sola y las sentencias correspondientes se ejecutan.

MÉTODOS Y PROCEDIMIENTOS

El método que se usará es el ejemplo guiado, mientras usted realiza su ejercicio en


su PC, su docente le muestra en la pantalla del aula el resultado correcto para que
pueda verificar sus operaciones. Anote los resultados obtenidos

Estructura Secuencia

Un problema como la suma de dos números su puede realizar de manera secuencial


y sin repetir instrucciones.

Ejemplo: Sume dos números enteros dados por teclado

Diagrama de flujo Código en Matlab


% Suma de dos enteros
% Rosario Aldana
% 24 de abril de 2008

x=input('Dame X: ')
y=input('Dame Y:')

S=x+y;

fprintf('La suma de %d y %d es %d',x,y,S)

Estructura selectiva

DRA. ROSARIO ALDANA FRANCO 22


Un proceso puede requerir decisiones (elegir entre al menos dos opciones), para
ejecutar un conjunto de instrucciones u otro, dependiendo de la selección. La
llamada selectiva o condicional puede ser simple o compuesta.

Se usan para tomar decisiones lógicas, mediante la evaluación de una condición y


en función del resultado de la misma se realiza una acción.

Las estructuras de decisión se pueden anidar una dentro de otra, pero no se pueden
traslapar, es decir que una estructura de decisión se puede ejecutar en el interior de
otra, pero el bucle anidado debe concluir antes que el bucle que lo contiene. Las
estructuras condicionales simples o selectivas son: IF, ELSE-IF y SWITCH

Estructura IF

Con la estructura IF se ejecuta una acción cuando se cumple una condición dada,
así si la condición establecida se cumple se ejecuta una acción y si la condición no
se satisface, la acción que se ejecuta será otra diferente por defecto. Un ejemplo de
es leer un número y escribirlo si es positivo.

Diagrama de flujo Código en Matlab


% Determinar que un numero es
positivo
% Rosario Aldana
% 24 de abril de 2008

N=input('Dame N: ')
if N>0
fprintf('%f es positivo',N)
end

Estructura ELSE-IF
Con la estructura ELSE - IF se ejecuta una acción cuando se cumple una condición
dada, así si la condición establecida se cumple se ejecuta una acción y si la
condición no se satisface, la acción que se ejecuta será otra diferente también
preestablecida.

DRA. ROSARIO ALDANA FRANCO 23


Un ejemplo es leer números, si son positivos se suman, pero si lee un número que
no es positivo se escribe la SUMA.

Diagrama de flujo Código en Matlab


% Suma positivos

bandera=0;
suma=0;
contador=1;
k=input('Dame el valor limite
k: ')
while bandera==0
suma=suma+contador
fprintf('La suma de 0
hasta k=%d es
%d',contador,suma)
bandera=input('¿Desea
hacer otro calculo? si=0, no
cualquier otro')
end

SWITCH

La estructura SWITCH también se llama conmutador o interruptor, y es una


estructura selectiva múltiple. Basa su funcionamiento en el uso de una variable que
puede tomar diversos valores a lo largo de la ejecución del programa, permitiendo
comunicar información de una parte a otra del programa. Esta variable puede tomar
dos valores diferentes: 0 y 1, por ejemplo.

El ejemplo muestra un proceso para sumar o multiplicar un número que se da por


teclado, dependiendo de la elección del usuario, el número de entrada se guarda en
las variables suma o multiplica, dependiendo de la operación elegida.

DRA. ROSARIO ALDANA FRANCO 24


La codificación en Matlab es:

suma=0;
multiplica=1
contador=0;
k=input('Dame el numero de elementos k: ')
while contador<k
n=input('\nDame el numero: ')
op=input('\nDame la operacion (suma o multiplica)')

switch(op)
case{suma}
disp('\nEstoy sumando ...')
suma=suma+n;
contador=contador+1;
case{multiplica}
disp('\nEstoy multiplicando ...')
multiplica=multiplica*n
contador=contador+1;
otherwise %condicion por defecto
disp('\nNo estoy trabajando')
end

fprintf('\nLa suma guarda %d',suma)


fprintf('\nLa multiplicacion guarda %d',multiplica)
end

DRA. ROSARIO ALDANA FRANCO 25


EJERCICIOS

Formule un algoritmo y represéntelo en diagrama de flujo para resolver cada uno de


los problemas planteados a continuación.

1. Escribir un algoritmo que calcule y escriba el cuadrado de un número.

2. Determinar el área y volumen de un cilindro cuyas dimensiones radio y altura se


leen desde el teclado.

3. Calcular el perímetro y la superficie de un cuadrado dada la longitud de su lado.

4. Formular un algoritmo que reste dos números suministrados desde el teclado.

5. Calcular la superficie de un círculo tendiendo como dato el radio, dado desde


teclado.

6. Calcular el perímetro y la superficie de un rectángulo dando la base y la altura del


mismo por teclado.

7. Escribir un algoritmo para leer la un nombre de una marca de automóviles


seguida del nombre de su modelo e informe del modelo seguido del nombre.

8. Determinar la hipotenusa de un triángulo rectángulo a partir de las longitudes de


sus catetos dados por teclado.

9. Diseñar un algoritmo que transforme una temperatura en °C a °F.


(F=(9/5)C+32)

10. Formular un algoritmo que calcule el área de un triángulo en función de las


longitudes de sus lados.

11. Formular un algoritmo que convierta metros a pies y pulgadas

12. Formular un algoritmo que realice la conversión de divisas de pesos mexicanos


a dólares y viceversa, teniendo en cuenta el tipo de cambio vigente en el momento
de la conversión.

13. Calcular la media de una serie de números positivos, suponiendo que los datos
se leen desde una terminal. Un valor de cero (como entrada) indicará que se ha
alcanzado el final de la serie de números positivos.

14. Cálculo de los salarios mensuales de los empleados de una empresa, sabiendo
que éstos se calculan en base a las horas semanales trabajadas y de acuerdo a un

DRA. ROSARIO ALDANA FRANCO 26


precio especificado por hora. Si se pasan de cuarenta horas semanales, las horas
extraordinarias se pagarán a razón de 1.5 veces la hora ordinaria.

15. Dados tres números, determinar si la suma de cualquier pareja de ellos es igual
al tercer número. Si se cumple estas condiciones escribir “Iguales” y, en caso
contrario, escribir “Distintas”

16. Se desea calcular el salario neto semanal de un trabajador en función del


número de horas trabajadas y la tasa de impuestos:

• Las primeras 35 horas se pagan a tarifa normal

• Las horas que pasen de 35 se pagan a 1.5 veces la tarifa normal

• Las tasas de impuestos son:

a) Los primeros 6000 pesos son libres de impuestos

b) Los siguientes 4000 pesos tienen un 25% de impuestos

c) Los restantes a un 45% de impuestos

• La tarifa horaria es de 80 pesos

BIBLIOGRAFÍA

• Langsam, Yedidyah; Augenstein, Moshe y Tenenbaum, Aaron. Estructuras de


datos con C y C++. Prentice Hall. México, 2001.

• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice


Hall. España, 2002.

• Etter, Delores. Solución de problemas de ingeniería con MATLAB. Prentice


Hall. México, 1997.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería


Mecánica Eléctrica. Universidad Veracruzana. Septiembre de 2007.

• Aguilar, Joyanes y Castán Rodríguez. [C++]. Mc Graw Hill. España, 1999.

DRA. ROSARIO ALDANA FRANCO 27


UNIVERSIDAD VERACRUZANA Experiencia Programación
FACULTAD DE INGENIERÍA MECÁNICA Educativa
ELÉCTRICA Tema Estructuras de repetición
REGIÓN XALAPA Practica 5
B2-S2 Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO

Que el alumno aplique las estructuras de repetición a la solución de problemas


usando Matlab.

SUSTENTO TEÓRICO
Las computadoras están especialmente diseñadas para todas aquellas aplicaciones
en las cuales una operación o conjunto de ellas deben repetirse muchas veces, por
ello las estructuras repetitivas son ampliamente utilizadas.

Las estructuras repetitivas se valen de bucles o lazos, en los que una o varias
acciones se repiten (iteración) dependiendo de ¿Qué contiene el bucle? Y ¿Cuántas
veces se debe repetir?, el bucle termina mediante la evaluación de una condición de
parada, que se define al principio o final del bucle.

También las estructuras repetitivas pueden anidarse, cuidando de no traslapar la


ejecución de los bucles. Las estructuras repetitivas son: WHILE (mientras) y FOR
(desde y hasta).

WHILE es una estructura que requiere que se defina una condición a evaluar, si el
resultado es verdadero, entonces el bucle se ejecuta hasta que la condición se
evalúa como falsa.

FOR es una estructura que tiene, en su propia definición, cuántas veces se ha de


repetir el conjunto de sentencias que integran el bucle.

La diferencia entre ambas estructuras de repetición es que cuando se programa un


FOR sabemos cuántas veces se ha repetir el bucle, mientras con WHILE no lo
sabemos.

DRA. ROSARIO ALDANA FRANCO 28


MÉTODOS Y PROCEDIMIENTOS

El método que se usará es el ejemplo guiado, mientras usted realiza su ejercicio en


su PC, su docente le muestra en la pantalla del aula el resultado correcto para que
pueda verificar sus operaciones. Anote los resultados obtenidos.

Estructura WHILE

El cuerpo del bucle se repite mientras se cumple una condición. Cuando se ejecuta
la instrucción mientras, se evalúa la condición (expresión booleana), si se evalúa
falsa ninguna acción se lleva a cabo y el programa prosigue en la siguiente
instrucción después del bucle, pero si la expresión booleana se evalúa verdadera, se
ejecuta el cuerpo del bucle y al final se vuelve a evaluar la condición de ejecución
del bucle, repitiéndose este proceso en tanto la expresión booleana, que constituye
la condición, sea evaluada como verdadera.

Existen 4 métodos para terminar un bucle:

1. Plantear la condición al inicio del bucle

2. Encabezar la lista de datos con su tamaño

3. Finalizar la lista de datos con su valor de entrada

4. Agotar los datos de entrada usando un dato centinela determinado desde el


diseño.

Algunos bucles que realizan una tarea específica son los contadores y los
acumuladores.

Ejemplo: Calcular una tabla de multiplicar

Se pueden usar dos ciclos while anidados, como por ejemplo:

r=1;
while r==1
t=input('¿Que tabla desea calcular?' );
li=input('¿Desde donde?');
ls=input('¿Hasta donde?');
in=input('¿Con que incremento?');
while li<=ls
m=t*li;
fprintf('El resultado de multiplicar %d por %d es
%d\n',t,li,m)

DRA. ROSARIO ALDANA FRANCO 29


li=li+1;
end

r=input('¿Desea hacer otro calculo? si=1, no cualquier otro


numero');
end

Estructura FOR

En muchas ocasiones se conoce de antemano el número de veces que se desean


ejecutar las acciones de un bucle. Entonces cuando el número de iteraciones es fijo
y conocido se debe usar una estructura FOR (o desde/para).

La estructura FOR ejecuta las acciones del cuerpo del bucle un número especificado
de veces y de modo automático controla el número de iteraciones o pasos a través
del cuerpo del bucle.

La estructura FOR comienza con un valor inicial de la variable índice y las acciones
especificadas se ejecutan a menos que el valor inicial sea mayor que el valor final.
La variable índice se incrementa o de manera constante y si este valor no excede el
valor final, se ejecutan de nuevo las acciones. Por consiguiente, las acciones
específicas en el bucle se ejecutan para cada valor de la variable índice se
incrementa de acuerdo a la constante definida.

El incremento en la variable índice siempre es 1 si no se indica expresamente otra


cosa, esta variable es generalmente del tipo entero, positivo o negativo.

Ejemplo: Sumar los primeros 100 números enteros positivos.

El programa codificado en Matlab sería:

DRA. ROSARIO ALDANA FRANCO 30


Diagrama Código

suma=0;
for (r=1:100)
suma=suma+r;
end
fprintf('La suma es:
%d',suma)

EJERCICIOS

Formule un algoritmo y represéntelo en diagrama de flujo para resolver cada uno de los
problemas planteados a continuación.

1. Realice el diagrama de flujo del ejemplo 1 (las tablas de multiplicar).

2. Calcular la media de una serie de números positivos, suponiendo que los datos se
leen desde teclado. Un valor de cero (como entrada) indicará que se ha alcanzado el
final de la serie de números positivos.

3. Suma de los números pares comprendidos entre 2 y 100

4. Cálculo de los salarios mensuales de los empleados de una empresa, sabiendo que
éstos se calculan en base a las horas semanales trabajadas y de acuerdo a un precio
especificado por hora. Si se pasan de cuarenta horas semanales, las horas
extraordinarias se pagarán a razón de 1.5 veces la hora ordinaria.

5. Contar la cantidad de ceros que existen en una serie de 100 números suministrados
por teclado (Utilice la serie 5 3 0 2 4 4 0 0 2 3 6 0 2 para probar)

6. Dados tres números, determinar si la suma de cualquier pareja de ellos es igual al


tercer número. Si se cumple esta condiciones escribir “Iguales” y, en caso contrario,
escribir “Distintas”

DRA. ROSARIO ALDANA FRANCO 31


7. Calcule la calificación final de los alumnos de la clase de programación integrado por
el promedio de tres exámenes parciales y un final, que se dan por teclado.

8. Se desea calcular el salario neto semanal de 10 trabajadores en función del número


de horas trabajadas y la tasa de impuestos:

• Las primeras 35 horas se pagan a tarifa normal

• Las horas que pasen de 35 se pagan a 1.5 veces la tarifa normal

• Las tasas de impuestos son:

a) Los primeros 6000 pesos son libres de impuestos

b) Los siguientes 4000 pesos tienen un 25% de impuestos

c) Los restantes a un 45% de impuestos

• La tarifa horaria es 80 pesos

BIBLIOGRAFÍA

• Langsam, Yedidyah; Augenstein, Moshe y Tenenbaum, Aaron. Estructuras de


datos con C y C++. Prentice Hall. México, 2001.

• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice


Hall. España, 2002.

• Etter, Delores. Solución de problemas de ingeniería con MATLAB. Prentice


Hall. México, 1997.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería


Mecánica Eléctrica. Universidad Veracruzana. Septiembre de 2007.

• Aguilar, Joyanes y Castán Rodríguez. [C++]. Mc Graw Hill. España, 1999.

DRA. ROSARIO ALDANA FRANCO 32


UNIVERSIDAD VERACRUZANA Experiencia Programación
FACULTAD DE INGENIERÍA MECÁNICA Educativa
ELÉCTRICA Tema Estructuras de control
REGIÓN XALAPA Practica 6
B2-S2 Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO

Que el alumno aplique las estructuras de control a la solución de problemas usando


Matlab.

SUSTENTO TEÓRICO
Las estructuras de control permiten la salida del bucle en un punto intermedio,
cuando se cumple una condición, permitiendo interrumpir (BREAK) o terminar
(END) la ejecución del bucle. Los métodos para controlar el bucle puede ser
mediante: Centinela, Bandera o Contador, mismos que se explicarán a continuación.

BREAK permite escapar de un bucle; cuando se ejecuta, el bucle termina y el


programa reanuda la ejecución en la primera sentencia posterior al bucle.

CONTINUE es similar a BREAK, pero no salta fuera del bucle; simplemente salta
sobre las sentencias restantes del bucle y transfiere el control al final del bucle para
iniciar la siguiente iteración del mismo.

Mientras que Centinela, Bandera o contador con variables que al alcanzar cierto
valor terminan la ejecución del bucle.

MÉTODOS Y PROCEDIMIENTOS

El método que se usará es el ejemplo guiado, mientras usted realiza su ejercicio en


su PC, su docente le muestra en la pantalla del aula el resultado correcto para que
pueda verificar sus operaciones. Anote los resultados obtenidos

DRA. ROSARIO ALDANA FRANCO 33


Estructura EXIT

Cuando se cumple una condición la ejecución del bucle termina, así como la
ejecución del programa, como se puede apreciar en el ejemplo de sumar 100
números positivos, que se muestra en al figura 6.1. La estructura exit termina la
ejecución de Matlab. Copie el siguiente programa, córralo y anote la salida.

% USO DE BREAK
% TERMINA LA EJECUCION DEL CICLO Y DA EL CONTROL A LA SIGUIENTE
% INSTRUCCION

fid=fopen('fft.m','r'); % abre un archivo


s=''; % se declara una variable tipo string
while ~feof(fid) % mientras el archivo no este vacio
line=fgetl(fid); % ea un renglon del archivo
if isempty(line) % si la linea de texto esta vacia
exit % termine la ejecución de Matlab
end

s=strvcat(s,line); % guardar en s las lineas que va leyendo


end
disp(s) % que muestre en la pantalla el contenido de s

Estructura BREAK

Cuando se cumple una condición la ejecución del bucle se interrumpe, y la ejecución


del programa continua después del bucle, como se puede apreciar en el ejemplo
siguiente, se abre el archivo de una función predefinida en Matlab, se copia cada
línea de texto hasta que encuentra una línea en blanco, se interrumpe el ciclo y se
muestra en pantalla las líneas de texto. Copie el siguiente programa en un archivo y
córralo ¿Qué se muestra?

% USO DE BREAK
% TERMINA LA EJECUCION DEL CICLO Y DA EL CONTROL A LA SIGUIENTE
% INSTRUCCION

fid=fopen('fft.m','r'); % abre un archivo


s=''; % se declara una variable tipo string
while ~feof(fid) % mientras el archivo no este vacio
line=fgetl(fid); % ea un renglon del archivo
if isempty(line) % si la linea de texto esta vacia
break % termine de leer
end

s=strvcat(s,line); % guardar en s las lineas que va leyendo


end
disp(s) % que muestre en la pantalla el contenido de s

DRA. ROSARIO ALDANA FRANCO 34


Estructura CONTINUE

Cuando se cumple una condición y se usa continue, se continúa en la instrucción


siguiente. Teclee el siguiente programa y anote la salida del mismo.

% USO DE CONTINUE
% PARA EL CONTROL A LA SIGUIENTE ITERACION DEL CICLO

fid=fopen('magic.m','r'); % abre un archivo


count=0; % se declara e inicializa una variable
while ~feof(fid) % mientras el archivo no sea vacío
line=fgetl(fid); % lea una línea completa
if isempty(line)|strncmp(line,'%',1) % si la linea es vacia o no se lee
continue % continue a la siguiente instruccion
end % termina if
count=count+1; % se actualiza el contador
end % termina while
disp(sprintf('%d lineas',count)); % se muestra en pantalla # de lineas

Estructura BANDERA

La bandera es una variable que sirve para controlar la ejecución de un ciclo while.
Mientras se satisface un valor de la bandera se ejecuta el ciclo y cuando el valor de
la bandera cambia, se termina el ciclo. Por ejemplo contar los números naturales
que se dan por teclado

%cuenta los numeros naturales de un vector


clear all;
clc;
ban=1;
cont=0;
while (ban>=0)
dato=input('Dame un valor ');
if dato>0
cont=cont+1;
end
if dato<0
ban=-1;
end
end

DRA. ROSARIO ALDANA FRANCO 35


disp(cont)

EJERCICIOS

Identifique y muestre, qué programas de los ya realizados pueden mejorarse con el


uso de las estructuras de control.

BIBLIOGRAFÍA
• Langsam, Yedidyah; Augenstein, Moshe y Tenenbaum, Aaron. Estructuras de
datos con C y C++. Prentice Hall. México, 2001.

• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice


Hall. España, 2002.

• Etter, Delores. Solución de problemas de ingeniería con MATLAB. Prentice


Hall. México, 1997.

• Aguilar, Joyanes y Castán Rodríguez. [C++]. Mc Graw Hill. España, 1999.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería


Mecánica Eléctrica. Universidad Veracruzana. Septiembre de 2007.

DRA. ROSARIO ALDANA FRANCO 36


UNIVERSIDAD VERACRUZANA Experiencia Programación
FACULTAD DE INGENIERÍA MECÁNICA Educativa
ELÉCTRICA Tema Arreglos 1
REGIÓN XALAPA Practica 7
B2-S2 Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO

Que el alumno aplique los arreglos a la solución de problemas básicos usando


Matlab.

SUSTENTO TEÓRICO
Los arreglos o matrices son variables donde se pueden guardar varios datos del
mismo tipo usando un orden indexado, son un tipo de TDU (Tipos definidos por el
usuario). Existen arreglos de enteros, de reales, de cadenas, de registros y de
arreglos.

Un arreglo es una colección de posiciones de almacenamiento de datos, donde cada


una tiene el mismo tipo de dato y el mismo nombre. Cada posición de
almacenamiento en un arreglo es llamada “elemento de un arreglo”. ¿Por qué
necesitamos arreglos en los programas? Esta pregunta puede responderse con un
ejemplo. Si se está llevando cuenta de los gastos de un negocio durante un año y se
almacenan los recibos de cada mes; se puede tener una carpeta por cada mes, pero
es más práctico tener una sola carpeta con 12 compartimentos, uno por cada mes.

Los arreglos pueden tener 1 o hasta n dimensiones, que indican la posición en que
se guardan los elementos.

MÉTODOS Y PROCEDIMIENTOS

El método que se usará es el ejemplo guiado, mientras usted realiza su ejercicio en


su PC, su docente le muestra en la pantalla del aula el resultado correcto para que
usted pueda verificar sus operaciones. Anote los resultados obtenidos

DRA. ROSARIO ALDANA FRANCO 37


La forma más común de implementar el manejo de arreglos en Matlab es usando
dos ciclos for anidados, el primero para indicar las filas y el interior o segundo para
manejar las columnas.

Ejemplo 1: construir una matriz usando dos ciclos for anidados, teclee el siguiente
programa y anote la salida.

DRA. ROSARIO ALDANA FRANCO 38


n=input('¿Cuantas filas tendra el arreglo? ');
m=input('¿Cuantas columnas tendra el arreglo? ');
%Construye arreglo
%primero las filas
for (r=1:n)
%aqui las columnas
for(s=1:m)
A(r,s)=input('dame un numero ');
end
end

%para mostrar el arreglo se usan nuevamente dos ciclos anidados


%aqui las filas
fprintf('\nLa tabla es:\n');
for (r1=1:n)
%aqui las columnas
for(s1=1:m)
fprintf('%d\t',A(r1,s1));
end
fprintf('\n');
end

Use los siguientes datos para probarlo:

¿Cuantas filas tendra el arreglo? 4


¿Cuantas columnas tendra el arreglo? 6
dame un numero 2
dame un numero 4
dame un numero 5
dame un numero 7
dame un numero 8
dame un numero 1
dame un numero 2
dame un numero 5
dame un numero 9
dame un numero 4
dame un numero 3
dame un numero 7
dame un numero 9
dame un numero 10
dame un numero 11
dame un numero 0
dame un numero 4
dame un numero 2
dame un numero 6
dame un numero 8
dame un numero 9
dame un numero 0
dame un numero 2
dame un numero 3

DRA. ROSARIO ALDANA FRANCO 39


Ejemplo 2: Calcular una tabla de multiplicar

Se pueden usar dos ciclos while anidados, como por ejemplo:

r=1;
while r==1
t=input('¿Que tabla desea calcular?' );
li=input('¿Desde donde?');
ls=input('¿Hasta donde?');
in=input('¿Con que incremento?');
while li<=ls
m=t*li;
fprintf('El resultado de multiplicar %d por %d es
%d\n',t,li,m)
li=li+1;
end

r=input('¿Desea hacer otro calculo? si=1, no cualquier otro


numero');
end

EJERCICIOS

1. Anote las salidas de los programas de los ejemplos 1 y 2 de esta práctica.

2. Realice un programa que sume los elementos de cada una de las columnas
del ejemplo 1 y las guarde en un arreglo llamado colu.

3. Realice un programa que sume los elementos de cada una de las filas del
ejemplo 1 y las guarde en un arreglo llamado fila.

4. Desarrolle un programa que guarde en un arreglo (diag) los elementos de la


diagonal principal del arreglo del ejemplo 1 y que los sume y muestre ambos
resultados.

5. Desarrolle un programa que guarde en un arreglo las calificaciones de un


alumno de programación (3 parciales y un final) y determine su calificación
final (promedio).

6. Modifique el programa del ejercicio 5 para que se guarden en un arreglo las


calificaciones de 5 alumnos y determine además del promedio por alumno, el
promedio por cada parcial y el promedio del final.

DRA. ROSARIO ALDANA FRANCO 40


BIBLIOGRAFÍA

• Langsam, Yedidyah; Augenstein, Moshe y Tenenbaum, Aaron. Estructuras de


datos con C y C++. Prentice Hall. México, 2001.

• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice


Hall. España, 2002.

• Etter, Delores. Solución de problemas de ingeniería con MATLAB. Prentice


Hall. México, 1997.

• Aguilar, Joyanes y Castán Rodríguez. [C++]. Mc Graw Hill. España, 1999.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería


Mecánica Eléctrica. Universidad Veracruzana. Septiembre de 2007.

DRA. ROSARIO ALDANA FRANCO 41


UNIVERSIDAD VERACRUZANA Experiencia Programación
FACULTAD DE INGENIERÍA MECÁNICA Educativa
ELÉCTRICA Tema Arreglos 2
REGIÓN XALAPA Practica 8
B2-S2 Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO

Que el alumno aplique los arreglos de registros a la solución de problemas básicos


usando Matlab.

SUSTENTO TEÓRICO
Los registros son variables (TDU) donde se pueden almacenar datos de distinto tipo,
que a su vez pueden agruparse en arreglos de registros para implementar, por
ejemplo, bases de datos.

Un registro es un conjunto de datos relacionados entre sí y que se refieren a un


evento o elemento.

MÉTODOS Y PROCEDIMIENTOS

El método que se usará es el ejemplo guiado, mientras usted realiza su ejercicio en


su PC, su docente le muestra en la pantalla del aula el resultado correcto para que
pueda verificar sus operaciones. Anote los resultados obtenidos

La forma más común de implementar el manejo de bases de datos en Matlab es


usando registros y ciclos for (anidados si es necesario).

Ejemplo 1: construir un registro de un alumno con dos campos, nombre y edad.

n=input('Dame el nombre del alumno entre comillas: \n');


alum.nombre=(n);

e=input('Dame la edad del alumno entre comillas: \n');


alum.edad=(e);

fprintf('Nombre: %s\n',alum.nombre)
fprintf('Nombre: %d\n',alum.edad)

DRA. ROSARIO ALDANA FRANCO 42


Use los siguientes datos para probarlo:
‘Juan Lopez’
21

Ejemplo 2: construir un registro de un alumno con 4 campos, nombre, apellido,


edad y estatura.
datos.nom=input('Dame el nombre: ');
datos.ap=input('Dame el apellido: ');
datos.ed=input('Dame la edad: ');
datos.es=input('dame la estatura: ');

fprintf('Alumno: %s %s',datos.nom,datos.ap);
fprintf('\nEdad: %d',datos.ed);
fprintf('\nEstatura: %f',datos.es);

Ejemplo 3: implementar una base de datos con 3 registros con dos campos
(nombre y edad).
Se puede usar un ciclo while o uno for, como por ejemplo:

for a=1:3

n=input('Dame el nombre del alumno entre comillas: \n');


alum(a).nombre=(n);

e=input('Dame la edad del alumno: \n');


alum(a).edad=(e);

fprintf('Nombre: %s\n',alum(a).nombre)
fprintf('Nombre: %d\n',alum(a).edad)
end

Ejemplo 4: implementar una base datos con n registros con 4 campos, nombre,
apellido, edad y estatura.

n=input('Cuantos registros: ');


for a=1:n
datos.nom{a}=input('Dame el nombre: ');
datos.ap{a}=input('Dame el apellido: ');
datos.ed{a}=input('Dame la edad: ');
datos.es{a}=input('dame la estatura: ');
end

for b=1:n
fprintf('\n\nAlumno: %s %s',datos.nom{b},datos.ap{b});
fprintf('\nEdad: %d',datos.ed{b});
fprintf('\nEstatura: %f',datos.es{b});
end

DRA. ROSARIO ALDANA FRANCO 43


Ejemplo 5: implementar una base datos con n registros con 4 campos, nombre,
apellido, edad y estatura que se guarde en un archivo de texto llamado agenda.

B=input('Dame el nombre del archivo para guardar (entre comillas): ')


fid1=fopen(B,'w'); % abre el archivo para ESCRITURA

n=input('Cuantos registros: ');


for a=1:n
datos.nom{a}=input('Dame el nombre: ');
datos.ap{a}=input('Dame el apellido: ');
datos.ed{a}=input('Dame la edad: ');
datos.es{a}=input('dame la estatura: ');

fprintf(fid1,'%s',datos.nom{a});
fprintf(fid1,'%s',datos.ap{a});
fprintf(fid1,'%d',datos.ed{a});
fprintf(fid1,'%f',datos.es{a});
end
for b=1:n
fprintf('\n\nAlumno: %s %s',datos.nom{b},datos.ap{b});
fprintf('\nEdad: %d',datos.ed{b});
fprintf('\nEstatura: %f',datos.es{b});
end
fclose(fid1) % cierro el archivo

EJERCICIOS
Resuelva los ejercicios siguientes:

1. Anote las salidas de los programas de los ejemplos 1 a 4 de esta práctica.

2. Realice un programa que construya una agenda con n registros, con los
campos: nombre, apellido, dirección y teléfono, y que se guarde en un
archivo que se llame directorio.

3. Realice un programa que construya una base de datos con n nombres y


apellidos de alumnos y sus calificaciones de dos parciales y un final, que lo
guarde en un archivo llamado base y que calcule el promedio de cada alumno
y de cada parcial y que muestre el nombre de cada alumno y su promedio e
pantalla; y el promedio de cada parcial, para guardarlo en un arreglo llamado
prom2.

DRA. ROSARIO ALDANA FRANCO 44


BIBLIOGRAFÍA

• Langsam, Yedidyah; Augenstein, Moshe y Tenenbaum, Aaron. Estructuras de


datos con C y C++. Prentice Hall. México, 2001.

• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice


Hall. España, 2002.

• Etter, Delores. Solución de problemas de ingeniería con MATLAB. Prentice


Hall. México, 1997.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería


Mecánica Eléctrica. Universidad Veracruzana. Septiembre de 2007.

DRA. ROSARIO ALDANA FRANCO 45


UNIVERSIDAD VERACRUZANA Experiencia Programación
FACULTAD DE INGENIERÍA MECÁNICA Educativa
ELÉCTRICA Tema Graficas 2D
REGIÓN XALAPA Practica 9
B2-S2 Autor Dra. Rosario Aldana Franco

NOMBRE: ________________________________________ FECHA: __________

OBJETIVO

Que el alumno grafique en dos dimensiones usando Matlab.

SUSTENTO TEÓRICO
Los gráficos de Matlab pueden ser de dos y tres dimensiones. Los de dos
dimensiones se clasifican, de manera general, en:

• Euclidianos (comando plot)

• Estadísticos (comandos hist y bar)

• Polares (comando pol).

MÉTODOS Y PROCEDIMIENTOS

El método que se usará es el ejemplo guiado, mientras usted realiza su ejercicio en


su PC, su docente le muestra en la pantalla del aula el resultado correcto para que
pueda verificar sus operaciones. Anote los resultados obtenidos

1. GRAFICAS EUCLIDIANAS

PLOT

El uso de plot se muestra como resultado de correr el siguiente programa:


x=linspace(0,2*pi,30);
y=sin(x);
plot(x,y)
Existen además otras funciones orientadas a añadir títulos al gráfico, a cada uno de
los ejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc. Estas funciones
son las siguientes:

• title('título') añade un título al dibujo.

DRA. ROSARIO ALDANA FRANCO 46


x=linspace(0,2*pi,30);

y=sin(x);

plot(x,y)

title('Funcion Seno(x)')

• xlabel('tal') añade una etiqueta al eje de abscisas. Con xlabel off


desaparece.

• ylabel('cual') añade una etiqueta al eje de ordenadas. Con ylabel off


desaparece.

x=linspace(0,2*pi,30);

y=sin(x);

plot(x,y)

title('Funcion Seno(x)')

xlabel('X')

ylabel('F(x)')

• text(x,y,'texto') introduce 'texto' en el lugar especificado por las


coordenadas x e y. Si x e y son vectores, el texto se repite por cada par
de elementos. Si texto es también un vector de cadenas de texto de la
misma dimensión, cada elemento se escribe en las coordenadas
correspondientes

• gtext('texto') introduce texto con ayuda del ratón: el cursor cambia de


forma y se espera un clic para introducir el texto en esa posición

• legend() define rótulos para las distintas líneas o ejes utilizados en la figura.

• grid activa la inclusión de una cuadrícula en el dibujo. Con grid off


desaparece la cuadrícula.

x=linspace(0,2*pi,30);
y=sin(x);
plot(x,y)
title('Funcion Seno(x)')
xlabel('X')
ylabel('F(x)')
grid on

DRA. ROSARIO ALDANA FRANCO 47


• hold on permite pegar una segunda gráfica sobre la primera.
x=-pi:0.001:pi;
x2=sin(x);
x3=cos(x);
plot(x)
hold on
plot(x2,'--')
plot(x3,'-.')
hold off

La función plot() permite también dibujar múltiples curvas introduciendo varias


parejas de vectores como argumentos. En este caso, cada uno de los segundos
vectores se dibuja en ordenadas como función de los valores del primer vector de la
pareja, que se representan en abscisas. Si el usuario no decide otra cosa, para las
sucesivas líneas se utilizan colores que son permutaciones cíclicas del azul, verde,
rojo, cyan, magenta, amarillo y negro.
x=0:pi/25:6*pi;
y=sin(x);
z=cos(x);
plot(x,y,x,z)

SUBPLOT

Una ventana gráfica se puede dividir en m particiones horizontales y n verticales,


con objeto de representar múltiples gráficos en ella. Cada una de estas subventanas
tiene sus propios ejes, aunque otras propiedades son comunes a toda la figura. La
forma general de este comando es:

subplot(m,n,i)

en donde m y n son el número de subdivisiones en filas y columnas, e i es la


subdivisión que se convierte en activa. Las subdivisiones se numeran
consecutivamente empezando por las de la primera fila, siguiendo por las de la
segunda. Por ejemplo, la siguiente secuencia de comandos genera cuatro gráficos
en la misma ventana.
y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z;
subplot(2,2,1), plot(x,y)
subplot(2,2,2), plot(x,z)
subplot(2,2,3), plot(x,w)
subplot(2,2,4), plot(x,v)

DRA. ROSARIO ALDANA FRANCO 48


LINE

La función line() permite dibujar una o más líneas que unen los puntos cuyas
coordenadas se pasan como argumentos. Permite además especificar el color,
grosor, tipo de trazo, marcador, etc. Es una función de más bajo nivel que la
función plot(), pero ofrece una mayor flexibilidad. En su versión más básica, para
dibujar un segmento de color verde entre dos puntos, esta función se llamaría de la
siguiente manera:
line([xini, xend]', [yini, yend]', 'color', 'g')
Por ejemplo,
x=linspace(0,2*pi,30);
y=sin(x);
plot(x,y)
line([0,2*pi]',[0,2]','color','r')

OTRAS FUNCIONES

Otras gráficas en dos dimensiones son las siguientes.


• pie() gráficos con forma de pastel:
y=exp(-x.*x);
pie(x,y)
title('Grafica de pie')

• area() similar plot(), pero rellenando en ordenadas de 0 a y,


x=-2.9:.9:2,9;
y=exp(-x.*x);
area(x,y)
title('Grafica de area')

• quiver() dibujo de campos vectoriales como conjunto de vectores


x=0:0.01:2*pi;
y=sin(2*x).*cos(2*x);;
quiver(x,y)
title('Grafica de campos vectoriales')

• fill(x,y,c) es una función especial para dibujar polígonos planos, rellenándolos de


un determinado color. La forma general es la siguiente:
x=(1/8:2/8:15/8)*pi;
y=sin(x);
z=cos(x);
fill(y,z,'r') %circulo rojo con 8 puntos de referencia
axis('square')
text(-.11,0,'STOP')
title('Señal de STOP')

2. GRAFICAS ESTADISTICAS
• bar() crea diagramas de barras
x=-2.9:.9:2,9;

DRA. ROSARIO ALDANA FRANCO 49


y=exp(-x.*x);
bar(x,y)
title('Grafica de barras de una distribucion normal')

• barh() diagramas de barras horizontales


x=-2.9:.9:2,9;
y=exp(-x.*x);
barh(x,y)
title('Grafica de barras de una distribucion normal')

• stairs() función análoga a bar() sin líneas internas,


x=-2.9:.9:2,9;
y=exp(-x.*x);
stairs(x,y)
title('Grafica de barras sin division')

• hist() dibuja histogramas de un vector


x=-2.9:.9:2,9;
y=exp(-x.*x);
hist(y)
title('Grafica de histograma')

• errorbar() dibuja además las barras de error en cada punto


x=0:0.1:2;
y=erf(x); %crea la funcion de error de x
e=rand(size(x))/10; % genera valores de error aleatorios
errorbar(x,y,e) % crea la grafica
title('Grafica errores')

3. GRAFICAS POLARES

Finalmente las gráficas polares son especialmente útiles para representar vectores
• polar(t, r, S) dibuja gráficos con coordenadas polares, donde t es el vector de
ángulos en radianes, r es el radio vector y S es la cadena de caracteres opcional
para elegir un color
t=0:0.01:2*pi;
r=sin(2*x).*cos(2*x);
polar(x,y)
title('Grafica Polar')

• compass() dibuja los elementos de un vector complejo como un conjunto de


vectores partiendo de un origen común
z=eig(rand(20,20));
compass(z)
title('Grafica de vectores')

• feather() dibuja los elementos de un vector complejo como un conjunto de


vectores partiendo de orígenes uniformemente espaciados sobre el eje de
abscisas
z=eig(rand(20,20));

DRA. ROSARIO ALDANA FRANCO 50


feather(z)
title('Grafica de vectores')

• rose() histograma de ángulos (en radianes)


x=0:0.01:2*pi;
y=sin(2*x).*cos(2*x);
rose(x,y)
title('Grafica de rosa')

EJERCICIOS

Teclee cada uno de los programas de la práctica:

1. Copie y pegue las salidas junto a los listados en un documento de Word.

2. Dé un ejemplo de aplicación (distinto al usado en clase) por cada gráfica.

BIBLIOGRAFÍA

• Nakamura,Shoichiro. Analisis numérico y visualización gráfica. Prentice Hall.


México, 2004.

• Pérez, César. Matlab y sus aplicaciones en las ciencias e ingeniería. Prentice


Hall. España, 2002.

• Etter, Delores. Solución de problemas de ingeniería con MATLAB. Prentice


Hall. México, 1997.

• Aldana, Rosario. Antología para Programación. Facultad de Ingeniería


Mecánica Eléctrica. Universidad Veracruzana. Septiembre de 2007.

DRA. ROSARIO ALDANA FRANCO 51

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