You are on page 1of 127

MatLab

Matlab es la abreviatura de Matrix Laboratory (laboratorio de matrices). Creado


en 1984 por The MathWorks, es un software de clculo muy usado en
universidades, centros de investigacin y por ingenieros. En los ltimos aos
ha incluido muchas ms capacidades, como la de programar directamente
procesadores digitales de seal, crear cdigo, etc.

Prompt
Ventana del Espacio de
Trabajo y Ventana del
Directorio Actual de
Trabajo
Ventana de Comandos

Ventana de historial de
Comandos utilizados

Figura 1: El escritorio de Matlab


Matlab es un sistema interactivo, cuando se arranca en un ordenador aparece
en la pantalla la Figura 1 a cuya derecha se encuentra la ventana de
comandos.
Cuando se escribe despus del prompt >> el nombre del comando y se
presiona la tecla 'enter', el sistema ejecuta la instruccin y si no le ha asignado
un nombre concreto lo guardar en una nueva variable llamada ans. Las
variables se almacenan en el workspace que se puede ver a la izquierda de la
Figura1.
Matlab tiene tres caractersticas muy importantes que lo diferencian de otros
lenguajes:
1. Las variables no necesitan ser previamente declaradas.
2. Contiene una gran coleccin de funciones matemticas con un nmero de
argumentos no necesariamente el mismo.

3. El tipo de dato fundamental son vectores y matrices de nmeros complejos


almacenados en aritmtica flotante de doble precisin.
Algunos comentarios generales que siempre se debern tener en cuenta:
1. Los caracteres maysculos y minsculos no son equivalentes.
2. Un punto y coma al final de un comando suprime la salida por pantalla.
3. Los ( ) y [ ] no son intercambiables.
1.- Tipos de Datos en MatLab
MATLAB es un entorno pensando para trabajar con vectores y matrices. Por
ello, tanto el propio programa como la sintaxis de los comandos que se
introducen estn optimizados para este tipo de objetos.
MATLAB tambin permite representar tipos de datos escalares, como nmeros
enteros, nmeros reales (en formato de coma flotante de doble precisin),
variables booleanas y nmeros complejos.
Ejemplo:

Escalares

Nmeros complejos

Figura 2: Escalar y nmero complejo


2.- Variables en MatLab
Los nombres de variables en MatLab deben comenzar por una letra. El resto de
los caracteres pueden ser letras, dgitos o subrayados. nicamente son
importantes los 63 primeros caracteres para la versin 7. Matlab distingue
entre maysculas y minsculas.
Ejemplo:
Area es diferente area y AREA.

2.1.1 Variables predefinidas


Nombre Significado
Pi

Inf
Infinito
NaN
Not a Number
i,j
Imaginario
3.- Formatos de salida
La funcin format cambia la precisin de los datos de salida. Matlab, presenta
valores de acuerdo a un formato, el que por defecto es format short; existen
otros (ver la siguiente tabla y figura 3)
Comandos
long
short e
long e
hex
bank
+
rat
short

Valor de pi
3.14159265358979
3.1416e+000
3.14159265358979e+000
400921fb54442d18
3.14
+
355/113
3.1416

Figura 3: Formatos de salida


4.- Comandos para mostrar datos
4.1 Comando disp
Este comando se utiliza para visualizar un texto o contenido de una variable sin
mostrar su nombre. El formato de este comando es:
disp (nombre de variable) o disp (Mensaje)

Cada vez que se ejecuta el comando disp, la salida aparece en una nueva
lnea. Por ejemplo:

Utilizacin del comando disp para


Visualizar un mensaje en pantalla.
Se asigna un valor de 15 a la variable x
Se utiliza el comando disp para visualizar el contenido de la variable
x
Visualizacin de la variable nombre

Figura 4: Comando disp


4.2 Comando fprintf
El comando fprintf se utiliza para visualizar salidas de programas (texto y datos)
en la pantalla, o bien para almacenarlas en un fichero. Con este comando, y a
diferencia de disp. La salida puede tener un formato preestablecido. En este
caso se pueden combinar texto y resultados numricos provenientes de
clculos o variables predefinidas en la misma lnea. Adems, el formato de los
nmeros se puede controlar directamente con este comando.
Gracias a su expresividad, el comando fprintf es til en la visualizacin de
salidas, pero esta misma razn hace que este comando sea un tanto complejo
y con una sintaxis larga en algunos casos. Para evitar cualquier confusin,
vamos a presentar este comando gradualmente. Primero veremos como utilizar
fprintf para visualizar mensajes de texto para despus ver cmo podemos
combinar nmeros y cadenas en la salida.
4.2.1 Uso del comando fprintf para visualizar mensajes de texto:
Para la visualizacin de texto, el comando fprintf se utiliza de la forma:
fprintf (Mensaje en forma de cadena)
Por ejemplo:

Carcter \n, hace que pasa a la lnea siguiente el


mensaje que esta delante de l carcter

Figura 5: Comando fprintf

Con el comando fprintf es posible empezar una nueva lnea e indicarlo en la


mitad de la cadena que se introduce como parmetro. Esto se hace insertando
\n antes del carcter que va empezar en la lnea siguiente, Como en el ejemplo
anterior (figura 5).
Al carcter \n se le denomina carcter de escape. Es uno de los caracteres
utilizados para controlar la salida. Adems, existen estos otros caracteres de
escape que pueden ser insertados dentro de una cadena:
\b
\t

Carcter de borrado
Tabulacin horizontal.

4.2.2 Utilizacin del comando fprintf para visualizar datos y textos


juntos:
Para visualizar texto y datos (valores de variables) juntos, el comando fprintf
debe utilizarse siguiendo la sintaxis:
fprintf (Texto %-5.4f texto adicional, nombre_variable)
Ejemplo:

Figura 6: Comando fprintf


El smbolo % marca del lugar donde se insertar el nmero dentro del texto.
-5.4f Elementos de formato
- Flag o bandera (opcional)
5.4 Ancho de campo y precisin (opcional)
f Carcter de conversin (obligatorio)
nombre_variable, Nombre de variable cuyo valor ser visualizado (R)
El flag o bandera, cuyo carcter es opcional, puede ser uno de los siguientes:
Carcter utilizado
Descripcin
Para la bandera
- (signo menos)
Justificacin izquierda del nmero dentro del campo
+ (signo ms)
Visualiza el carcter de signo (+ o - ) delante del nmero
0 (cero)
Aade ceros si el nmero es ms pequeo que el campo
La especificacin del ancho y precisin del campo (5.4 en el ejemplo
anterior) es opcional. El primer nmero (5 en nuestro ejemplo) es el ancho de
campo, el cual nos indica el menor nmero de dgitos en la visualizacin. Si el

nmero que se visualiza es menor que el ancho de campo, se aadirn ceros o


espacios delante del nmero en cuestin. La precisin se corresponde con el
segundo nmero (figura 6), y especifica el nmero de dgitos que se mostrarn
a la derecha del punto decimal.
El ltimo elemento es el correspondiente al formato de conversin (f en
el ejemplo anterior). Este es obligatorio. A continuacin se muestran los
caracteres de conversin ms utilizados:

e Notacin exponencial en minsculas

E Notacin exponencial en maysculas


f Notacin de punto fijo
g Representacin en formato corto de
Las notaciones e o f
G Representacin en formato corto de
Las notaciones e o f
i Entero

Figura 7: Caracteres de conversin


Se puede obtener informacin adicional sobre estos y otros formatos utilizando
la ayuda de MATLAB, en el men Help (Ayuda). A continuacin se muestra un
5.- Comandos para ingresar datos
5.1. Comando para ingresar datos por teclado: input
nombre_variable=input(Mensaje que se muestra en la Ventana de Comandos)
Ejemplo:

Figura 8: Comando input

6.- Operadores aritmticos bsicos son:


Smbolo
+
*
/
\
^

( )

Operacin
Suma
Resta
Multiplicacin
Divisin
Divisin en sentido contrario ( 2\1) = 0.5
Potencia
Transpuesta
Parntesis

7.- Funciones matemticas elementales que operan de modo escalar


Estas funciones, que comprenden las funciones matemticas trascendentales y
otras funciones bsicas, actan sobre cada elemento de la matriz como si se
tratase de un escalar. Se aplican de la misma forma a escalares, vectores y
matrices. Algunas de las funciones de este grupo son las siguientes:
Funcin
sin(x)
cos(x)
tan(x)
asin(x)
acos(x)
atan(x)
atan2(y, x)
sinh(x)
cosh(x)
tanh(x)
asinh(x)
acosh(x)
atanh(x)
log(x)
log10(x)
exp(x)
sqrt(x)
sign(x)
rem(x, y)
round(x)
fix(x)
floor(x)
ceil(x)
gcd(x, y)
lcm(x, y)
real(x)

Comentario
Seno
Coseno
Tangente
arco seno
arco coseno
arco tangente (devuelve un ngulo entre pi/2 y +pi/2)
Devuelve un ngulo entre pi y pi; se le pasan 2 argumentos,
proporcionales al seno y al coseno
seno hiperblico
coseno hiperblico
tangente hiperblica
arco seno hiperblico
arco coseno hiperblico
arco tangente hiperblica
logaritmo natural
logaritmo decimal
funcin exponencial
raz cuadrada
Devuelve -1 si <0, 0 si=0, y 1 si>0. Aplicada a un numero
complejo devuelve un vector unitario en la misma direccin
resto de la divisin de x entre y
redondea hacia el entero mas prximo
redondea hacia el entero ms prximo a 0
valor entero ms prximo hacia menos infinito
valor entero ms prximo hacia ms infinito
mximo comn divisor
mnimo comn mltiplo
parte real

imag(x)
abs(x)
angle(x)

parte imaginaria
valor absoluto
ngulos de fase

8. Elaboracin de un Programa (Fichero Script) en Matlab


1) Como se muestra en la Figura, en El men File escoger New y luego
M-File

Figura 9: Creacin de un archivo con extensin m


Al presionar en M-File se muestra la siguiente Venta de Edicin

Figura 10: Ventana de edicin


En la cual podremos escribir el Programa que deseemos, en otras palabras un
conjunto de instrucciones de matlab para poder resolver un problema
determinado

8.1 Comentarios en Matlab


Los comentarios deben ir precedidos por % o, lo que es lo mismo, MATLAB
ignora todo lo que vaya precedido por el smbolo %.
Ejemplo
Ingresar la base y la altura de un Rectngulo y reportar el area, el permetro y
la diagonal.

Figura 11: Programa rectngulo

Una vez escrito el programa se graba con el nombre de rectngulo generando


un archivo que puede ser llamada desde la ventana de comandos. Se debe
escribir rectngulo y presionar enter

Figura 12: Ejecucin del programa rectngulo


El programa se ejecuta y pide el valor de la base del rectngulo se ingresa un
numero por ejemplo 3 y se presiona enter, luego pide el valor de la altura se
ingresa otro numero por ejemplo 4 y se presiona enter, luego el programa
9

reporta el valor del rea, el permetro y la diagonal como se muestra en la


figura 12.
9.- Estructuras secuenciales
Son estructuras de programas que cuando se ejecutan, lo hacen instruccin
por instruccin, en orden de manera secuencial
9.1.- Ejemplos de Estructuras Secuenciales
Ejemplo 1

Figura 13: Programa para calcular el rea y la longitud de la circunferencia

Ejecucin en la Ventana de Comandos

Figura 14: Ejecucin del programa circulo

10

Ejemplo 2

Figura 15: Programa de conversin de radianes a grados sexagesimales


Ejecucin en la Ventana de Comandos

Figura 16: Ejecucin del programa de conversin


Ejemplo 3

Figura 17: Programa para calcular el promedio de tres nmeros enteros


Ejecucin en la Ventana de Comandos

11

Figura 18: Ejecucin del programa para calcular promedio


Ejemplo 4

Figura 19: Programa de cuadrado


Ejecucin en la Ventana de Comandos

Figura 20: Ejecucin del programa de un cuadrado


Ejemplo 5

Figura 21: Programa de periodo de tiempo

12

Ejemplo 6
Figura 22: Ejecucin del programa de periodo de tiempo
Ejemplo 6

Figura 23: Programa para calcular el inters generado por un capital

Figura 24: Ejecucin del programa de inters


Ejemplo 7

Figura 25: Enunciado del problema de un triangulo

13

Figura 26: Programa para calcular ngulos de un triangulo

Figura 27: Ejecucin del programa


Practica N 1
1. Hacer un programa para calcular el rea de un tringulo dada la base y la
altura.
2. Escriba un programa que lea un nmero y escriba su cuadrado.
3. Determinar el volumen de un cilindro cuyas dimensiones radio y altura se
leen desde el teclado.
4. Determinar la hipotenusa de un tringulo rectngulo si se ingresan las
longitudes de los catetos.
5. Hacer un programa para que se ingresen 2 nmeros y reporte su suma,
resta y multiplicacin.
6. Calcular el permetro, el rea y la diagonal de un rectngulo si se ingresan
los lados.
7. Hacer un programa que se ingrese una temperatura en grados centgrados (
C) y la reporte en grados Fahrenheit ( F)
F = 9/5 C + 32
8. Hacer un programa para convertir metros a pies y pulgadas. metro = 39.37
pulgadas

14

1 metro = 3.2 pies


9. Hacer un programa que intercambie el valor de 2 variables numricas.
10. Hacer un programa para hallar la ganancia de la venta de un producto. Se
debe ingresar el precio de costo, precio de venta. Se debe reportar la
ganancia.
11. Hacer un programa para que se ingrese una cantidad en kilos y reporte su
equivalencia en libras.
1 kilo = 2.2 libras
12. Calcular el salario neto de un trabajador. Se debe leer el nombre, horas
trabajadas, precio de la hora y sabiendo que los impuestos aplicados son el
10 por ciento sobre el salario bruto.
13. Calcular la altura que cae un objeto. Se debe ingresar el tiempo recorrido en
segundos.
14. Calcular la presin de un gas en un recipiente. Se debe ingresar la
temperatura ( C), el nmero de moles n y el volumen (lts).
15. Calcular el espacio recorrido por un mvil. Ingresar Velocidad inicial
(m/seg.), tiempo (seg.) y aceleracin (m/seg2).

10.- Operadores Relacionales Y Lgicos


Adems de las operaciones matemticas tradicionales, MATLAB nos permite
realizar operaciones relacionales y lgicas. El objetivo de estos operadores es
proporcionar respuestas a cuestiones verdadero/falso. MATLAB responde a
este tipo de preguntas con 1 (verdadero) 0 (falso).
10.1.- Operadores relacionales
Los operadores relacionales de MATLAB son las comparaciones comunes:
<

Menor que

<=

Menor o igual

>

Mayor que

>=

Mayor o igual

==

Igual a

~=

Distinto a

15

10.2.- Operadores lgicos


Los operadores lgicos que proporciona MATLAB son:
&
|

AND
OR

NOT

11. - Estructura Selectiva Simple (if else.end)


Sirve para escoger dos caminos en un programa de acuerdo al resultado de
una expresin lgica.
if condicin
Instrucciones1
else
Instrucciones2
end
Si la condicin es verdadera se ejecutan Instrucciones1, en caso contrario si es
falsa se ejecutan Instrucciones2.
La sentencia else es opcional
if

condicin
Instrucciones
end

11.1 Estructuras selectivas simples encadenadas


Permite escoger entre diferentes alternativas evaluando diferentes condiciones.
Se encadenan varios if-else.
if

condicion1
instrucciones1
elseif condicion2
instrucciones2
elseif condicion3
instrucciones3
elseif condicin4
instrucciones4

else
% opcin por defecto cuando no se cumple
% ninguna de las anteriores
Instrucciones n
end

16

11.2.- Ejemplos de condicionales (o selectivas)


Ejemplo Condicional 01

Ejecucin

Ejemplo Condicional 02

Ejecucin

Ejemplo Condicional 03

17

Ejecucin

Ejemplo Condicional 04

D de

18

Ejecucin

Ejemplo Condicional 05

Ejecucin

19

Ejemplo Condicional 06

Ejecucin

Practica N 2
1.
2.
3.

Hacer un programa para que se ingrese 2 nmeros y se reporte el mayor


de ellos.
Escriba un programa para determinar s un nmero entero A es divisible
por otro B.
Hacer un programa para que calcule e imprima los valores de las races
reales de una ecuacin de segundo grado:
Ax2 + Bx + C =0
Se debe ingresar los coeficientes de la ecuacin A, B y C.

4.

La tasa de inters sobre un prstamo es del 8% si la cantidad es menor o


igual que S/. 200, pero es de 6% si excede a 200. Hacer un programa para
que ingrese la cantidad y reporte el inters y el monto total.

5.

Hacer un programa de tal manera que se ingrese las 2 evaluaciones de un


alumno y reporte APROBADO si el promedio es mayor o igual a 10.5 y
DESAPROBADO en caso contrario.

20

6.

La comisin de las ventas totales es como sigue:


a) Si VENTAS < S/.80, entonces no hay comisin.
b) Si S/.80 <= VENTAS <= S/.600 entonces la comisin es igual al 12%
de las ventas.
c) Si VENTAS > 600 entonces la comisin es igual al 15% de las
ventas.
Hacer un programa para que se ingrese las ventas y se reporte la
comisin.

7.

Hacer un programa para calcular el pago semanal de un trabajador. Se


debe ingresar el nombre, pago por hora y el nmero de horas trabajadas.
Si normalmente se trabaja 40 horas a la semana y por cada hora extra
trabajada se paga 1.5 veces la hora normal, reportar el nombre y el pago
semanal del trabajador.

8.

Se repartir la herencia entre los hijos de un seor como sigue: Si la


cantidad de hijos es menor que 4; se repartir exactamente entre el
nmero de hijos; si son 4 o ms hijos, la mitad le tocar al hermano mayor
y el resto se dividir entre los dems hermano. Hacer un programa para
que reporte cuando le corresponde a cada hijo. Se debe ingresar la
herencia y el nmero de hijos.

9.

Una empresa comercial desea hacer un programa para calcular el precio


neto de un artculo de acuerdo a lo siguiente:
a) Si la venta es al contado se le da el 40% de descuento.
b) Si la venta es a plazos y:
T < 12 meses se recarga el 30%
T>=12 meses se recarga el 60%
Se debe ingresar el precio del artculo, el codigo de venta (c) contado,
(p) plazos y si la venta es a plazos se debe ingresar el tiempo de pago.

10. En un tringulo se cumple lo siguiente:


s>a, s>b, s>c donde s: semipermetro

a, b, c: Lados del tringulo

Hacer un programa para que se ingresen los valores de los lados del
tringulo y si estos valores cumplen las condiciones calcular el rea del
tringulo en caso contrario reportar 'DATOS INCORRECTOS'.
AREA=

s(s-a)(s-b)(s-c)

11. Calcular el valor de la funcin de acuerdo a lo siguiente :


y = x 2 + 5 Si x<=0
y = 3x - 1 Si 0 < x < 2
y = x2 - 4x + 5 S x>=2
Se debe ingresar el valor de x y reportar el valor de y.
21

12. Los empleados de una fbrica trabajan en dos turnos: diurno y nocturno.
Se desea calcular el jornal diario de acuerdo a los siguientes puntos:
- La tarifa de las horas diurnas es de S/.1.5
- La tarifa de las horas nocturnas es de S/. 2.25
- En caso de ser domingo la tarifa aumentar en S/.1 en el turno diurno y S/.
1.25 en el turno nocturno.
Se debe leer el turno, las horas trabajadas y el da de la semana.

11.3.- Estructura Selectiva mltiple


La sentencia switch realiza una funcin anloga a un conjunto de if-elseif
encadenados. Su sintaxis es la siguiente:
switch expresin
case valor1
instrucciones1
case valor2
instrucciones2
case {valor3, valor4, valor5}
instrucciones3
case

otherwise % opcin por defecto


instrucciones4
end
En primer lugar, se evala la expresin del switch, cuyo resultado debe ser un
nmero escalar o una cadena de caracteres. Este resultado se compara con
los valores de cada uno de los case y se ejecutan las instrucciones del case
cuyo valor coincida. Slo se ejecutar el que coincida. Si ningn valor de los
case coincide, entonces se ejecutarn las instrucciones indicadas en otherwise.
Observar que se puede agrupar ms de un valor en un case.
11.4.- Ejemplos de estructuras selectivas mltiples
Ejemplo mltiple 01

22

Ejecucin

Ejemplo mltiple 02

23

Ejecucin a

Ejecucin b

Ejecucin c

Ejemplo mltiple 03

24

Ejecucin

12. - Estructuras Repetitivas


1) while . End
while condicion
Instrucciones
end
2) for
for v = vi : inc: vf
Instrucciones
end
donde :
vi: valor inicial
inc: incremento
vf: valor final
Si el incremento es de 1 en 1, se omite el incremento
for v=vi:vf
Instrucciones
end
Contador: Es una variable comienza con valor inicial y se incrementa en un
valor constante.
Inicializamos
C=0;
Y en el proceso
C=C+Valor_constante;

25

12.1.- Ejemplos Whileend


Ejemplo mientras 01

Ejecucin

Ejemplo mientras 02

Ejecucin

Ejemplo mientras 03

26

Ejecucin

12.2.- Ejemplos de procesos repetitivos for


Ejemplo for 01

Ejecucin

Ejemplo for 02

Ejecucin

27

Ejemplo for 03

Ejecucin

12.3.- Ejemplos de estructuras mixtas


Ejemplo repetitivo 01

Ejecucin

28

Ejemplo repetitivo 02

Ejecucin

Acumulador: Variable que comienza con un valor inicial que generalmente es


cero y se incrementa una cantidad variable
Inicializamos
S=0
Y en el proceso de suma
S = S + valor_a_sumar;

29

Ejemplo repetitivo 03

Ejecucin

Ejemplo repetitivo 04

Ejecucin

Ejemplo repetitivo 05

30

Ejecucin

Ejemplo repetitivo 06

31

Ejecucin

Ejemplo repetitivo 07

32

Ejecucin

Multiplicador: Variable que comienza con un valor inicial que generalmente es


uno y se multiplica una cantidad variable
Inicializamos

P = 1;

Y en el proceso de multiplicacin
P = P * valor_a_multiplicar;

Ejemplo repetitivo 08

Ejecucin

33

Ejemplo repetitivo 09

Ejecucin

Ejemplo 10
Calcular la suma de los n trminos de la siguiente serie:
s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 +...... 1/n.

Ejecucin

34

Ejemplo 11
Ingresar n nmeros, calcular el mximo y el mnimo de ellos.

Ejecucin

Ejemplo 12
Realizar un programa que escriba los n trminos de la serie de Fibonacci:
1, 1, 2, 3, 5, 8, 13,.......

35

Ejecucin

Ejemplo 13
Calcular la sumatoria:
s = 1 + x + x 2/2! + x3 /3! + x4 /4! + ........ + xn /n! Se debe ingresar x real y n
entero positivo.

Ejecucin

36

Ejercicios Resueltos
1.- Programa para ingresar un nmero y reportar todos sus divisores
clc
n=input('ingrese numero :');
disp('Los divisores son ');
for i=1:n
if rem(n,i)==0
fprintf('%d ',i);
end
end
2.- Ingresar un nmero y reportar si es perfecto. Un nmero es perfecto si es
igual a la suma de divisores menores que el
clear all
clc
n=input('Ingrese numero :');
s=0;
for i=1:n-1
if rem(n,i)==0
s= s+i;
end
end
if n==s
disp('es perfecto');
else
disp('no es perfecto');
end
3.- Ingresar un nmero y reportar si es primo.
clear all
clc
n=input('Ingrese numero :');
cd=0;
for i=1:n
if rem(n,i)==0
cd= cd+1;
end
end
if cd==2
disp('es primo');
else
disp('no es primo');
end

37

4.- Escribir un programa que descomponga un nmero N en todos sus factores


correspondientes. Ej.:
27 = 3*3*3
180 = 2*2*3*3*3
clear all
clc
n=input('Ingrese numero :');
d=2;
while n>1
if rem(n,d)==0
fprintf('%d ',d);
n=n/d;
else
d=d+1;
end
end
5.- Ingresar 2 nmeros y calcular su mximo comn divisor
clc
clear all
n1=input('Primer numero :');
n2=input('Segundo numero :');
d=2;
mcd=1;
while d<=n1 & d<=n2
if rem(n1,d)==0 & rem(n2,d)==0
mcd=mcd*d;
n1=n1/d;
n2=n2/d;
else
d=d+1;
end
end
fprintf('El m.c.d. es : %d ',mcd);
6.- Ingresar 2 nmeros y calcular su mnimo comn mltiplo
clc
clear all
n1=input('Primer numero :');
n2=input('Segundo numero :');
d=2;
mcm=1;
while n1~=1 | n2~=1
if rem(n1,d)==0 | rem(n2,d)==0
mcm=mcm*d;
if rem(n1,d)==0
n1=n1/d;
38

end
if rem(n2,d)==0
n2=n2/d;
end
else
d=d+1;
end
7.- Ingresar un nmero y reportar el nmero de dgitos que tiene
clc;
n=input('Ingrese numero :');
x=n;
cd=0;
while x>0
dig= rem(x,10);
cd=cd+1;
x=fix(x/10);
end
fprintf('El numero %d tiene %d digitos ',n,cd);
8.- Ingresar un nmero y reportarlo al revs
clc;
n=input('Ingrese numero :');
x=n;
disp('El numero al reves es :');
while x>0
dig= rem(x,10);
fprintf('%d',dig);
x=fix(x/10);
end
9.- Ingresar un nmero y reportar si es capica
clc;
n=input('Ingrese numero :');
x=n;
inv=0;
while x>0
dig= rem(x,10);
inv=inv*10+dig;
x=fix(x/10);
end
if n==inv
disp('el numero es capicua');
else
disp('el numero no es capicua');
end

39

10.- Ingresar un nmero en base 10 y convertirlo a base 2


clc;
n=input('Ingrese numero :');
x=n;
b2=0;p=1;
while x>0
r= rem(x,2);
b2=b2+r*p;
p=p*10;
x=fix(x/2);
end
fprintf('el numero en base 2 es : %d ',b2);
11.- Ingresar un nmero en base 2 a base 10
clc;
b2=input('Ingrese numero en base 2:');
x=b2;
n=0;p=1;
while x>0
r= rem(x,10);
n=n+r*p;
p=p*2;
x=fix(x/10);
end
fprintf('el numero en base 10 es : %d ',n);

Ejercicios Sobre Estructuras Repetitiva


Ejercicios De Sumatorias
1.-

Escribir un programa que permita leer 3 nmeros positivos A,B, n: n>0


calcule el valor de la sumatoria:
1

2
+

A
2.-

3
+

A+B

(n+1)

+
A + 2B

+ ..... +
A + 3B

A + nB

Escribir un programa que lea 3 nmeros enteros positivos A, B, N>0,


calcule la sumatoria de:
1

2
-

3
+

A+B

4
-

A + 2B

(N+1)
+ .....

A + 3B

A + NB

40

3.-

Escribir un programa que lea 3 nmeros enteros positivos a, b, n>0,


calcule la sumatoria de:
1!

2!

3!

A
4.-

4!

(n+1)!

A+B

A + 2B

+ .....
A + 3B

A + nB

Escribir un programa que calcule el valor del nmero "e" como la suma
de la serie:
1
e = 1/i =

1
+

1
+

+ .............

0!
1!
2!
La sumatoria terminar cuando se tenga el primer trmino inferior a
0.001
5.-

Escribir un programa que permita calcular la sumatoria de:


X2

X3

1+ X+

+
+ ...............
2!
3!
Hasta que el termino |xn/n!| < 0.001. Se debe ingresar el valor de X.
6.-

Escriba un programa que lea 2 nmeros X1 y X2 tal que X1<X2. Se


debe calcular e imprimir el valor de f(x) para todos los valores de X ,
desde X=X1 hasta x=X2
X2

X
f(x) = 1 +

7.-

X3
+

X4
-

+ .....

3!
5!
7!
9!
La sumatoria termina cuando se tiene un trmino: | Xn/Y! | < 0.001.
Escriba un programa que permita calcular el valor de f(x) para valores
desde X=X1 hasta X=X2.
X3
f(x) = X +

X5
-

X7
+

X9
-

+ .....

3!
5!
7!
9!
Cada sumatoria termina cuando se tiene un trmino : | Xn/Y! | < 0.001.
8.-

Escribir un programa que que lea 3 nmeros enteros A, B y n (n>0, A>0


y B>0) y calcule la sumatoria de
n!

(n-1)!
-

A
9.-

(n-2)!
+

A+B

(n-3)!
-

A+2B

1!
+ ........

A+3B

A+(n-1)B

Escribir un programa que permita calcular cuantos trminos debe tener


esta sumatoria para que el valor de esta sea lo ms cercano a 1000 (sin
exceder de 1000).

41

k2 + 1
k=

= 1000

n=?

k
Ejercicios De Series
1.-

Escribir un programa que permita leer un nmero entero n>0 y que


imprima los n trminos de la serie:
1

2.-

+
+
+
+
+ ....... +
2
3
4
5
6
n+1
Escribir un programa que permita imprimir los nmeros de fibonacci,
menores que un nmero n ingresado por el teclado.

3.-

Escribir un programa que lea un nmero entero n>0 y que imprima los n
trminos de la serie:
4, 12, 24, 40, 60........ Debe imprimir tambin la suma de los n trminos.

4.-

Escribir un programa que lea un nmero entero n>0 y que imprima los n
trminos de la serie:
4, 9, 15, 23, 34, 49,..... Debe imprimir tambin la suma de los n trminos.

5.-

Escribir un programa que lea un nmero entero n>0 y que imprima los n
trminos de la serie:
10, 15, 23, 35, 53, 80,..........
Adems se debe imprimir la suma de los n trminos.
Escribir un programa que calcule e imprima el valor de los n trminos de
la serie:

6.-

2, 1, 1, 2, 8, 64.......

7.-

El valor de n se lee por el teclado y es n>0.


Tambin se debe imprimir la suma de los n trminos.
Escribir un programa que permita calcular e imprimir cada uno de los N
trminos de la serie:
1
2
4
7
11
+
+
+
+
+ .........
4
12
24
40
60
Se debe imprimir como mximo 5 trminos por lnea. Tambin se debe
imprimir la suma de los n trminos.

8.-

Escribir un programa que calcule e imprime los N trminos de la


sumatoria
4
9
15
23
34
49
+
+
+ .......
2
1
1
2
8
64
Debe imprimir como mnimo k trminos por lnea. Tambin debe calcular la
suma de los N trminos.

42

Ejercicios Varios
1.- Escribir un programa que permita mostrar en pantalla los N primeros
nmeros primos. N se ingresa por teclado y es N>0.
2.- Escribir un programa que permita leer un nmero entero N>0 y que imprima
todos los nmeros primos menores o iguales que N.
3.- Escribir un programa que determine todos los nmeros primos que se
encuentran entre 2 nmeros n1 y n2.
n1 y n2 se ingresan por teclado.
4.- Escribir un programa que permita mostrar todos los nmeros perfectos
menores que 1000.
5.- Escribir un programa que permita ingresar un nmero entero y reporte si es
un Cubo Perfecto. Un nmero es un cubo perfecto y es igual a la suma de sus
dgitos al cubo. Ejemplo 153 es Perfecto porque 1 3 + 53+ 33 = 153.
6.- Ingresar un nmero entero positivo y reportar:
- La suma de sus dgitos
- El producto de sus dgitos
- El mayor de sus dgitos
7.- Escribir un programa que calcule el producto de 2 nmeros enteros en base
a sumas sucesivas (solamente).
8.- Escribir un programa que calcule el cociente y el residuo de 2 nmeros
enteros en base a restas sucesivas.
9.- Escribir un programa que permita leer nmeros enteros diferentes de cero y
que al finalizar imprima:
a.- El nmero mayor y el nmero menor.
b.- El total de nmeros ledos.
c.- La cantidad de nmeros positivos y nmeros negativos.
El programa termina cuando se ingresa el cero.
10.- Escribir un programa que lea las edades de personas y calcule la edad
mayor, la edad menor y la edad promedio.
El programa termina cuando se ingresa una edad menor o igual que cero.
11.- Escribir un programa que permita leer nmeros enteros diferentes de cero
y que imprima:
- El mnimo nmero negativo ledo.
- El mximo nmero positivo ledo.
- La cantidad de datos ledos.
- La cantidad de impares positivos.
- La cantidad de pares negativos.
El programa termina cuando se ingresa el No cero.

43

Si no se ingreso ningn nmero negativo debe imprimirse el mensaje: "No se


ingresaron nmeros negativos". Si no se ingres ningn nmero positivo debe
imprimirse el mensaje "No se ingresaron nmeros positivos.
12.- Escribir un programa que permita leer las notas de 3 parciales para 40
alumnos (las notas estn entre 0 y 20) y calcule el promedio de cada uno.
Si el promedio de las 3 notas es >=11 el alumno aprueba, sino tiene derecho a
rendir un examen sustitutorio, el cual reemplaza la nota ms baja de las 3
primeras y se calcula nuevamente el promedio del alumno.
Se desea saber:
- El nmero de aprobados sin sustitutorio.
- El nmero de aprobados con sustitutorio.
- El nmero de alumnos que rinden examen sustitutorio.
- El nmero de alumnos con promedio final desaprobatorio.
El nmero de alumnos que a pesar de aprobar el sustitutorio al final son
desaprobados.
13.- Dado un nmero entero positivo N, dibujar el siguiente triangulo:
Si N=5 saldr
1
21
321
4321
54321
14.- Dado un nmero entero positivo N, dibujar el siguiente rectngulo:
Si N=4 saldr
********
********
********
********
15.- Dado un nmero entero positivo N,
Dibujar en la pantalla el siguiente triangulo:
Si N=4
****
***
**
*
16-. Dado un nmero entero positivo N, dibujar el siguiente cuadrado:
Ingrese N: 4
1234
2341
3412
4123

17.- Mostrar en la pantalla los N primeros trminos de la serie:

44

10, 11, 12, 14, 17, 22, 30, 34, 37, 44, 54,...
Ayuda: los dos primeros trminos son 10 y 11, a partir de all, cada trmino se
forma al aumentar a cada trmino la suma de los dgitos del trmino anterior.
18. Determinar cuales son los nmeros de 3 dgitos, cuya suma de sus dgitos
es igual a N. Se debe ingresar el valor de N.
19. Ingresar N nmeros de 2 dgitos y determinar cual de ellos
Tiene la suma de dgitos mayor.
20. Dado un nmero entero, mostrar la lista de todos sus divisores Impares,
adems mostrar la suma de todos sus divisores.

13.- Matrices En Matlab


Una matriz es un conjunto ordenado de datos compuesta de filas y columnas.
Para crear una matriz se usa los corchetes para especificar los valores dentro y
el punto y coma para separar las filas del arreglo, un espacio adems separa
las columnas. Por ejemplo:
> >A = [1 2 3; 4 5 6; 7 8 9]
123
456
789

Si las matrices tienen una sola fila y columna se les denomina vectores
Por ejemplo:
Para crear un vector fila:
>> x = [4 8 9]
x=
4

Para trabajar con los elementos individuales del vector se usa el nombre del
vector con un ndice de la siguiente manera
X(1) es el primer elemento en este caso 4
X(2) es el segundo elemento en este caso 8
X(3) es el tercer elemento en este caso 9
Para crear un vector columna:
>> y = [8; 12; 30]
y=
8
12
30

45

13.1.- Creacin de un Vector usando un valor inicial, valor final y el


incremento
Variable = [vi: incremento: vf]
Ejemplos:
>> a = [1:2:15]
a=
1

11

13

15

>> b = [1:0.1:2]
b=
1.0000
2.0000

1.1000

1.2000

1.3000

1.4000

1.5000

1.6000

1.7000

1.8000

1.9000

13.2.- Creacin del vector Indicando el nmero de elementos y el valor


inicial y final
Variable = linspace(vi, vf, num_elementos)
Ejemplo:
>> x=linspace(0,10,5)
x=
0

2.5000

5.0000

7.5000 10.0000

13.3.- Creacin de arreglos bidimensionales (matrices)


Nombre_variable = [ elementos de la 1a fila; elementos de la 2a fila; elementos
de la 3a firla; ; elementos de la ltima fila ]

Se pone un punto y coma despus


de cada lnea

Se pulsa la tecla Intro despus de


Cada lnea

46

Se visualizan los elementos

Se definen los elementos de la


matriz a partir de distintas
expresiones matemticas

Para trabajar con los elementos individuales de una matriz se usa lo siguiente
Nombre_matriz(ndice_fila,ndice_columna)
En la matriz del ejemplo anterior:
B(1,1) es igual a 11
B(1,2) es igual a 12
B(1,3) es igual a 13
B(2,1) es igual a 26
B(2,2) es igual a 22
B(2,3) es igual a 24
B(3,1) es igual a 31
B(3,2) es igual a 32
B(3,3) es igual a 33
13.3.1 Comandos zeros, ones y eye
Sintaxis:
zeros(m,n)
ones(m,n)
eye(n)

Crea una matriz de m filas y n columnas,


elementos ceros.
Crea una matriz de m filas y n columnas,
elementos unos.
Crea una matriz de n filas y n columnas,
elementos de la diagonal sonu unos y el
resto de elementos ceros. (Matriz identidad)

47

13.4.- Operador de transposicin


El operador de transposicin, cuando se aplica a un vector, transforma la fila en
columna y viceversa. Cuando se aplica a una matriz, ste transforma las filas
en columnas y viceversa. Ejemplo:
>> VF= [5 7 9]
VF =
5 7 9
>> VC=VF'
VC =
5
7
9

Define un vector columna VC


A partir de la transpuesta de VF

>> MA= [1 2 3 4; 5 6 7 8; 9 10 11 12]


MA =
1 2 3 4
5 6 7 8
9 10 11 12
>> MB=MA'
MB =
1
2
3
4

5
6
7
8

Define un vector fila VF

9
10
11
12

Define una matriz MA con 3 filas


Y 4 columnas.

Define una matriz MB con 4 filas


Y 3 columnas. A partir de la
transpuesta de la matriz MA

>>

48

13.5.- Manipulacin de Arreglos


Los elementos dentro de un arreglo (vector o matriz) pueden ser manipulados
individualmente o en grupo. Esto es especialmente til cuando se necesita
redefinir slo algunos de los elementos para ser utilizados en clculos
especficos, o cuando un subgrupo de elementos se utiliza para definir una
variable.
13.5.1.- Vectores
>> V=1:3:19
V=
1 4 7

Define un vector V
10

13

16

19

>> V(5)
ans =

Visualiza el quinto elemento

13
>> V (1) =2
V=
2

Asigna un nuevo valor al primer elemento


7

10

13

16

19

>> V (5)^V(1)+sqrt(V(6))
ans =

Utilizacin de los elementos del vector en


Operaciones matemticas

173
>>
13.5.2.- Matrices
>> M=[3:6;linspace(10,40,4);15:-1:12]
M=
3 4 5 6
10 20 30 40
15 14 13 12
>> M(2,3)=25
M=
3 4 5 6
10 20 25 40
15 14 13 12
>> M(2,4)-M(3,1)
ans =

Crea una matriz 3x4

Asigna un nuevo valor al elemento (2,3)

Utilizacin de los elementos de la matriz


en operaciones matemticas

25
>>

49

13.6.- Utilizacin de los dos puntos (:) en la manipulacin de arreglos


Los dos puntos se utilizan para acceder a un rango de elementos dentro de un
vector o una matriz.
Para vectores:
VC(:)

se refiere a todos los elementos del vector VC

VC(m:n)

se refiere a los elementos comprendidos entre las posiciones m y


n del vector VC.

Para matrices:
M(:,n)

se refiere a los elementos de la columna n de la matriz M

M(n,:)

se refiere a los elementos de la fila n de la matriz M

M(:,n)

se refiere a los elementos de la columna n de la matriz M

M(:,m:n)

se refiere a los elementos entre las columnas m y n de la matriz M

M(m:n,:)

se refiere a los elementos entre las filas m y n de la matriz M

M(m:n,p:q)

se refiere a los elementos de la fila m a la n, y a los de la columna


p a la q de la matriz M

Ejemplos:
>> VC=10:10:90
VC =
10 20 30 40
>> NV=VC(3:7)
NV =
30 40 50 60

Se crea el vector VC
50

60

70

80

90
Se crea un vector NV a partir de los elementos
de las posiciones 3 a 7 del vector VC

70

>> MA=[1:2:11;2:2:12;3:3:18;4:4:24;5:5:30]
Se define una matriz MA con 5 filas y 6
MA =
columnas
1 3 5 7 9 11
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
>> A=MA(4,:)
A=
4 8 12

16

20

24

Se define un vector fila A a partir de los


elemento de la fila 4 de la matriz MA

50

>> B=MA(:,3)
B=
5
6
9
12
15

Se define un vector columna B a partir


de los elementos de la columna 3 de la
matriz MA

>> C=MA(2:4,:)
C=
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24

Se define una matriz C a partir de los


elementos de las filas 2 a 4 de la
matriz MA

>> D=MA(3:5,4:6)
D=
12 15 18
16 20 24
20 25 30

Se define una matriz D a partir de los


elementos de las filas 3 a 5, columnas
4 a 6 de la matriz MA

13.7.- Adicin de nuevos elementos a variables ya creadas


Adicin de elementos a un vector:
>> V=5:8
V=
5

Define un vector V con 4 elementos


7

>> V(5:10)=15:3:30
V=
5

Aade 6 elementos, empezando en la quinta posicin


15

18

21

>> W=[10 11 12]


W=
10

11

11

27

30

Define un vector W con 3 elementos

12

>> W(7)=13
W=
10

24

Asigna un nuevo valor al sptimo elemento


12

13

>> x(3)=14
x=
0

14

51

Adicin de elementos a una matriz:


>> M=[11 12 13;14 15 16]
M=
11
14

12
15

Define una matriz M de 2x3

13
16

>> M(3,:)=[1:3]
M=
11
14
1

Aade el vector 1 2 3 a la tercera fila de M

12 13
15 16
2 3

>> N=eye(3)
N=
1
0
0

0
1
0

Define una matriz N de 3x3

0
0
1
Crea una nueva matriz L resultado de
aadir la matriz M y la matriz N. El nmero
de filas de M y N deben coincidir.

>> L=[M N]
L=
11
14
1

12
15
2

13
16
3

1
0
0

0
1
0

0
0
1

13.8.- Eliminacin de elementos


>> X=[21 22 23 24 25 26 27]
X=
21

22

23

24

25

26

Define un vector X de 7 elementos


27
Elimina el cuarto elemento

>> X(4)=[ ]
X=
21

22

23

25

>> X(2:4)=[ ]
X=
21

26

26

27

El vector tiene ahora 6 elementos

Elimina los elementos de las posiciones 2 a la 4.


El vector tiene ahora 3 elementos

27

>> Y=[31 32 33 34;35 36 37 38;39 40 41 42]


Y=
31

32

33

Define una matriz de 3x4

34

52

35
39

36
40

37
41

>> Y(:,2:3)=[ ]
Y=
31
35
39

38
42
Elimina los elementos de las columnas 2 y 3.

34
38
42

13.9.- Funciones para la manipulacin de arreglos


Matlab posee una amplia variedad de funciones para manipular arreglos.

Funcin
length(X)

Descripcin
Devuelve el numero de elementos
de X

size(X)

Devuelve un vector fila [m,n]


donde m y n representan el tamao
mxn del arreglo X

Ejemplo
>> X=[1 2 3 4 5 6];
>> length(X)
ans =
6
>> X=[4 6 8;7 9 11]
X=
4
7

6
9

8
11

>> size(X)
ans =

reshape(X,m,n) Reordena una matriz X, que tiene r


filas y s columnas, a una matriz de
m filas y n columnas. El valor de rxs
debe ser igual al de mxn

2 3
>> X=[11 12 13;14 15 16]
X=
11
14

12
15

13
16

>> Y=reshape(X,3,2)
Y=

diag(x)

diag(X)

Cuando x es un vector, este


comando crea una matriz cuadrada
con los elementos de x en la diagonal

Cuando X es una matriz, este


comando crea un vector a partir de
los elementos de la diagonal X

11 15
14 13
12 16
>> x=[9 7 5];
>> diag(x)
ans =
9 0 0
0 7 0
0 0 5
>> X=[15 14 13;9 8 7;4 3 2]
X=
15

14

13

53

9
4

8
3

7
2

>> diag(X)
ans =
15
8
2

Existen muchas ms funciones, de las cuales se puede obtener informacin


detallada utilizando la Ventana de Ayuda de Matlab.
13.10.- Cadena de caracteres y variables de tipo cadena
Una cadena es simplemente un arreglo de caracteres. Para crear una cadena
solo es necesario teclear los caracteres que la forman entre comillas simples.
>> c='Hola que tal...'
c=
Hola que tal...
>> C='My name is Walter Moreno'
C=
My name is Walter Moreno
>> C(5)
ans =
a
>> C(16)
ans =
e
>> C(12:17)='Miguel'
C=

Utilizacin de los dos puntos para asignar nuevos


Caracteres a los elementos 12 al 17 del vector C

My name is Miguel Moreno


La funcin char admite como parmetros de entrada las cadenas separadas
por coma, segn el siguiente formato:
Nombre_variable = char(cadena1, cadena 2, cadena 3,, cadena N)
Ejemplo
>> Info=char('Nombre del Profesor:','Walter Moreno','Curso:','MATLAB','UNT')

54

Info =
Nombre del Profesor:
Walter Moreno
Curso:
MATLAB
UNT
14.- Operaciones matemticas con arreglos
14.1.- Suma y resta
>> vect1=[7 9 3]; vect2=[5 6 4];
>> vect3=vect1+vect2
vect3 =
12

15

>> A=[10 11 12;19 18 17]


A=
10
19

11
18

Se define dos vectores.


Se define un vector vect3 que es igual
a la suma vect1 + vect2

Se define dos matrices A y B de 2x3

12
17

>> B=[21 22 23;16 17 18]


B=
21
16

22
17

23
18

>> A-B
ans =

Se realiza la resta de matrices A-B

-11 -11 -11


3 1 -1
>> C=A+B
C=
31
35

33
35

Se define una matriz C que es igual


al resultado de la suma A + B
35
35

>> C-5
ans =
26
30

Se resta el nmero 5 de la matriz C

28
30

30
30

14.2.- Multiplicacin de arreglos


55

Si M y N son dos matrices, la operacin M*N se ejecuta solamente si el nmero


de columnas de la matriz M es igual al nmero de filas de la matriz N. El
resultado es una matriz que tiene el mismo nmero de filas que M y el mismo
nmero de columnas que N.
Ejemplo:
>> M=[6 5 4;7 8 9;3 2 1]
M=
6 5 4
7 8 9
3 2 1

Se define un matriz M de 3x3

>> N=[1 2;5 6;7 9]


N=
1 2
5 6
7 9

Se define una matriz N de 3x2

>> P=M*N
P=
59 78
110 143
20 27
>> Q=N*M
??? Error using ==> *
Inner matrix dimensions must agree.

>> R=[5 6;3 2]


R=
5 6
3 2

Se multiplica la matriz M por la matriz N


y se asigna el resultado a la variable P

Se intenta multiplicar la matriz N por la matriz M


la operacin retorna un error, ya que el nmero
de columnas de N es 2, y el nmero de filas de M
es 3
Se definen dos matrices, R y S, de 2x2

>> S=[3 3;2 2]


S=
3 3
2 2
>> R*S
ans =
27 27
13 13
>> S*R
ans =
24 24
16 16

Se multiplica R*S

Se multiplica S*R
Como puede comprobarse, el resultado de
multiplicar R*S no es el mismo que multiplicar
S*R

56

El producto de la multiplicacin de dos matrices cuadradas (deben ser del


mismo tamao) es tambin una matriz cuadrada del mismo tamao. Sin
embargo, la multiplicacin de matrices no es conmutativa.
Dos vectores pueden multiplicarse slo si ambos tienen el mismo nmero de
elementos. Es necesario que uno sea un vector fila y el otro un vector columna.
La multiplicacin de un vector fila y un vector columna da como resultado una
matriz de 1x1, es decir, un escalar. Esto es lo que se denomina producto
escalar de dos vectores.
Matlab posee la funcin dot(a,b), que calcula el producto escalar de dos
vectores.
Ejemplo:
>> X=[5 8 9]
X=
5

Se define un vector fila X de tres elementos

>> Y=[1;2;3]
Y=

Se define un vector columna Y de tres elementos

1
2
3
>> X*Y

Se multiplica X por Y. El resultado es un escalar

ans =
48
>> Y*X
ans =
5
10
15

Se multiplica Y por X. El resultado es una matriz


de 3x3.
8 9
16 18
24 27

La regla de multiplicacin de matrices permite crear y resolver sistema de


ecuaciones lineales. Por ejemplo:

A11
Si tenemos las matrices A A21
A31

A12
A22
A32

A13
B11

A23 y B B21
B31
A33

B12
B22
B32

La matriz que se obtiene de la operacin A*B tienen dimensin 3x2 y sus


elementos son:

57

( A11 B11 A12 B21 A13 B31 ) ( A11B12 A12 B22 A13 B32 )
( A B A B A B ) ( A B A B A B )
22 21
23 31
21 12
22 22
23 32
21 11
( A31 B11 A32 B21 A33 B31 ) ( A31B12 A32 B22 A33 B32 )
Ahora si tenemos el siguiente sistema de ecuaciones con tres incgnitas:

A11 x1 A12 x2 A13 x3 B1


A21 x1 A22 x2 A23 x3 B2
A31 x1 A32 x2 A33 x3 B3
Se puede escribir como matrices de la siguiente forma:

A11
A
21
A31

A12
A22
A32

A13
A23
A33

x1 B1
x B
2 2
x3 B3

Y en notacin matricial:

A11
AX B donde A A21
A31

A12
A22
A32

A13
x1
B1

A23 , X x2 y B B2
x3
B3
A33

14.3.- Divisin de arreglos


La operacin de divisin se puede explicar con al ayuda de otros dos
conceptos relacionados con las operaciones de matrices: la matriz identidad y
la operacin de inversin o matriz inversa.
Matriz identidad:
Es una matriz cuadrada en donde los elementos de la diagonal son unos y el
resto de los elementos son ceros. La matriz identidad multiplicada por otra
matriz (o vector) da como resultado la misma matriz original. Ejemplo:
1 0 0
1 0 0 5 5
4 7 9
4 7 9


12 8 23 0 1 0 12 8 23 o 0 1 0 7 7


0 0 1
0 0 1 9 9
3 9 1 1 0 0 3 9 1
o 6 8 4 0 1 0 6 8 4
2 7 5 0 0 1 2 7 5

Si una matriz A es cuadrada, sta puede ser multiplicada por la matriz identidad
I de derecha a izquierda o de izquierda a derecha:
58

AI = IA = A
Inversa de una matriz:
Se dice que una matriz B es la inversa de una matriz A si al multiplicar ambas
matrices el producto es la matriz identidad. Ambas matrices deben ser
cuadradas, y el orden de la multiplicacin puede ser AB o BA.
BA = AB = I
Obviamente B es la inversa de A, y A es la inversa de B. Ejemplo:
>> M=[2 1 4;4 1 8;2 -1 3]
M=
2
4
2

1
1
-1

Se crea la matriz M

4
8
3

>> N=inv(M)
N=

Se utiliza la funcin inv para calcular


la inversa de M. El resultado se asigna a N

5.5000 -3.5000 2.0000


2.0000 -1.0000
0
-3.0000 2.0000 -1.0000
>> M*N
ans =
1
0
0

0
1
0

El resultado de multiplicar M por N nos da la


la matriz identidad
0
0
1

>> M*M^-1
ans =
1
0
0

0
1
0

Se calcula el inverso de M, elevando a esta


matriz a -1. Adems se multiplica por M, lo
que nos da la matriz identidad
0
0
1

Determinantes:
El determinante esta asociada a las matrices cuadradas. Un determinante es
una funcin que asocia un nmero, llamado determinante de la matriz, a cada
matriz cuadrada M. El determinante se denota comnmente por det (M) o |M|.
El determinante se calcula a partir de una regla especfica. Ejemplo:

59

m12
m
6 2
M 11
m11m22 m12 m21 , por ejemplo,

6.9 2.4 46
4 9
m21 m22
El determinante de una matriz cuadrada se puede determinar con el comando
det.
Divisin de arreglos:
Matlab posee dos tipos de divisin de arreglos: la divisin derecha y la divisin
izquierda.
Divisin izquierda \:
Se emplea para resolver ecuaciones matriciales AX=B. En esta ecuacin X y B
son vectores columna. X=A\B
Divisin derecha /:
Se emplea para resolver ecuaciones matriciales XC=D. En esta ecuacin X y D
son vectores fila. X=D/C
Ejemplo:
2 x 4 y 6 z 18
4 x 5 y 6 z 24
3x y 2 z 4

2 4 6 x 18
4 5 6 y 24


3 1 2 z 4
>> A=[2 4 6;4 5 6;3 1 -2];

2 4 3
z 4 5 1 18 24 4
6 6 2

Forma AX=B

>> B=[18;24;4];
>> X=A\B
X=
4.0000
-2.0000
3.0000

Resolucin X=A\B (Divisin izquierda)

>> Xb=inv(A)*B
Xb =

Resolucin X=A-1B (utilizando inversa de A)

4.0000
-2.0000
3.0000
>> C=[2 4 3;4 5 1;6 6 -2];

Forma XC=D

60

>> D=[18 24 4];


>> Xc=D/C
Xc =

Resolucin X=D/C (Divisin derecha)

4.0000 -2.0000

3.0000
Resolucin X=DC-1 (utilizando inversa de C)

>> Xd=D*inv(C)
Xd =
4.0000 -2.0000

3.0000

14.4.- Operaciones elemento a elemento


Las operaciones elemento a elemento se pueden realizar nicamente si los
arreglos tienen el mismo tamao. Para que las operaciones de multiplicacin,
exponenciacin y divisin de arreglos se realicen elemento a elemento, en
Matlab hay que teclear un punto delante del operador aritmtico
correspondiente.
Smbolo
.*
.^
./
.\

Descripcin
Multiplicacin
Exponenciacin
Divisin derecha
Divisin izquierda

Ejemplos:
>> M=[1 2 3;4 5 6]
M=
1
4

2
5

3
6

>> N=[7 8 9;2 4 6]


N=
7
2

8
4

16
20

>> P=M./N
P=

Define un arreglo N de 2x3

9
6

>> M.*N
ans =
7
8

Define un arreglo M de 2x3

Multiplicacin elemento a elemento de MxN

27
36
Divisin elemento a elemento de M entre N
El resultado se le asigna a la variable P
61

0.1429
2.0000

0.2500
1.2500

0.3333
1.0000

>> M.^2
ans =
1
16

Exponenciacin elemento a elemento de M


El resultado es un arreglo en el cada elemento
es el correspondiente de M elevado a 2.

4 9
25 36

>> M*N
M y N no pueden ser multiplicados, ya que el
??? Error using ==> *
nmero de columnas de M no es igual al nmero
Inner matrix dimensions must agree.
de filas de N
Las operaciones elemento a elemento son muy tiles para calcular el valor de
una funcin pasndoles distintos valores de sus argumentos. Ejemplo:

>> x=[1:5]
x=
1

Se crea un vector con 5 elementos

>> y=x.^2-4*x

Se obtiene el vector y a partir del vector x

y=

operando elemento a elemento

-3

-4

-3

>> z=[1:2:15]
z=
1

Se crea un vector con 8 elementos

11

13

15

>> Y=(z.^3+5*z)./(4*z.^2-10)

Se obtiene el vector y a partir del vector z

Y=
-1.0000

1.6154

1.6667

2.0323

2.4650

2.9241

3.3964

3.8764

14.5.- Funciones predefinidas para trabajar con arreglos


Matlab posee un gran nmero de funciones predefinidas para trabajar con
arreglos. Se listan algunas de estas funciones.
Funcin
mean(A)

Descripcin
Si A es un vector, retorna el valor
medio de los elementos

Ejemplo
>> A=[4 6 8 7];
>> mean(A)
ans =
6.2500

62

C=max(A)

Si A es un vector, C contendr el
Elemento mayor de A. Si A es una
Matriz, C contendr un vector fila
Que representa el elemento mayor
De cada columna
[d,n]=max(A) Si A es un vector, d contendr el
Elemento mayor de A, y n la posicin
Del elemento (la posicin de la primera
Aparicin, si el mayor valor se repite
Varias veces en el vector)
min(A)
Lo mismo que max(A), pero para el
Elemento menor
[d,n]=min(A)

Lo mismo que [d,n]= max(A), pero


para el elemento menor

sum(A)

Si A es un vector, calcula la suma de


Sus elementos

sort(A)

Si A es un vector, devuelve el mismo


Vector ordenado en orden ascendente

median(A)

Si A es un vector, devuelve el valor


de la mediana de los elementos del
vector.

std(A)

Si A es un vector, devuelve la
desviacin estndar de los elementos
del vector.

det(A)

Devuelve el valor del determinante de


la matriz cuadrada A

dot(a,b)

Calcula el producto escalar de dos


vectores a y b. Los vectores pueden
ser de tipo fila o columna.

cross(a,b)

Calcula el producto cruzado de dos


vectores a y b, (axb). Ambos vectores
deben tener 3 elementos

inv(A)

Devuelve la inversa de una matriz


cuadrada A

>> A=[4 8 1 6 3 21 13 58];


>> C=max(A)
C=
58

>> A=[4 8 1 6 3 21 13 58];


>> [d,n]=max(A)
d=
58
n=
8
>> A=[4 6 8 7];
>> min(A)
ans =
4
>> A=[4 6 8 7];
>> [d,n]=min(A)
d=
4
n=
1
>> A=[4 6 8 7];
>> sum(A)
ans =
25
>> A=[4 6 8 7];
>> sort(A)
ans =
4 6 7 8
>> A=[4 6 8 7];
>> median(A)
ans =
6.5000
>> A=[4 6 8 7];
>> std(A)
ans =
1.7078
>> A=[4 6 ;8 7];
>> det(A)
ans =
-20
>> a=[4 6 8 7];
>> b=[1 2 3 4];
>> dot(a,b)
ans =
68
>> a=[4 6 8];
>> b=[1 2 3];
>> cross(a,b)
ans =
2 -4 2
>> A=[4 6 8;7 2 1;1 1 1];
>> inv(A)
ans =
0.1250 0.2500 -1.2500
-0.7500 -0.5000 6.5000
0.6250 0.2500 -4.2500

63

14.6.- Nmeros aleatorios


Matlab posee dos comandos: rand y randn, que pueden ser utilizados para
asignar nmeros aleatorios a variables.
14.6.1.- El comando rand:
Este comando genera nmeros aleatorios distribuidos uniformemente entre 0 y
1. Se puede utilizar para asignar nmeros a escalares, vectores o matrices.
Ejemplo:
Comando
rand

Descripcin
Genera un nmero aleatorio entre
0y1

rand(1,n)

Genera un vector fila de n nmeros


aleatorios entre 0 y 1

rand(n)

rand(m,n)

Ejemplo

Genera una matriz n x n de nmeros


aleatorios entre 0 y 1

Genera una matriz m x n de nmeros


aleatorios entre 0 y 1

>> rand
ans =
0.9501
>> a=rand(1,4)
a=
0.2311

0.6068

0.4860

0.8913

>> b=rand(3)
b=
0.7621 0.8214
0.4565 0.4447
0.0185 0.6154
>> c=rand(2,4)
c=

0.7919
0.9218
0.7382

0.1763 0.9355 0.4103


0.4057 0.9169 0.8936

0.0579
0.3529

randperm(n) Genera un vector fila con n elementos >> randperm(5)


Que son permutaciones aleatorias de ans =
2 3 5 4
Enteros entre 1 y n

Para obtener nmeros aleatorios que se distribuyan en un intervalo (a, b) slo


es necesario multiplicar el resultado de rand por (b - a), y aadir el producto a
a.
(b a)*rand + a
Ejemplo
Crear un vector de 8 elementos con nmeros aleatorios entre -2 y 10.
>> v=12*rand(1,8)-2
v=
9.2256

9.0029

2.9232

8.7238 -1.3053

2.2344

7.7580 -1.8817

Para nmeros enteros aleatorios se utiliza la funcin de redondeo.


Ejemplo
Crear una matriz de 3 x 4 con nmeros aleatorios enteros en un intervalo de 50
a 90
>> M=round(40*rand(3,4)+50)
M=

64

56
58
58

74
61
58

51
80
68

87
69
67

14.6.2.- El comando randn:


Este comando genera nmeros aleatorios con distribucin normal, es decir, con
media 0 y desviacin tpica o estndar 1. Este comando se puede utilizar para
generar un solo nmero, as como un vector o una matriz de nmeros de este
tipo.
Ejemplo
>> a=randn
a=
-0.4326
>> b=randn(1,5)
b=
-1.6656

0.1253

0.2877 -1.1465

1.1909

>> c=randn(3,2)
c=
1.1892 0.1746
-0.0376 -0.1867
0.3273 0.7258
La media y la desviacin estndar de varios nmeros se puede cambiar
realizando operaciones matemticas. Ejemplo, generar un vector de 15
nmeros enteros con media 50 y desviacin estndar 5.
>> V=round(5*randn(1,15)+50)
V=
47

61

49

51

55

50

50

46

51

43

54

58

47

54

56

14.7.- Programas con vectores


1.- Hacer un programa para ingresar n valores reales en un arreglo y los
muestre en la pantalla, adems reportar el mayor, el menor y el promedio.
n=input('Numero de elementos del arreglo : ');
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');

65

end
fprintf('Vector ingresado :\n');
for i=1:n
fprintf('%.2f\n',x(i));
end
s=0;
may=x(1);
men=x(1);
for i=1:n
s=s+x(i);
if x(i)>may
may=x(i);
else
if x(i)<men
men=x(i);
end
end
end
p=s/n;
fprintf('El mayor es : %.2f\n',may);
fprintf('El menor es : %.2f\n',men);
fprintf('El promedio es : %.2f\n',p);
2.- Programa para ingresar n valores reales en un arreglo y calcular la
desviacin estndar.
n=input('Numero de elementos del arreglo : ');
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');
end
s=0;
for i=1:n
s=s+x(i);
end
p=s/n;
sc=0;
for i=1:n
sc=sc+(x(i)-p)^2;
end
ds=sqrt(sc/(n-1));
fprintf('La desviacion estandar es : %.5f\n',ds);
3.- Programa para ingresar n valores reales en un arreglo y luego invierta el
arreglo.
n=input('Numero de elementos del arreglo : ');
for i=1:n
66

fprintf(' x(%d) : ',i);


x(i)=input('');
end
j=n;
mitad=fix(n/2);
for i=1:mitad
temp=x(i);
x(i)=x(j);
x(j)=temp;
j=j-1;
end
fprintf('Vector final :\n');
for i=1:n
fprintf('%.2f\n',x(i));
end
4.- Programa para ingresar 2 vectores de n elementos reales cada uno y
reportar el producto escalar de ellos.
n=input('Numero de elementos de los arreglos : ');
disp('Primer arreglo')
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');
end
disp('Segundo arreglo')
for i=1:n
fprintf(' y(%d) : ',i);
y(i)=input('');
end
p=0;
for i=1:n
p=p+x(i)*y(i);
end
fprintf('El producto escalar es: %.3f\n',p);
5.- Programa para ingresar n elementos en un arreglo y luego reportarlo en la
pantalla. Adems ingresar un nmero y verificar si este se encuentra en el
arreglo, si se encuentra reportar la posicin donde se encontr y si no se
encontr reportar "numero no se encuentra".
n=input('Numero de elementos del arreglo : ');
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');
end
fprintf('Vector ingresado :\n');
for i=1:n
fprintf('%.2f\n',x(i));
end
67

num=input('Ingrese el numero a buscar : ');


pos=0;
for i=1:n
if x(i)==num
pos=i;
break
end
end
if pos>0
fprintf('El numero se encuentra en la posicion: %d\n',pos);
else
fprintf('El numero no se encuentra');
end
6.- Programa para ingresar n elementos en un arreglo y luego reportarlo en la
pantalla. Adems ingresar un nmero y verificar si este se encuentra en el
arreglo, si se encuentra cambiarlo por otro dato si no se encuentra reportar
"dato no se encuentra"
n=input('Numero de elementos del arreglo : ');
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');
end
fprintf('Vector ingresado :\n');
for i=1:n
fprintf('%.2f\n',x(i));
end
num=input('Ingrese el numero a buscar : ');
pos=0;
for i=1:n
if x(i)==num
pos=i;
break
end
end
if pos>0
fprintf('El numero se encuentra en la posicion: %d\n',pos);
x(pos)=input('Ingrese nuevo dato');
fprintf('Nuevo arreglo\n');
for i=1:n
fprintf('%.2f\n',x(i));
end
else
fprintf('El numero no se encuentra');
end
7.- Programa para ingresar n elementos en un arreglo y luego reportarlo en la
pantalla. Adems ingresar un numero y verificar si este se encuentra en el

68

arreglo, si se encuentra eliminarlo si no se encuentra reportar dato no se


encuentra.
n=input('Numero de elementos del arreglo : ');
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');
end
fprintf('Vector ingresado :\n');
for i=1:n
fprintf('%.2f\n',x(i));
end
num=input('Ingrese el numero a buscar : ');
pos=0;
for i=1:n
if x(i)==num
pos=i;
break
end
end
if pos>0
fprintf('El numero se encuentra en la posicion: %d\n',pos);
for i=pos:n-1
x(i)=x(i+1);
end
n=n-1;
fprintf('Nuevo Vector :\n');
for i=1:n
fprintf('%.2f\t',x(i));
end
else
fprintf('El numero no se encuentra');
end
8.- Programa para ingresar n elementos en un arreglo y luego reportarlo en la
pantalla. Adems ingresar un nmero y la posicin donde desea insertarlo e
insertarlo en el arreglo, reportar el arreglo modificado.
n=input('Numero de elementos del arreglo : ');
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');
end
fprintf('Vector ingresado :\n');
for i=1:n
fprintf('%.2f\t',x(i));
end
num=input('\nIngrese un numero : ');
pos=input('Ingrese posicion : ');
for i=n:-1:pos

69

x(i+1)=x(i);
end
x(pos)=num;
n=n+1;
fprintf('Nuevo Vector :\n');
for i=1:n
fprintf('%.2f\t',x(i));
end
9.- Programa para ingresar n elementos en un arreglo y luego reportarlo en la
pantalla. Adems reportarlo ordenado ascendentemente.
n=input('Numero de elementos del arreglo : ');
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');
end
fprintf('Vector ingresado :\n');
for i=1:n
fprintf('%.2f\t',x(i));
end
for i=1:n-1
for j=i+1:n
if x(i)>x(j)
temp=x(i);
x(i)=x(j);
x(j)=temp;
end
end
end
fprintf('\nVector ordenado de menor a mayor :\n');
for i=1:n
fprintf('%.2f\t',x(i));
end
10.- Dada una coleccin de puntos (xi, yi), i=1,2,...,n, existe una recta L:
y=Mx+B para la cual es mnima la suma de los cuadrados de las distancias de
los puntos a la recta. As, L constituye la recta mas prxima-con respecto a
esta forma de calculo-a los puntos dados, y puede ser utilizada para estimar
valores aproximados (x, y). Escriba un programa que permita hallar la recta de
regresin asociada a una coleccin de datos.
Usar las siguientes formulas: M=(N*SXY - SX*SY)/(N*SXX - SX*SX)
B=(SXX*SY - SXY*SX)/(N*SXX - SX*SX)
en donde:
SX = X1 + X2 + ...+ Xn,
SY = Y1 + Y2 + ...+ Yn,
SXX = X1^2 + X2^2 + ...+ Xn^2,
SXY = X1*Y1 + X2*Y2 + ...+ Xn*Yn.

70

clear all
n=input('Numero de puntos : ');
for i=1:n
fprintf(' x(%d) : ',i);
x(i)=input('');
fprintf(' y(%d) : ',i);
y(i)=input('');
end
sx=0;sy=0;sxy=0;sxx=0;
for i=1:n
sx=sx+x(i);
sy=sy+y(i);
sxx=sxx+x(i)*x(i);
sxy=sxy+x(i)*y(i);
end
M=(n*sxy - sx*sy)/(n*sxx - sx*sx);
B=(sxx*sy - sxy*sx)/(n*sxx - sx*sx);
fprintf('El valor de M es: %.3f\n',M);
fprintf('El valor de B es: %.3f\n',B);
A=input('Ingrese la abcisa : ');
O=M*A+B;
fprintf('El valor de la ordena es: %.3f\n',O);
Prctica N 3 Ejercicios de Vectores
1.- Programa para ingresar n valores reales en un vector y luego invierta el
vector.
2.- Programa para ingresar 2 vectores de n elementos reales cada uno y
reportar el producto escalar de ellos.
3.- Programa para ingresar n elementos en un vector y al final quede sin
elementos repetidos
4.- Programa para ingresar n elementos en un vector y luego ingresar un
elemento, si este se encuentra en el vector eliminarlo todas las veces que se
encuentra.
5.- Ingresar n nmeros en un vector y mostrar luego, primero la lista de los
nmeros pares que fueron ingresados y luego la lista de los nmeros negativos
6.- Ingresar n enteros en un vector A y otros n enteros en un vector B y
mostrar la lista de enteros del vector C. Donde cada C[i]=A[i]+B[i]
7.- Sea un vector de tipo real (de 15 elementos), encuentre el promedio de los
hmeros enteros ingresados en el vector.
8.- Sea un vector de tipo real de n elementos. Mostrar la lista
menores al promedio.

de enteros

71

9.- Lea dos vectores A y B y luego diga que elementos del vector A no se
encuentran en B.
10.- Ingrese un nmero entero y convirtalo a binario
Sugerencia: guarde cada residuo obtenido en una posicin del vector.
11.- Ingresar N notas en un vector y determinar el porcentaje de aprobados y
el porcentaje de desaprobados
12.- Ingresar n elementos en un vector y luego ingresar un elemento y reportar
cuantas veces aparece ese elemento en el vector.
13.- Ingresar dos vectores y reportar si son iguales.
14.- Ingresar 2 vectores de n y m elementos y calcular la unin, interseccin y
la diferencia del primero con el segundo.
15.- Se tienen dos vectores ordenados y se desea unirlos en un tercero pero
manteniendo los datos ordenados.
16.- La moda de un conjunto de datos es el elemento que mas se repite.
Encuentre la moda de elementos almacenados en un vector.
17.- Calcule la mediana de un conjunto de datos. La mediana de un vector
ordenado es el elemento central si el nmero de trminos es impar. Y la
semisuma de los trminos centrales si el nmero de trminos es par.
18.- Calcule la media armnica de un conjunto de datos. La media armnica se
define como: el Inverso del promedio de los inversos.
19.- Calcule el promedio ponderado de un conjunto de datos. Se deben
ingresar las cantidades con sus respectivos pesos.
20.- Ingrese los nombres y las notas de n alumnos y reportar una lista en orden
alfabtico y otra lista en orden de merito.
21.- Ingrese los nombres y las tallas de los jugadores de un equipo de ftbol y
determine la talla promedio y el nombre del jugador ms alto.
22.- En un concurso de belleza se tienen 10 candidatas, cada una de las cuales
es evaluada en tres criterios: belleza, personalidad y armona fsica. Se
necesita ingresar los nombres y tres puntajes de cada candidata y determinar:
- El nombre de la ganadora de "mis personalidad"
- El nombre de la ganadora de "el rostro ms bello"
- El nombre de la ganadora del concurso
23.- Escribir un programa que lea:
Nombre, clase(N= nacional I= importado) y precio de n
productos de librera y los muestre en la pantalla, luego debe
hacer los siguientes reportes:

72

a) Nombre y precios de los productos nacionales.


b) Nombre y precios de los productos importados.
c) Lista de productos con precio mayor o igual que 100
d) Lista de productos nacionales con precio <=200
e) Cuantos productos nacionales y cuantos productos importados
se ingresaron.
f) La suma de los precios de los productos nacionales.
24.- Escribir un programa que lea 2 listas de nmeros enteros L1y L2, n y m
elementos respectivamente y los imprima en pantalla.
El programa debe permitir:
- Unir la lista 2 al final de la lista 1.
- Insertar la lista 2 en la lista 1 en una posicin determinada.
Al final debe imprimir la lista resultante.

14.8.- Programas con Matrices


M1.- Hacer un programa para generar una matriz de f filas y c columnas y
calcular el mayor, el menor y el promedio.
clear all
f=input('Numero de filas de la matriz : ');
c=input('Numero de columnas de la matriz : ');
for i=1:f
for j=1:c
fprintf(' M(%d,%d) : ',i,j);
M(i,j)=input('');
end
end
mayor=M(1,1);
menor=M(1,1);
s=0;
for i=1:f
for j=1:c
s=s+M(i,j);
if M(i,j)>mayor
mayor=M(i,j);
else
if M(i,j)<menor
menor=M(i,j);
end
end
end
end
prom=s/(f*c);
fprintf('El mayor es : %.2f\n',mayor);
fprintf('El menor es : %.2f\n',menor);
fprintf('El promedio es %.2f\n',prom);

73

M2.- Ingresar una matiz de f filas y c columnas y calcular la suma de filas y la


suma de columnas
clear all
clc
f=input('Numero de filas de la matriz : ');
c=input('Numero de columnas de la matriz : ');
for i=1:f
for j=1:c
fprintf(' M(%d,%d) : ',i,j);
M(i,j)=input('');
end
end
M
for i=1:f
sf(i)=0;
for j=1:c
sf(i)=sf(i)+M(i,j);
end
end
for j=1:c
sc(j)=0;
for i=1:f
sc(j)=sc(j)+M(i,j);
end
end
for i=1:f
fprintf('La suma de la fila %d es : %.2f\n',i,sf(i));
end
for j=1:c
fprintf('La suma de la columna %d es : %.2f\n',j,sc(j));
end
M3.- Ingresar una matriz de f filas y c columnas y calcular su matriz
transpuesta.
clear all
f=input('Numero de filas de la matriz : ');
c=input('Numero de columnas de la matriz : ');
for i=1:f
for j=1:c
fprintf(' M(%d,%d) : ',i,j);
M(i,j)=input('');
end
end
for i=1:f
for j=1:c
T(j,i)=M(i,j);
end
end

74

disp('Matriz transpuesta');
T
M4.- Programa para ingresar dos matrices, una de f1 filas y c1 columnas y otra
de f2 filas y c2 columnas y reportar su suma y su producto si es que se pueden
realizar.
clear all
clc
f1=input('Numero de filas de la primera matriz : ');
c1=input('Numero de columnas de la primera matriz : ');
for i=1:f1
for j=1:c1
fprintf(' M(%d,%d) : ',i,j);
M(i,j)=input('');
end
end
f2=input('Numero de filas de la segunda matriz : ');
c2=input('Numero de columnas de la segunda matriz : ');
for i=1:f2
for j=1:c2
fprintf(' N(%d,%d) : ',i,j);
N(i,j)=input('');
end
end
if f1==f2 & c1==c2
for i=1:f1
for j=1:c1
S(i,j)=M(i,j)+N(i,j);
end
end
disp('La suma de las matrices es')
S
else
disp('No se pueden sumar')
end
if c1==f2
for i=1:f1
for j=1:c2
P(i,j)=0;
for k=1:c1
P(i,j)=P(i,j)+M(i,k)*N(k,j);
end
end
end
disp('El producto de las matrices es')
P
else
disp('No se pueden multiplicar')
end

75

Practica N 4 Ejercicios de Matrices


1.- Ingresar una matriz cuadrada de orden n y reportar si es simtrica. Recordar
que una matriz es simtrica si se cumple la condicin: a[i][j]=a[j][i]
2.- Programa para ingresar una matriz de f filas y c columnas, y que se haga lo
siguiente:
a) Ingresar un nmero de fila y eliminarla de la matriz.
b) Ingresar un nmero de columna y eliminarla de la matriz.
c) Ingresar un nmero de fila e insertar una fila en la matriz.
d) Ingresar un nmero de columna e insertar una columna en la matriz.
e) Intercambiar 2 filas de la Matriz. El nmero de las filas a intercambiar debe
ingresarse.
f) Intercambiar 2 columnas de la Matriz. El nmero de las columnas a
intercambiar debe ingresarse.
g) Ordenar las filas de una matriz
h) Ordenar las columnas de una matriz
3.- El curso de Computacin tiene n alumnos y se rinden 4 exmenes. Escribir
un programa que reporte lo siguiente:
a) El promedio de calificaciones de cada alumno.
b) El promedio de cada Examen
c) El alumno que obtuvo el mejor Promedio
d) El examen que tuvo el mayor promedio de calificacin.
4.- Hacer un programa para invertir las columnas de una matriz (Los elementos
de la primera columna se intercambian con los de la ultima, los de la segunda
con los de la penltima y as sucesivamente).
5.- Escribir un programa que genere un cuadrado mgico. Un cuadrado mgico
se representa por una matriz cuadrada de orden n, impar y contiene los
nmeros comprendidos entre 1 y n*n. En un cuadrado mgico la suma de
cualquiera de las filas, columnas y diagonales principales siempre es la misma.
El cuadrado mgico se genera aplicando el siguiente algoritmo:
a) El primer numero 1 se coloca en la celda central de la primera fila.
b) El siguiente nmero se coloca en la celda de la fila anterior y columna
posterior.
c) La fila anterior al primero es el ltimo. La columna posterior a la ltima es la
primera.
d) Si el nmero es un sucesor de un mltiplo de n, no aplique la regla 2.
Coloque el nmero en la celda de la misma columna de la fila posterior.
6.- Hacer un programa para que coloque un 1 en las diagonales principales de
una matriz cuadrada. El resto se debe completar con ceros.
7.- Hacer un programa que, al recibir los montos de ventas mensuales de cinco
departamentos de una fbrica proporcione la siguiente informacin
a) Las ventas mensuales de la fbrica incluido el monto anual.

76

b) El departamento que tuvo la mayor venta en el mes de Julio, incluyendo


el monto de la venta.
c) El mes en el que se obtuvieron las mayores y menores ventas del
departamento I, donde I se debe ingresar.
8.- Hacer un programa para invertir las filas de una matriz (Los elementos de la
primera fila se intercambian con los de la ultima, los de la segunda con los de la
penltima y as sucesivamente).
9.- Hacer un programa que al recibir una matriz cuadrada de orden impar.
Determine si la misma se pude considerar un cuadrado Mgico.(En un
cuadrado mgico la suma de cualquiera de las filas, columnas y diagonales
principales siempre es la misma).

10.- Hacer un programa que al recibir como dato una matriz , recorra esta
matriz en forma de espiral. Tal como se muestra en la figura:

11.- Hacer un programa que al recibir como dato una matriz recorra esta matriz
columna a columna tal como se muestra en la figura.

12.- Programa que ingresa el orden de una Matriz cuadrada y generarla y luego
hacer lo siguiente:
a) Calcula la suma de los elementos de la diagonal principal.
b) Calcula el promedio de los elementos de la diagonal secundaria.
c) Calcula el mayor de los elementos de la matriz triangular inferior.
d) Calcula el promedio de los elementos de la matriz triangular superior.
e) Reporta solo las diagonales.
f) Intercambia las diagonales.
g) Invierte las diagonales.
h) Reporta los elementos que estn arriba y abajo de la diagonal principal.

77

i) Reporta los elementos que estn arriba y abajo de la diagonal secundaria.


13.- Programa para ingresar una matriz de nmeros enteros diferentes de cero
de filas y c columnas y la acomode para que queden primero los nmeros
positivos y luego los nmeros negativos
14.- Ingresar una matriz de f filas y c columnas y calcular el Mayor, y reportar
todas las posiciones donde se encuentra el mayor. Y calcular el menor y
reportar todas las posiciones donde se encuentra el menor
15.- Ingresar una matriz cuadrada y verificar si es una matriz Triangular inferior.

15.- Funciones
15.1.- Archivos de funcin
Los archivos de funcin se crean y editan como si se trataran archivos script.
En el men File, se selecciona New y luego M-file.
15.2.- Estructura de un Archivo de Funcin
15.2.1.- Lnea de Definicin de una funcin
La primera lnea ejecutable de un archivo de funcin debe ser la definicin de la
propia funcin. En otro caso, el archivo ser considerado como un archivo
script normal.
La Lnea de definicin de la funcin:
- Define que el archivo ser tratado como un archivo de funcin.
- Define el nombre de la funcin
- Define el numero y orden de los argumentos de entrada y salida
La forma que tiene la lnea de definicin es:
function [argumentos de salida]= nombre_funcion(argumentos de entrada)
Si la funcin tiene ms de un parmetro de entrada, estos se separan por
comas y si tiene ms de un parmetro de salida se escribe la lista
separada por comas y entre corchetes ([ ]). Si solo hay un argumento de
salida este se puede teclear sin corchetes.
Para que funcione correctamente un archivo de funcin, a los argumentos de
salida se les debe asignar valores durante la ejecucin del cdigo
correspondiente al cuerpo de la funcin.

Ejemplos:
function [a, b]=calculo(r,s,t) 3 argumentos de entrada y 2 de salida
function A= Rectarea(b,h)

2 argumentos de entrada y 1 de salida

78

function [V,S]=EsferaVolArea(rad) una variable de entrada y dos de salida


15.2.2.- La lnea H1 y las lneas de texto de ayuda
La lnea H1 y las lneas de texto de ayuda son lneas de comentarios a
continuacin de la lnea de definicin de la funcin. Aunque estas lneas son
opcionales son muy tiles para proporcionar informacin sobre la funcin en si.
Las lneas de texto de ayuda son lneas de comentarios que siguen a la lnea
H1. Estas lneas contienen una explicacin de la funcin y cualquier
descripcin relacionada con sus argumentos de entrada y salida. Cuando el
usuario coloca help nombre_funcion en la ventana de comandos se muestran
estas lneas.
Ejemplo:
function A=RectArea(b,h)
% funcion que calcula el area del rectangulo
% Argumentos de entrada:
% b: base del rectangulo
% h: altura del rectangulo
% Argumentos de salida
% A: area del rectangulo
A=b*h;
>> help RectArea
funcion que calcula el area del rectangulo
Argumentos de entrada:
b: base del rectangulo
h: altura del rectangulo
Argumentos de salida
A: area del rectangulo
15.2.3.- Cuerpo de la funcin
El cuerpo de la funcin contiene el cdigo que realiza las operaciones
especificadas. El cdigo puede contener cualquier comando en matlab.
La Sentencia return
Normalmente se sale de una funcin cuando se llega al final de la misma. Una
sentencia return puede ser usada para forzar a salir de la funcin sin llegar al
final.
Ejemplo:
function d = det(A)
if isempty(A)
d = 1;
return
else
...
end

79

15.3.- Ejercicios de funciones


1.- Escribir una funcin que convierta grados centgrados a grados Fahrenheit
function far=conversion(cent)
% funcion que convierte grados centigrados a farenheit
% Argumentos de entrada
% cent: grados centigrados
% Argumento de salida:
% far= grados farenheit
far= 9*cent/5+32;
>> help conversion
funcion que convierte grados centigrados a farenheit
Argumentos de entrada
cent: grados centigrados
Argumento de salida:
far= grados farenheit
>> conversion(30)
ans =
86
2.- Escribir una funcin que calcule el rea de un circulo y la longitud de la
circunferencia dado su radio
function [ac,lc]=arLongCirc(r)
% Funcin que alcular el area del circulo y la longitud de la circunferencia
% Argumento de Entrada:
% r: radio
% Argumento de salida:
% ac: area del circulo
% lc: longitud de la circunferencia
ac=pi*r^2;
lc= 2*pi*r;
>> [ac,lc]=arLongCirc(3)
ac =
28.2743
lc =
18.8496
3.- Escribir una funcin que calcule las dos races de una ecuacin de
segundo grado: ax2+bx+c=0. a, b, y c son parmetros de entrada.

80

function [X1,X2]= raicesCuadratica(A,B,C)


% funcion que calcula las raices de una ecuacion cuadratica
% Argumentos de Entrada:
% A, B, C : coeficientes de la ecuacion
% x1,x2: raices de la ecuacion
D = B^2-4*A*C;
X1=(-B + sqrt(D))/(2*A);
X2=(-B - sqrt(D))/(2*A);
>> [X1, X2]= raicesCuadratica(1,-8,15)
X1 =
5
X2 =
3
4.- La presin atmosfrica (p) vara en funcin de la altura (h) segn la
siguiente expresin: p=1035*e-0.12h, donde la altura se mide en
kilmetros y la presin en milibares.
Escribir una funcin presin que calcule la presin para una altura dada.
function p=presionAtm(h)
% Funcion que calcula la presion atmosferica en funcion de la altura
% Argumentos de entrada:
% h: altura en Kilometros
% Argumento de Salida:
% p : presion en milibars
p=1035*exp(-0.12*h);
>> presionAtm(10)
ans =
311.7360
5.- Disear una funcin
volumen de un cilindro
S=2r2+2rh).

en MATLAB que calcule la superficie y


dados su radio (r) y altura (h) (V=r2h,

function [vc, ac]=volArCilindro(r,h)


% funcion que calcular el volumen y el area de un cilindro
% argumentos de entrada:
% r: radio
% h:altura;
% argumentos de salida
% vc: volumen del cilindro
% ac: area del superficial del cilindro
81

vc= pi*r^2*h;
ac= 2*pi*r^2 + 2*pi*r*h;
>> [vc, ac]=volArCilindro(1,5)
vc =
15.7080
ac =
37.6991
6.- Sabiendo que la resistencia total de 3 resistencias conectadas en serie es:
rT= r1 + r2 + r3
Y que si dichas resistencias se conectan en paralelo, entonces su
resistencia total es:
1/rT = 1/r1 + 1/r2 + 1/r3
Escribir una funcin tal que dadas 3
resistencia total conectadas en paralelo y en serie

resistencias

calcule

su

function [rts, rtp] =resistenciaTotal(r1,r2,r3)


% funcion para calcular la resistencia total de 3 resistencias conectadas
% en serie y en paralelo
% Argumentos de entrada: r1, r2 y r3
% Argumentos de salidad:
% rts: resistencia total en serie
% rtp: resistencia total en paralelo
rts = r1+r2+r3;
w= 1/r1 + 1/r2+ 1/r3;
rtp = 1/w;
>> [rts, rtp] =resistenciaTotal(5,8,3)
rts =
16

rtp =
1.5190
7.- Funcion para calcular el mayor de 3 nmeros
function m=mayor3(n1,n2,n3)
% funcion que calcular el mayor de 3 numeros
% Argumentos de entrada: n1, n2, n3 numeros
% Arguemnto de salida: m el numero mayor

82

m=n1;
if n2>m
m=n2;
end
if n3>m
m=n3;
end
>> mayor3(18,10,25)
ans =
25
8.- Funcin que reporta los divisores de un numero n
function reporteDivisores(n)
% funcion que reporta los divisores de un numero n
% Argumento de entrada:
% n: numero entero
for i=1:n
if rem(n,i)==0
disp(i)
end
end
>> reporteDivisores(68)
1
2
4
17
34
68
9.- Funcin que verifica si un nmero es primo
function r=esPrimo(n)
% funcion que verifica si un numero es primo
% argumento de entrada: n numero entero
% arguemento de salida: r verdadero si es primo, falso si no lo es
cd=0;
for i=1:n
if rem(n,i)==0
cd=cd+1;

83

end
end
if cd==2
r=1;
else
r=0;
end
>> esPrimo(17)
ans =
1
>> esPrimo(68)
ans =
0
10.- Verificar si un nmero es Perfecto
function r=esPerfecto(n)
% funcion que verifica si un numero es perfecto
% argumento de entrada: n numero entero
% arguemento de salida: r=1 si es perfecto, r=0 si es falso
sd=0;
mitad=fix(n/2)
for i=1:mitad
if rem(n,i)==0
sd=sd+i
end
end
if sd==n
r=1;
else
r=0;
end
>> esPerfecto(6)
ans =
1
>> esPerfecto(7)
ans =
0

84

12.- Funcin para reportar todos los factores primos de un nmero.


function reporteFactoresPrimos(n)
% Funcion que reporta los factores primos de un numero n
% Arguemto de entrada: n numero entero
% Salida: Los factores primos
d=2;
while n>1
if rem(n,d)==0
fprintf('%6d',d);
n=n/d;
else
d=d+1;
end
end
>> reporteFactoresPrimos(325)
5 5 13
>> reporteFactoresPrimos(96)
2 2 2 2 2 3
13.- Funcin que permite ingresar elementos en un vector
function x=ingresoVector()
% funcin que permite el ingreso de un arreglo
% Argumentos de salida: vector
n=input('Numero de elementos:');
for i=1:n
fprintf('elemento[%d]: ',i);
x(i)=input('');
end
>> A=ingresoVector
Numero de elementos:3
elemento[1]: 5
elemento[2]: 8
elemento[3]: 9
A=
5

14.- Funcin que calcule el mayor de los elementos de un vector


function m=mayorVector(x)
% funcion que calcula el mayor de los elementos de un arreglo
% Argumentos de entrada:
% x: vector de numeros reales

85

% Argumentos de salida:
% m: mayor de los elementos del arreglo
n=length(x);
m=x(1);
for i=1:n
if x(i)>m
m=x(i);
end
end
>> x=[8 9 6 7 3]
x=
8

>> mayorVector(x)
ans =
9
15.- Funcin que calcula el promedio de los elementos de un vector
function p=promedioVector(x)
% funcion que calcula el promedio de los elementos de un arreglo
% Argumentos de entrada:
% x: vector de numeros realeas
% Argumentos de salida:
% p: promedio de los elementos
n=length(x);
s=0;
for i=1:n
s=s+x(i);
end
p=s/n;
16.- Funcin para que ingrese los elementos de una Matriz
function m=ingresoMatriz()
% funcion que permite el ingreso de un arreglo
% Argumentos de salida: matriz con f y c columnas
f=input('Numero de filas :');
c=input('Numero de columnas : ');
for i=1:f
for j=1: c
fprintf('elemento(%d,%d): ',i,j);

86

m(i,j)=input('');
end
end
17.- Funcin para calcular el mayor de los elementos de una matriz
function may=mayorMatriz(A)
% Funcion que calcula el mayor de una matriz
% Argumento de Entrada: A matriz
% Argumento de Salida : may, mayor de la matriz
[f c]=size(A);
may=A(1,1);
for i=1:f
for j=1:c
if A(i,j)>may
may=A(i,j);
end
end
end

>> mayorMatriz([1 5 9;6 9 12;8 13 18])


ans =
18
>> M=[21 25 29;16 19 32;28 23 28]
M=
21
16
28

25
19
23

29
32
28

>> mayorMatriz(M)
ans =
32
18.- Funcin que calcula la suma de filas de una matriz
function sf=sumaFilas(A)
% Funcin que calcula la suma de filas de la matriz
% Argumento de Entrada: A, matriz
% Argumento de Salida: sf, vector de suma de filas
[f c]=size(A);
for i=1:f
sf(i)=0;

87

for j=1:c
sf(i)=sf(i)+A(i,j);
end
end
>> M
M=
21
16
28

25
19
23

29
32
28

>> sumaFilas(M)
ans =
75

67

79

19.- Funcin que calcula la suma de columnas de una matriz


function sc=sumaColumnas(A)
% Funcin que calcula la suma de columnas de la matriz
% Argumento de Entrada: A, matriz
% Argumento de Salida: sc, vector de suma de columnas
[f c]=size(A);
for j=1:c
sc(j)=0;
for i=1:f
sc(j)=sc(j)+A(i,j);
end
end
>> M
M=
21
16
28

25
19
23

29
32
28

>> sumaColumnas(M)
ans =
65

67

89

20.- Programa para intercambiar dos filas de una matriz


function R=intercambiaFilas(A,f1,f2)

88

% Funcion que intercambia las dos filas de una matriz


% Argumento de Entrada: A, matriz
% Argumento de Salida: R matriz con las filas intercambiadas
temp=A(f1,:);
A(f1,:)=A(f2,:);
A(f2,:)=temp;
R=A;
>> M
M=
21 25 29
16 19 32
28 23 28
>> intercambiaFilas(M,1,3)
ans =
28
16
21

23
19
25

28
32
29

21.- Funcin para eliminar una fila de una matriz


function R=eliminaFila(A,f)
% Funcion que elimina las fila de una matriz
% Argumentos de Entrada: A, matriz; f, fila a eliminar
% Arguemento de Salida : R matriz con las fila eliminada
A(f,:)=[ ];
R=A;
>> eliminaFila(M,2)
ans =
21
28

25
23

29
28

89

Practica N 5 Ejercicios de Funciones


Empleando funciones realizar los siguientes ejercicios:
1.- Calcular la posicin de la primera componente negativa de un vector pedido
al usuario.
2.- Calcular cuantas componentes de una matriz son negativas, positivas y
cero.
3.- Disear un algoritmo que permita almacenar las edades y nombres de un
conjunto de personas. El usuario finalizar la introduccin de datos tecleando
una edad igual a cero, y seguidamente el algoritmo pedir al usuario una edad
para informarle acerca de cuantas personas tienen dicha edad y cuales son sus
nombres.
4.- Pedirle al usuario un valor numrico que representa un importe en euros, e
indicarle el nmero mnimo de billetes y monedas (cuantas y de que tipo) en
que se puede descomponer.
Ejemplo: 1.354,23 : 2 de 500, 1 de 200, 1 de 100, 1 de 50, 2 de 2, 1 de
0,20, 2 de 0,02 y 1 de 0,01.
5.- Calcular el nmero de cifras de un nmero entero n pedido al usuario.
(NOTA: puede dividirse sucesivamente n entre 10, hasta alcanzar un cociente
que valga cero).
6.- Disear un algoritmo que permita calcular la menor componente de un
vector. Modificar el algoritmo para que tambin indique cual es su posicin.
7.- Elaborar un algoritmo que permita calcular el NIF de un contribuyente. El
resto de la divisin del DNI entre 23 proporciona la posicin de la letra del NIF
en la palabra 'RWAGMYFPDXBNJZSQVHLCKET'. NOTA: En DFD puede
utilizarse la funcin substring(a, inicio, n), que devuelve n caracteres
consecutivos de la cadena a, a partir del carcter situado en la posicin que
indica inicio. Por ejemplo, si a='hola', substring(a,2,3) Valdr 'ola'.
8.- Disear un programa que calcule el producto de dos matrices pedidas al
usuario.
9.- Disear un algoritmo que permita calcular la posicin (fila y columna) de la
mayor componente de una matriz pedida al usuario.
10.- Convertir a binario puro un nmero real en base 10 pedido al usuario.
11.- Disear un algoritmo que informe al usuario si una frase pedida al usuario
es un palndromo. Un palndromo es una frase que se lee igual en los dos
sentidos ('A torre da derrota', 'Dabale arroz a la zorra el abad'). Para simplificar,
el usuario introducir la frase en minsculas, sin tildes ni espacios en blanco.

90

12.- Calcular si dos nmeros enteros a y b son amigos. Se dice que a es amigo
de b si a es igual a la suma de los divisores primos de b. A estos efectos, no se
cuenta como divisor el propio nmero b. (Ejemplo: el 1 es amigo del 19, y
tambin el 11 del 21).
13.- Usar la funcin anterior para disear un algoritmo que encuentre todos los
nmeros perfectos entre 0 y un nmero a pedido al usuario. (NOTA: un nmero
es perfecto si es amigo de s mismo).
14.- Dados tres valores numricos, que expresan una fecha (da, mes y ao),
calcular la fecha siguiente, considerando la posibilidad de que el ao sea
bisiesto.
15.- Escribir un algoritmo que calcule el importe final a pagar por un cliente,
dado el precio de venta al pblico (PVP) de un artculo. El importe final se
calcula aplicando un descuento, nunca mayor del 20%, al PVP, y aadindole
el 16% de IVA. El importe del artculo podr estar en pesetas o euros, y el
resultado se dar en ambas monedas.
16.- Escribir una funcin codifica(a, b) que guarde en b el complemento a 10
de a. (nmeros de cuatro cifras). Construir la funcin inversa descodifica(a,b).
17.- Escribir la funcin esprimo, definida como:
1 si n es primo
esprimo(n)=
0 si n no es primo
Utilizando dicha funcin, disear un programa que imprima todos los nmeros
primos menores que uno dado por teclado.
18.- Escribir una funcin de nombre reccil que convierta las coordenadas
rectangulares de un punto a en coordenadas cilndricas. Considerar que a es
un vector de tres coordenadas:
>> a=[1 1 1]
>> reccil(a)
>> ans =
1.7321 0.7854 1.0000
Corregir los errores de ejecucin que se pudieran producir al probar la funcin
con los puntos siguientes:
[0 0 0], [0 0 1], [0 1 0] y [0 0 1]. Escribir, de forma anloga, la funcin inversa
correspondiente cilrec.
19.- Construir una funcin espalndromo (frase) que devuelva un 1 si la cadena
de caracteres contenida en la variable frase es un palndromo y un cero en

91

caso contrario. Considerar que el usuario pueda escribir espacios en blanco,


tildes, maysculas y minsculas.
20.- Disear un algoritmo para jugar al Mastermind. En dicho juego, un jugador
A escribe un nmero de 4 cifras y otro jugador B intenta adivinarlo. No se
permite que haya repeticiones en las cifras del nmero. A cada intento de B, A
debe decirle cuantas cifras ha acertado y, de stas, cuantas estn
correctamente colocadas.
Ejemplo: Nmero secreto: 1234
Intento 1:

4321

4 correctas, 0 colocadas

Intento 2:

2143

4 correctas, 0 colocadas

Intento 3:

1243

4 correctas, 2 colocadas

Intento 4:

1234

4 correctas, 4 colocadas

21.- Disear una funcin MATLAB moda(x) que devuelva la moda (valor o
valores que ms veces se repita) de un vector x.
15.4.- Las funciones eval y feval
La funcin eval (cadena de caracteres) hace que se evalu como
expresin de MATLAB el texto contenido entre comillas como argumento
de la funcin.
Este texto puede ser un comando, una formula matemtica o en general
una expresin vlida de MATLAB. La funcin eval puede tener valores de
retorno para recoger los resultados de la expresin evaluada.
Ejemplo 1

92

Ejemplo 2

Ejemplo 3

Por su parte la funcin feval sirve para evaluar, dentro de una funcin, otra
funcin cuyo nombre se ha recibido como argumento. Por ejemplo, is
dentro de una funcin se quiere evaluar la funcin calcular(A, b, c). donde
el nombre calcular se enva como argumento en la cadena nombre,
entonces feval(nombre, A, b,c).
Ejemplo 4

93

16.- Graficas 2D
16.1. Funciones de la forma y = f (x)
Para hacer grficas de funciones de una variable con MatLab,
primero tenemos que crear una tabla de valores de la variable para
despus dibujar la funcin. Por ejemplo, queremos dibujar la grfica de la
funcin
y = sen(x):
Primero creamos una tabla de valores para x
>>x=0:pi/100:2*pi;
Con este comando hemos formado una tabla (el vector x) con 200
valores entre 0 y 2 pi Otra forma de conseguir el mismo resultado sera
utilizar el comando
>>x=linspace(0,2*pi,200);
Ahora calculamos los valores de y
>> y = sin(x);
y por ultimo la dibujamos (ver Figura 1)
>>plot(x,y)

Figura 28: Grafica de y = sen(x).

94

Realmente lo que hemos hecho es dibujar 200 puntos de la funcin en el


intervalo [0; 2], y posteriormente el programa los ha unido mediante
segmentos. Si el numero de puntos es lo suficientemente grande,
como en este caso, no se aprecian los vrtices.
Veamos un ejemplo algo ms complicado. Queremos dibujar ahora la
grafica de la funcin y = x*ex^2.
Definimos los valores para los que queremos hacer la grafica
>>x=-3:.01:3;
Es decir, que vamos a dibujar la grafica en el intervalo [-3,3] con un paso
de longitud 0.01
Definimos la funcin
>>y=x.*exp(-x.^2);
Y por ultimo, se escribe el comando para que ejecute el dibujo
(figura 2.)
>>plot(x,y)

Figura 28: Grafica de y = x*ex^2.

95

Figura 30. Grafica de y = x*ex^2 con cuadrcula.


- Cuadrcula. Si queremos que aparezca una cuadrcula sobre el dibujo,
utilizaremos el comando >>grid on. El aspecto del dibujo ser ahora
como el de la figura 3. Para desactivar la cuadrcula habr que
escribir >>grid off.
- Color y trazo. El comando plot ofrece mltiples posibilidades de color
forma de trazo de la grafica. Por ejemplo, el comando:

>>plot(x,y,r*), nos dibujara la grafica en color rojo y con asteriscos.


Para consultar todas las posibilidades, hacer >>help plot.
- Ejes. Los ejes que aparecen por defecto en una grafica tambin se
pueden modificar. Con el comando >>axis([-2 2 -1 1]), conseguiremos
que la grafica aparezca en la regin -2<x<2 y -1<y<1.
Con >>axis square, conseguiremos que la figura aparezca en un
cuadrado, sin cambiar el rango de los ejes. Con el comando >>axis equal,
conseguiremos que los rangos de los ejes sean iguales.
- Zoom. Utilizando el comando >>zoom on. Se puede agrandar la
figura o alguna zona seleccionada de la figura. Hay que abrir la
figura y utilizar los botones izquierdo y derecho del ratn. Para
desactivarlo, habr que escribir >>zoom off.
- Varias graficas en la misma figura. Se pueden dibujar tanta graficas
como se quieran en una misma figura. Si ya tenemos dibujada una, y
generamos una nueva grafica, en principio la figura anterior es sustituida
por la nueva. Sin embargo, utilizando el comando >>hold
on, se

96

mantendr la anterior, con todas sus propiedades, y se podr dibujar


encima una nueva. Para desactivar el comando anterior: >>hold off.
Otra forma de hacerlo es dibujar desde el principio dos graficas juntas, por
ejemplo, vamos a dibujar las graficas de las funciones y = sen(x) e y =
sen(x + pi/3 ) en la misma figura (4):
Generamos las tablas:
>>x=linspace(0,2*pi,300);
>>y=sin(x);
>>z=sin(x+pi/3);
Y ahora las dibujamos

Figura 31: Graficas de y = sen(x) y de y = sen(x + pi/3 ).


>>plot(x,y,r-,x,z,g--),grid on
(La primera en color rojo, con trazo continuo, y la segunda en
verde, con trazo discontinuo).
- Etiquetado de graficas. Existen diversas posibilidades para el
etiquetado de las graficas. Vemoslo con un ejemplo (ver figura 5):
>>x=linspace(-3,3,500);y=exp(-x.^2);z=2*exp(-x.^2);
>>plot(x,y,-,x,z,--) % dibujamos dos funciones
>>title(Campanas de Gauss)
>>xlabel(Eje de Abscisas) % Etiqueta el eje horizontal
>>ylabel(Eje de Ordenadas) % Etiqueta el eje vertical
>>legend(exp(-x^2), 2*exp(-x^2)) % Pone una leyenda

97

Figura 32: Etiquetado de graficas.


Adems de los comandos descritos antes para etiquetar graficas, existe la
posibilidad de poner un texto en algn otro lugar de la figura. Con el
comando >>gtext(texto), se abrir la figura y podremos indicar con el
ratn el lugar donde ha de ir el texto, que seleccionaremos con un clic.
- Obtencin de puntos desde el grafico. Una vez que se ha
realiza- do una grafica, podemos necesitar conocer las coordenadas
de algunos puntos de la misma. Por ejemplo, el lugar aproximado en
el que estn los mximos y mnimos, o si queremos aadir alguna recta o
una poligonal al dibujo. Para conseguir esto, se puede utilizar el comando
ginput. Escribiendo
>>[x,y]=ginput(N)
Donde N es el numero de puntos cuyas coordenadas queremos
obtener. Despus de ejecutado el comando habr que pulsar con el botn
izquierdo del ratn sobre el dibujo tantas veces como puntos
hayamos especificado. Las coordenadas de esos puntos quedaran
almacenadas en las variables [x, y].
Para dibujar graficas de funciones definidas a trozos, necesitamos utilizar
lo que vamos a denominar ndices o variables lgicas. Veamos un
ejemplo. Creamos un vector con los nmeros del 1 al 7
>>x=1:7
x =
1
2

98

Y ahora escribimos
>>x>4
ans =
0
0

Observamos que donde no se cumple la condicin, aparece 0 y donde se


cumple, aparece 1. Para crear estas variables lgicas se pueden utilizar los
siguientes operadores relacionales:
<
>
<=
>=
==
~=

menor que
mayor que
menor o igual
mayor o igual
igual
distinto

Estos operadores se pueden combinar utilizando los operadores lgicos:


& y
| o
~ no
As, por ejemplo, sobre el mismo x de antes, si escribimos
>>(2<x)&(x<=6)
ans =
0

Obtenemos unos en los valores que verifican 2 < x <6.


Ahora supongamos que queremos representar la funcin

f (x) =

x^2
1
-x + 2

si x < 0
si 0 <= x < 1
si 1 <=x

Generamos una tabla valores en el dominio en el que queramos


dibujar la funcin.
>>x=linspace(-2,3,3000);
Y ahora definimos la funcin, multiplicando cada trozo por el ndice lgico
que describa el lugar en el que queremos dibujarlo,
>>y=(x.^2).*(x<0)+1.*((0<=x)&(x<1))+(-x+2).*(1<=x);
Y ahora la dibujamos. Resulta conveniente hacerlo con puntos, asteriscos
o cruces porque, de otra forma, no aparecern las discontinuidades
99

>>plot(x,y,.),grid on,title(Funcion definida a trozos)


Y obtenemos la grafica de la figura 6.

Figura 33: Una funcin definida a trozos.


Ejercicios grficos 1: Dibujar las graficas de las siguientes funciones
eligiendo, en cada caso, una tabla de valores adecuada para que
aparezcan los aspectos ms representativos de la funcin:
a) f (x) = x(x2 + 4)2
b) f (x) = x (x)1/2
c) f (x) = log x
x
d) f (x) =

x(x - 2)..
(x + 1)(x 2)

e) f (x) = sen(1/x)
f ) f (x) = x / ( e|x-1|)
x2 si x<0
g) f (x) =
-1 si x>=0

100

h) f (x) =

-x si x<-1
1 si 0<x<2
-x2 si x>2

i) f (x) =

(1-x)1/2 si x<-1
1- x2 si -1<x<1
(x -1)1/2 si x>1

16.2.- Curvas en paramtricas


Veamos ahora como se pueden representar curvas en el plano dadas en
forma parametrica, es decir, de la forma
r (t) = (x (t); y(t))

t [a; b]

Empecemos con un ejemplo: queremos dibujar la grafica de la curva

t (t 2 1) 2t (t 2 1)
r (t ) 2
, 2
;
t 1
t 1

5 t 5

En primer lugar generamos los valores de t en el intervalo indicado,


>>t=linspace(-5,5,1000);
Y ahora lo podemos dibujar de dos formas distintas:
>>plot((t.*(t.^2-1))./(t.^2+1),(2*(t.^2-1))./(t.^2+1))

Figura 34: Curva en paramtricas.

101

Obtendremos la grafica de la figura 7.


Y otra forma de hacerlo es utilizar el comando
>>comet((t.*(t.^2-1))./(t.^2+1),(2*(t.^2-1))./(t.^2+1))
Los dos comandos producen el mismo resultado, sin embargo, la forma de
ejecucin es diferente, la segunda es mas divertida, aparece un
circulito (el cometa) que va dibujando la curva. La velocidad de ejecucin
depende del numero de puntos que hayamos generado con el
comando linspace.
Dibujada una curva en paramtricas existe la posibilidad de dibujar sobre
la misma los vectores velocidad, utilizando el comando quiver.
Por ejemplo, para dibujar los vectores velocidad sobre la curva
r(t) = (cos(t); sen(t)) ;

t [0,2pi]

>>t=linspace(0,2*pi,20);
>>quiver(cos(t),sin(t),-sin(t),cos(t)),axis square
Produce la grafica de la figura 8.
La sintaxis del comando es >>quiver(r(t),r(t)). El nmero de vectores
que aparecen en este caso es 20. Si el numero de puntos que se indica
con el comando linspace es demasiado grande, puede que no se aprecie
con claridad la grafica, ya que este ser el numero de vectores que
se dibujen.

Figura 35: Vectores velocidad sobre una circunferencia.

102

Ejercicios grficos 2: Dibujar las curvas en paramtricas siguientes;


en los apartados a) y b), dibujar adems los vectores velocidad,
utilizando el comando quiver:

a ) r (t ) (2 cos3 t , 2 sen3t );
b) r (t ) (3sent , 2 sen(2t ));

t
t

t t 2
t 2 t
c) r (t ) 12 9 , 116



d ) r (t ) cos t (cos t 1), 2 sen(2t ) ;

2
; 3 t 3

e) r (t ) sen(2t ) sent cos(2t ) cos t ; t


t
4t

4
f ) r (t ) e sen(2t ), e cos(2t ) ;

7t 2
7
2
g ) r (t ) t cos( ), tsen( ) ;
2 3
2
3

22
11

h) r (t ) t sen(3t ), cos(3t ) ;
10
10

t
t
3 t 3

16.3.- Curvas en polares


Una curva en coordenadas polares es la imagen de la funcin

r h( ),

1 ,2

Un punto de la curva en polares (r0 ,0 ) tiene distancia al origen r0 y el


ngulo que forma el vector de posicin del punto con el eje horizontal,
medido en sentido positivo, es 0.
Por lo tanto, la relacin entre las coordenadas polares y las coordenadas
paramtricas es
x = r cos ()
y = r sen ()
Para dibujar una curva en polares con Matlab se utiliza el comando polar.
Por ejemplo, para dibujar la grafica de
r 2 4cos( ),

Generamos los valores del ngulo tetha


>>tetha=linspace(-pi,pi,100);

103

Calculamos los valores de r


>>r=2-4*cos(tetha);

Figura 36: Curva en polares.


Y dibujamos la grafica
>>polar(tetha,r)
Ejercicios grficos 3: Dibujar las graficas de las siguientes funciones,
dadas en coordenadas polares:

a) r 7 7 sen( );
b) r 3 6sen( );
c) r sen(6 );
d ) r cos(8 );

e) r 5cos(2 );

16.4.- Cambios de coordenadas polares-cartesianas


Hay dos comandos que permiten hacer cambios de coordenadas. Si
queremos cambiar de coordenadas polares a coordenadas cartesianas hay
que utilizar el comando

104

>>[x,y]=pol2cart(theta,r);
Esto es, suponiendo que los puntos en coordenadas polares estn
previamente almacenados en las variables theta y r. Los puntos ahora
obtenidos se podrn dibujar utilizando el comando plot.
Para hacer el cambio de coordenadas cartesianas a coordenadas polares,
habr que utilizar
>>[theta,r]=cart2pol(x,y);
Ejercicios grficos 4: En los ejemplos del ejercicio anterior, utilizar el
comando pol2cart para cambiar las coordenadas polares obtenidas a
coordenadas cartesianas. Usar despus el comando plot para obtener las
graficas en las nuevas coordenadas.
17.- Mtodos Numricos en MatLab
17.1.- Solucin de Ecuaciones no lineales de una variable
Para los mtodos de biseccin, regla falsa, secante, newton y punto fijo se
utilizara la funcion siguiente: f(x) = 2x2-x-5
function y=f(x)
y= 2*x^2-x-5;
17.1.1.- Mtodo de la biseccin
function raiz=Biseccion(a,b)
error=0.0005;
k=0;
fxa=f(a);
fxb=f(b);
if fxa*fxb<=0
while abs(b-a)/2>error
m=(a+b)/2;
fprintf('%5d%10.5f%10.5f%10.5f\n',k,a,b,m);
k=k+1;
fxm=f(m);
if fxa*fxm<=0
b=m;
fxb=fxm;
else
a=m;
fxa=fxm;
end
end
raiz=m;
else
fprintf('cambiar limites');
end

105

Ejecucin del Programa


>> biseccion(1,2)
0 1.00000 2.00000 1.50000
1 1.50000 2.00000 1.75000
2 1.75000 2.00000 1.87500
3 1.75000 1.87500 1.81250
4 1.81250 1.87500 1.84375
5 1.84375 1.87500 1.85938
6 1.84375 1.85938 1.85156
7 1.84375 1.85156 1.84766
8 1.84766 1.85156 1.84961
9 1.84961 1.85156 1.85059
ans =
1.8506
17.1.2.- Mtodo de la Regla falsa
function raiz=reglafalsa(a,b)
cc=0.001;
ce=0.001;
n=50;
exito=0;
k=0;
while k<n & exito==0
k=k+1;
m=(a*f(b)-b*f(a))/(f(b)-f(a));
va1=abs(b-a);
va2=abs(f(m));
fprintf('%5d%10.5f%10.5f%10.5f%10.5f%10.5f%10.5f%10.5f%10.5f\n',k,a,b,f(a)
,f(b),m,f(m),va1,va2)
if va1<cc
exito=1;
raiz=m;
else
if va2<ce
exito=1;
raiz=m;
else
if f(a)*f(m)>0
a=m;
end
if f(a)*f(m)<0
b=m;
end
end
end
end
if(exito==0)

106

fprintf('no se puede hallar la raiz');


end
Ejecucin del Programa
>> reglafalsa(1,2)
1 1.00000 2.00000 -4.00000
0.32000
2 1.80000 2.00000 -0.32000
0.01469
3 1.84848 2.00000 -0.01469
0.00066
ans =

1.00000

1.80000 -0.32000

1.00000

1.00000

1.84848 -0.01469

0.20000

1.00000

1.85068 -0.00066

0.15152

1.8507

17.1.3.- Mtodo de Newton


Para este mtodo adems de la funcin f(x) se necesita tambin la derivada
que es la que debemos colocar.
function raiz=newton(x0)
error=0.001;
NITER=50;
exito=0;
k=0;
while k<NITER & exito==0
k=k+1;
x=x0-f(x0)/df(x0);
va1=abs(x-x0);
va2=abs(f(x));
fprintf('%5d%10.5f%10.5f%10.5f%10.5f\n',k,x0,x,va1,va2);
if va1<=error
raiz=x;
exito=1;
else
if va2<=error
raiz=x;
exito=1;
else
x0=x;
end
end
end
if exito==0
fprintf('No se encontro la raiz en 50 iteraciones');
end

107

Ejecucin del Programa


>> newton(1)
1 1.00000 2.33333 1.33333
2 2.33333 1.90667 0.42667
3 1.90667 1.85172 0.05494
4 1.85172 1.85078 0.00094
ans =
1.8508

3.55556
0.36409
0.00604
0.00000

Otra Manera ingresando la funcin


f=input('Ingrese la Funcion: ','s');
df=input('Ingrese la derivada de la funcion :','s');
x0=input('Ingrese el valor Inicial x0: ');
error=input('Ingrese el Error Maximo e : ');
NITER=input('Numero maximo de iteraciones : ');
exito=0;
k=0;
while k<NITER & exito==0
k=k+1;
x=x0;
fx0=eval(f);
dfx0=eval(df);
x1=x0-fx0/dfx0;
va1=abs(x1-x0);
x=x1;
fx1=eval(f);
va2=abs(fx1);
fprintf('%5d%10.5f%10.5f%10.5f%10.5f\n',k,x0,x1,va1,va2);
if va1<=error
raiz=x1;
exito=1;
else
if va2<=error
raiz=x1;
exito=1;
else
x0=x1;
end
end
end
if exito==0
fprintf('No se encontro la raiz en 50 iteraciones');
else
fprintf('La raiz aproximada es : %10.5f',raiz);
end

108

Ejecucin del Programa


>> newton1
Ingrese la Funcion: 2*x^2-x-5
Ingrese la derivada de la funcion :4*x-1
Ingrese el valor Inicial x0: 1
Ingrese el Error Maximo e : 0.001
Numero maximo de iteraciones : 50
1 1.00000 2.33333 1.33333 3.55556
2 2.33333 1.90667 0.42667 0.36409
3 1.90667 1.85172 0.05494 0.00604
4 1.85172 1.85078 0.00094 0.00000
La raiz aproximada es : 1.85078
17.1.4.- Mtodo de la Secante
function raiz=secante(x0,x1)
error=0.001;
NITER=50;
exito=0;
k=0;
while k<NITER & exito==0
k=k+1;
x=(x0*f(x1)-x1*f(x0))/(f(x1)-f(x0));
va1=abs(x-x1);
va2=abs(f(x));
fprintf('%5d%10.5f%10.5f%10.5f%10.5f%10.5f\n',k,x0,x1,x,va1,va2);
if va1<=error
raiz=x;
exito=1;
else
if va2<=error
raiz=x;
exito=1;
else
x0=x1;
x1=x;
end
end
end
if exito==0
fprintf('No se encontro la raiz');
end
Ejecucin del Programa
>> secante(1,2)
1 1.00000 2.00000 1.80000 0.20000 0.32000
2 2.00000 1.80000 1.84848 0.04848 0.01469
3 1.80000 1.84848 1.85082 0.00233 0.00024
ans =
1.8508
109

17.1.5.- Mtodo del Punto Fijo


Calculo de una raz de la ecuacin 2x2 x -5 = 0
function y=g(x)
y= sqrt((x+5)/2);
function raiz=puntofijo(x0)
error=0.0005;
niter=50;
exito=0;
k=0;
while k<niter & exito==0
k=k+1;
x=g(x0);
va=abs(x-x0);
fprintf('%5d%10.5f%10.5f%10.5f\n',k,x0,x,va);
if va<=error
exito=1;
raiz=x;
else
x0=x;
end
end
if exito==0
fprintf('no se pudo encontrar la raiz');
end
Ejecucin del Programa
>> puntofijo(1)
1 1.00000 1.73205 0.73205
2 1.73205 1.83467 0.10262
3 1.83467 1.84860 0.01393
4 1.84860 1.85049 0.00188
5 1.85049 1.85074 0.00025
ans =
1.8507
17.2.- Solucin de n ecuaciones lineales con n incgnitas, calculo de
matriz inversa y determinante de una matriz
Resolveremos el sistema
4x1 -9 x2 + 2x3 = 5
2x1 -4 x2 + 6x3 = 3
x1 - x2 + 3x3 = 4
110

17.2.1.- Mtodo de Gauss con Pivoteo


function x=gausspivoteo(AA,b)
[n n]= size(AA);
x=zeros(n,1);
A=[AA b'];
n1=n+1;
for i=1:n
may=abs(A(i,i));
fila=i;
for k=i+1:n
if abs (A(k,i))>may
may=abs(A(k,i));
fila=k;
end
end
temp=A(i,:);
A(i,:)=A(fila,:);
A(fila,:)=temp;
if A(i,i)==0
fprintf(' el sistema es singular, no tiene solucin ');
return
end
for k=i+1:n
factor=A(k,i)/A(i,i);
for j=i:n1
A(k,j)=A(k,j)-factor*A(i,j);
end
end
end
x(n)=A(n,n1)/A(n,n);
for i=n-1:-1:1
suma=A(i,n1);
for j=i+1:n
suma=suma-A(i,j)*x(j);
end
x(i)=suma/A(i,i);
end
Ejecucin del Programa
>> A=[4 -9 2;2 -4 6;1 -1 3];
>> b=[5 3 4];
>> x=gausspivoteo(A,b)
x=
6.9500
2.5000
-0.1500

111

17.2.2.- Mtodo de Gauss-Jordn para resolver un sistema de n


ecuaciones con n incgnitas
function x=gaussjordan(AA,b)
[n n]=size(AA);
x=zeros(n,1);
A=[AA b'];
n1=n+1;
for i=1:n
may=abs(A(i,i));
fila=i;
for k=i+1:n
if abs (A(k,i))>may
may=abs(A(k,i));
fila=k;
end
end
temp=A(i,:);
A(i,:)=A(fila,:);
A(fila,:)=temp;
if A(i,i)==0
fprintf(' el sistema singular, no tiene solucion ');
return
end
factor=A(i,i);
for j=i:n1;
A(i,j)=A(i,j)/factor;
end
for k=1:n
if k~=i
piv=A(k,i);
for j=i:n1
A(k,j)=A(k,j)-piv*A(i,j);
end
end
end
end
for i=1:n
x(i)=A(i,n+1);
end
Ejecucin del Programa
>> A=[4 -9 2;2 -4 6;1 -1 3];
>> b=[5 3 4];
>> x=gaussJordan(A,b)
x=
6.9500
2.5000
-0.1500

112

17.2.3.- Mtodos Iterativos para el sistema de N ecuaciones con N


incgnitas
Para estos aplicar estos mtodos las matrices tienen que ser diagonalmente
dominantes.
Para el mtodo de Jacobi y Seidel resolveremos el siguiente sistema:
4 x1
- x1

- x2
+ 4 x2 - x3
- x2 + 4x3 - x4
- x3 + 4x4

=
=
=
=

1
1
1
1

a) Mtodo de Jacobi
function x=jacobi(A,b)
% Datos
% A = es la matriz
% b = es el vector de la mano derecha
% n = es el orden de la matriz
% Resultados
% x = vector solucion
[n n]=size(A);
x=zeros(n,1);
y=zeros(n,1);
error=0.0005;
NTOL=50;
k=0;
fprintf('%5d',k);
for m=1:n
fprintf('%10.5f',x(m));
end
while 1
flag=1;
for i=1:n
suma=0;
for j=1:n
if i~=j
suma=suma+A(i,j)*x(j)/A(i,i);
end
end
y(i)=b(i)/A(i,i)-suma;
end
k=k+1;
fprintf('\n%5d',k);
for i=1:n
if abs(y(i)-x(i))>error

113

flag=0;
end
x(i)=y(i);
fprintf('%10.5f',x(i));
end
if (NTOL==k) | (flag==1)
break;
end
end
Ejecucin del Programa
>> x=jacobi(A,b)
0 0.00000 0.00000 0.00000
1 0.25000 0.25000 0.25000
2 0.31250 0.37500 0.37500
3 0.34375 0.42188 0.42188
4 0.35547 0.44141 0.44141
5 0.36035 0.44922 0.44922
6 0.36230 0.45239 0.45239
7 0.36310 0.45367 0.45367
8 0.36342 0.45419 0.45419
9 0.36355 0.45440 0.45440
x=
0.3635
0.4544
0.4544
0.3635

0.00000
0.25000
0.31250
0.34375
0.35547
0.36035
0.36230
0.36310
0.36342
0.36355

b) Mtodo de Seidel
function x=seidel(A,b)
% Datos
% A = es la matriz
% b = es el vector de la mano derecha
% n = es el orden de la matriz
% Resultados
% x = vector solucion
[n n]=size(A);
x=zeros(n,1);
y=zeros(n,1);
error=0.0005;
NTOL=50;
k=0;
fprintf('%5d',k);
for m=1:n
fprintf('%10.5f',x(m));
end
while 1
114

flag=1;
for i=1:n
suma=0;
for j=1:n
if i~=j
suma=suma+A(i,j)*x(j)/A(i,i);
end
end
y(i)=b(i)/A(i,i)-suma;
if abs(y(i)-x(i))>error
flag=0;
end
x(i)=y(i);
end
k=k+1;
fprintf('\n%5d',k);
for i=1:n
fprintf('%10.5f',x(i));
end
if (NTOL==k) | (flag==1)
break
end
end
Ejecucin del Programa
>> A=[4 -1 0 0;-1 4 -1 0; 0 -1 4 -1;0 0 -1 4];
>> b=[1 1 1 1];
>> x=seidel(A,b)
0 0.00000 0.00000 0.00000 0.00000
1 0.25000 0.31250 0.32813 0.33203
2 0.32813 0.41406 0.43652 0.35913
3 0.35352 0.44751 0.45166 0.36292
4 0.36188 0.45338 0.45407 0.36352
5 0.36335 0.45436 0.45447 0.36362
6 0.36359 0.45451 0.45453 0.36363
x=
0.3636
0.4545
0.4545
0.3636
17.2.4.- Calculo de la matriz Inversa usando el Mtodo de Jordan
function x=inversaJordan(AA)
[n n]=size(AA);
A=[AA eye(n)];
n1=2*n;
for i=1:n
may=abs(A(i,i));
115

fila=i;
for k=i+1:n
if abs (A(k,i))>may
may=abs(A(k,i));
fila=k;
end
end
temp=A(i,:);
A(i,:)=A(fila,:);
A(fila,:)=temp;
if A(i,i)==0
fprintf(' el sistema singular, no tine solucion ');
return
end
factor=A(i,i);
for j=i:n1;
A(i,j)=A(i,j)/factor;
end
for k=1:n
if k~=i
piv=A(k,i);
for j=i:n1
A(k,j)=A(k,j)-piv*A(i,j);
end
end
end
end
x=zeros(n,n);
for i=1:n
for j=n+1:n1
x(i,j-n)=A(i,j);
end
end
Ejecucin del Programa
>> A=[4 -9 2; 2 -4 6; 1 -1 3];
>> R=inversaJordan(A)
R=
0.3000 -1.2500 2.3000
0
-0.5000 1.0000
-0.1000 0.2500 -0.1000
17.2.5.- Calculo del determinante de una matriz
function y=determinante(A)
[n n]=size(A);
for k=1:n
if A(k,k)==0
r=k+1;
while r<=n & A(r,k)==0
116

r=r+1;
end
if(r<=n)
temp=A(k,:);
A(k,:)=A(r,:);
A(r,:)=temp;
else
fprintf('El sistema es singular no se puede resolver');
return;
end
end
for i=k+1:n
pivote=A(i,k)/A(k,k);
for j=k:n
A(i,j)=A(i,j)-pivote*A(k,j);
end
end
end
det=1;
for i=1:n
det=det*A(i,i);
end
y=det;
Ejecucin del Programa
>> A=[4 -9 2; 2 -4 6; 1 -1 3];
>> determinante(A)
ans =
-20
17.2.6.- Solucin de un sistema de n ecuaciones con n incgnitas usando
el mtodo de kramer
function y=obtener(A,n,b,col)
temp=A;
for i=1:n
temp(i,col)=b(i);
end
y=temp;
kramer.m
clear
n=input('Numero de ecuaciones: ');
A=zeros(n,n);

117

b=zeros(n,1);
for i=1:n
for j=1:n
fprintf('A(%d,%d):',i,j);
A(i,j)=input('');
end
fprintf('b(%d): ',i);
b(i)=input('');
end
temp=A;
d=determinante(temp,n);
fprintf('El determinante es : %f \n',d);
for i=1:n
temp=obtener(A,n,b,i);
x(i)=determinante(temp,n)/d;
end
disp('La solucion es ');
for i=1:n;
fprintf('x(%d) : %f\n',i,x(i));
end
Ejecucin del Programa
>> kramer
Numero de ecuaciones: 3
A(1,1):4
A(1,2):-9
A(1,3):2
b(1): 5
A(2,1):2
A(2,2):-4
A(2,3):6
b(2): 3
A(3,1):1
A(3,2):-1
A(3,3):3
b(3): 4
El determinante es : -20.000000
La solucion es
x(1) : 6.950000
x(2) : 2.500000
x(3) : -0.150000
17.3.- Mtodos de Interpolacin de funciones
17.3.1.- Mtodo de Lagrange
function p=lagrange(x,y,x0)
% x arreglo donde van las x
118

% y arreglo donde van las y


% x0 valor donde se desea interpolar
n=length(x);
L=zeros(n,1);
for k=1:n
prod1=1;
prod2=1;
for i=1:n
if i~=k
prod1=prod1*(x0-x(i));
prod2=prod2*(x(k)-x(i));
end
end
l(k)=prod1/prod2;
end
p=0;
for k=1:n
p=p+l(k)*y(k);
end
Ejecucin del Programa
>> x=[0 1 3 6];
>> y=[-3 0 5 7];
>> lagrange(x,y,1.8)
ans =
2.2176
17.3.2.- Mtodo de Diferencias Divididas
function p=difDivNewton(x,y,x0);
% x arreglo donde van las x
% y arreglo donde van las f(x)
% x0 valor donde se desea interpolar
% Resultados
% F tabla de diferencias divididas
% p valor interpolado
n=length(x);
F=zeros(n,n);
for i=1:n
F(i,1)=y(i);
end
for j=2:n
k=j-1;
for i=1:n+1-j
F(i,j)=(F(i+1,k)-F(i,k))/(x(i+j-1)-x(i));
end
end
119

prod=1;
suma=0;
for j=1:n
suma=suma+F(1,j)*prod;
prod=prod*(x0-x(j));
end
% tabla
fprintf('\n x
F[]\n');
fprintf('============');
for j=1:n
fprintf('==========');
end
fprintf('\n');
for i=1:n
fprintf('%10.6f',x(i));
for j=1:n+1-i;
fprintf('%10.6f',F(i,j));
end
fprintf('\n');
end
p=suma;
fprintf('\nEl Valor de la funcion es : %f',p);
Ejecucin del Programa
>> x=[0 1 4 6];
>> y=[1 -1 1 -1];
>> difDivNewton(x,y,2)
x
F[]
====================================================
0.000000 1.000000 -2.000000 0.666667 -0.166667
1.000000 -1.000000 0.666667 -0.333333
4.000000 1.000000 -1.000000
6.000000 -1.000000
El Valor de la funcion es : -1.000000
ans =
-1
17.3.3.- Mtodo de Neville
function p=Neville(x,y,x0)
% Datos
% x = es el vector x
% y = es el vector f(x)
% x0 = es el valor donde se va a evaluar el Polinomio
% Resultados
120

% p = valor interpolado
n=length(x);
Q=zeros(n,n);
for i=1:n
Q(i,1)=y(i);
end
for i=2:n
for j=2:i
Q(i,j)= ((x0-x(i-j+1))*Q(i,j-1)-(x0-x(i))*Q(i-1,j-1))/(x(i)-x(i-j+1));
end
end
for i=1:n
fprintf('\n');
for j=1:n
if j<=i
fprintf('%10.5f',Q(i,j));
end
end
fprintf('\n');
end
p=Q(n,n)
Ejecucin del Programa
>> p=neville(x,y,2)
1.00000
-1.00000 -3.00000
1.00000 -0.33333 -1.66667
-1.00000 3.00000 0.33333 -1.00000
p=
-1
17.4.- Mtodo de Newton para ecuaciones multivariable
function y=funcion(x)
fun(1,1) = 3*x(1) - cos(x(2)*x(3)) - 0.5;
fun(2,1) = x(1)^2 - 625*x(2)^2;
fun(3,1) = exp(-x(1)*x(2)) + 20*x(3) + (10*pi-3)/3;
y=fun;
function y=jacobiano(x)
jac(1,1) = 3;
jac(1,2) = x(3)*sin(x(2)*x(3));
jac(1,3) = x(2)*sin(x(2)*x(3));
jac(2,1) = 2*x(1);
jac(2,2) = -1250*x(2);

121

jac(2,3) = 0;
jac(3,1) = -x(2)*exp(-x(1)*x(2));
jac(3,2) = -x(1)*exp(-x(1)*x(2));
jac(3,3) = 20;
y=jac;
Newton Multivariable
clear
tolerancia=0.0001;
n=3;
disp('Valores del Punto Inicial');
for i=1:n
fprintf('x(%d): ',i);
x0(i)=input(' ');
end
ban=0;
k=0;
while ban==0
k=k+1;
j=jacobiano(x0);
inversajac=inv(j);
negfuncion=-funcion(x0);
prod=inversajac*negfuncion;
temp= x0' + prod;
x=temp';
suma=0;
for i=1:n
suma = suma+ (x(i)-x0(i))^2;
end
valor=sqrt(suma);
if valor<=tolerancia
disp('La solucion aproximada es ');
x
ban=1;
else
x0=x;
end
end
Ejecucin del Programa
>> newtonMultiv
Valores del Punto Inicial
x(1): 1
x(2): 1
x(3): 1
La solucin aproximada es
x=
0.5000 0.0200 -0.5231

122

18.- Optimizacin de Funciones


18.1.- Optimizacin de funciones de una sola Variable (Mtodo de la
Seccin Dorada)
Un individuo ha invertido en acciones de cierta compaa durante los ltimos 10
aos. El valor de su cartera a lo largo del tiempo (dinero invertido ms
beneficios obtenidos, en miles) viene dado por la siguiente expresin (x en
aos)
F(x) = (x-2)2.(1-2x) + 252x + 116

0<=x<=10

El individuo retira sus ingresos transcurridos los 10 aos Cual hubiera sido
realmente el mejor momento para haberlo hecho? Cunto pierde por no
haberlo retirado en el momento ptimo?
Solucin
function y=f(x)
y= ((x-2)^2)*(1-2*x)+252*x+116;
Mtodo de la seccin dorada
clear all
clc
R=(sqrt(5)-1)/2;
a = input('Valor de a : ');
b = input('Valor de b : ');
tol=0.001;
i=0;
while 1
i=i+1;
d=R*(b-a);
x1 = a+d;
x2 = b-d;
if f(x1) > f(x2)
xopt=x1;
else
xopt=x2;
end
ea=(1-R)*abs((b-a)/xopt)*100;
if ea <=tol
disp('El x optimo es :');
disp(xopt);
disp('El maximo de la funcion es : ');
disp(f(xopt));
break;
end;
if f(x1)>f(x2)

123

a=x2;
else
b=x1;
end
end
Corrida del Programa
Valor de a : 0
Valor de b : 10
El x optimo es :
8.0000
El maximo de la funcion es : 1592.00
Resultados
El mejor momento para retirar hubiera sido a los 8 aos,
Individuo lo retiro a los 10 aos
F(10)= 1420
Por lo tanto pierde
optimo.

entonces

si el

1592- 1420 = 172 por no haberlo retirado en el momento

18.2.- Mtodo de Optimizacin para funciones multivariable


a) Mtodo usando el gradiente
function y=f(x)
y=100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
function y=gradiente(x)
grad(1) = -400*(x(2)-x(1)^2)*x(1)-2+2*x(1);
grad(2) = 200*x(2)-200*x(1)^2
y=grad;
Multivariable Gradiente
clear
error=0.000000001;
lambda=0.001;
n=2;
fprintf('Punto inicial : \n');
for i=1:n
fprintf('x(%d): ',i);
x0(1,i)=input(' ');
end
exito=0;
while exito==0
x = x0-lambda*gradiente(x0);
dif=abs(f(x)-f(x0));
if dif <=error

124

fprintf('El xoptimo es :\n');


disp(x);
fprintf('El minimo es : %10.6f\n',f(x));
exito=1;
else
x0=x;
end
end
Ejecucin del Programa
>> optimizacion01
Punto inicial :
x(1): 2
x(2): 1
El xoptimo es :
0.9989 0.9978
El minimo es : 0.000001
>>
b) Optimizacin usando el mtodo de newton
function y=f(x)
y=100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
function y=gradiente(x)
grad(1) = -400*(x(2)-x(1)^2)*x(1)-2+2*x(1);
grad(2) = 200*x(2)-200*x(1)^2;
y=grad;

function y=hessiano(x)
hess(1,1) = -400*x(2) + 1200*x(1)^2+2;
hess(1,2) = -400*x(1);
hess(2,1) = -400*x(1);
hess(2,2) = 200;
y=hess;
Algoritmo de Optimizacin de Newton
clear
error=0.00000001;
lambda=0.001;
n=2;
iter=0;
fprintf('Punto inicial : \n');
for i=1:n
fprintf('x(%d): ',i);
x0(1,i)=input(' ');

125

end
exito=0;
while exito==0
iter=iter+1;
h=hessiano(x0);
ih=inv(h);
x = x0-lambda*gradiente(x0)*ih;
dif=abs(f(x)-f(x0));
% fprintf('El valor de f(x0) es : %10.6f y el de f(x) = %10.6f\n',f(x0),f(x));
if dif <=error
fprintf('El xoptimo es :\n');
disp(x);
fprintf('El minimo es : %10.6f\n',f(x));
exito=1;
else
x0=x;
end
end
Ejecucin del Programa
>> optiNewton
Punto inicial :
x(1): 2
x(2): 1
El xoptimo es :
1.0022 1.0045
El minimo es : 0.000005
>>

126

Bibliografa

1. Luis Joyanes Aguilar. Fundamentos de Programacin. McGrawHill/Interamericana de Espaa. 3ra Edicin. 2003
2. Luis Joyanes Aguilar, Matilde Fernndez Azuela, Lucas Snchez Garca,
Ignacio Zahonero Martnez. Estructura de Datos en C. McGrawHill/Interamericana de Espaa. 1era Edicion. 2005.
3. Flix Garca Caballeira, Alejandro Caldern Mateos, Jess Carretero
Prez, Javier Fernndez Muoz, Jos Prez Menor. Problemas
resueltos de Programacin en Lenguaje C. Thomson Editores. 1era
Edicin. 2003.
4. Osvaldo Cair. Metodologa de Programacin. Editorial Alfaomega. 3era
Edicin. 2005
5. Francisco Javier Ceballos. Programacin en C++. Editorial Alfaomega.
3ra Edicin. 2004.
6. Osvaldo

Cair.

Fundamentos

de

Programacin,

Piensa

en

C.

Pearson/Prentice Hall. 1era Edicin. 2006


7. Harver M. Deitel, Paul J. Deitel. C++ como programar. Pearson/Prentice
Hall. 4ta Edicin. 2003
8. Luis Joyanes Aguilar. C++ a su alcance. Mc Graw-Hill. 1era Edicin.
1995

127

You might also like