Professional Documents
Culture Documents
Prompt
Ventana del Espacio de
Trabajo y Ventana del
Directorio Actual de
Trabajo
Ventana de Comandos
Ventana de historial de
Comandos utilizados
Escalares
Nmeros complejos
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
Cada vez que se ejecuta el comando disp, la salida aparece en una nueva
lnea. Por ejemplo:
Carcter de borrado
Tabulacin horizontal.
( )
Operacin
Suma
Resta
Multiplicacin
Divisin
Divisin en sentido contrario ( 2\1) = 0.5
Potencia
Transpuesta
Parntesis
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
10
Ejemplo 2
11
12
Ejemplo 6
Figura 22: Ejecucin del programa de periodo de tiempo
Ejemplo 6
13
14
Menor que
<=
Menor o igual
>
Mayor que
>=
Mayor o igual
==
Igual a
~=
Distinto a
15
AND
OR
NOT
condicin
Instrucciones
end
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
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.
4.
5.
20
6.
7.
8.
9.
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)
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.
22
Ejecucin
Ejemplo mltiple 02
23
Ejecucin a
Ejecucin b
Ejecucin c
Ejemplo mltiple 03
24
Ejecucin
25
Ejecucin
Ejemplo mientras 02
Ejecucin
Ejemplo mientras 03
26
Ejecucin
Ejecucin
Ejemplo for 02
Ejecucin
27
Ejemplo for 03
Ejecucin
Ejecucin
28
Ejemplo repetitivo 02
Ejecucin
29
Ejemplo repetitivo 03
Ejecucin
Ejemplo repetitivo 04
Ejecucin
Ejemplo repetitivo 05
30
Ejecucin
Ejemplo repetitivo 06
31
Ejecucin
Ejemplo repetitivo 07
32
Ejecucin
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
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
2
+
A
2.-
3
+
A+B
(n+1)
+
A + 2B
+ ..... +
A + 3B
A + nB
2
-
3
+
A+B
4
-
A + 2B
(N+1)
+ .....
A + 3B
A + NB
40
3.-
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.-
X3
1+ X+
+
+ ...............
2!
3!
Hasta que el termino |xn/n!| < 0.001. Se debe ingresar el valor de X.
6.-
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.-
(n-1)!
-
A
9.-
(n-2)!
+
A+B
(n-3)!
-
A+2B
1!
+ ........
A+3B
A+(n-1)B
41
k2 + 1
k=
= 1000
n=?
k
Ejercicios De Series
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.-
8.-
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
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.
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
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
2.5000
5.0000
7.5000 10.0000
46
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)
47
5
6
7
8
9
10
11
12
>>
48
Define un vector V
10
13
16
19
>> V(5)
ans =
13
>> V (1) =2
V=
2
10
13
16
19
>> V (5)^V(1)+sqrt(V(6))
ans =
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 =
25
>>
49
VC(m:n)
Para matrices:
M(:,n)
M(n,:)
M(:,n)
M(:,m:n)
M(m:n,:)
M(m:n,p:q)
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
50
>> B=MA(:,3)
B=
5
6
9
12
15
>> C=MA(2:4,:)
C=
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
>> D=MA(3:5,4:6)
D=
12 15 18
16 20 24
20 25 30
>> V(5:10)=15:3:30
V=
5
18
21
11
11
27
30
12
>> W(7)=13
W=
10
24
13
>> x(3)=14
x=
0
14
51
12
15
13
16
>> M(3,:)=[1:3]
M=
11
14
1
12 13
15 16
2 3
>> N=eye(3)
N=
1
0
0
0
1
0
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
22
23
24
25
26
>> X(4)=[ ]
X=
21
22
23
25
>> X(2:4)=[ ]
X=
21
26
26
27
27
32
33
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
Funcin
length(X)
Descripcin
Devuelve el numero de elementos
de X
size(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 =
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)
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
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
11
18
12
17
22
17
23
18
>> A-B
ans =
33
35
>> C-5
ans =
26
30
28
30
30
30
>> P=M*N
P=
59 78
110 143
20 27
>> Q=N*M
??? Error using ==> *
Inner matrix dimensions must agree.
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
>> Y=[1;2;3]
Y=
1
2
3
>> X*Y
ans =
48
>> Y*X
ans =
5
10
15
A11
Si tenemos las matrices A A21
A31
A12
A22
A32
A13
B11
A23 y B B21
B31
A33
B12
B22
B32
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
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
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=
0
1
0
>> M*M^-1
ans =
1
0
0
0
1
0
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
>> Xb=inv(A)*B
Xb =
4.0000
-2.0000
3.0000
>> C=[2 4 3;4 5 1;6 6 -2];
Forma XC=D
60
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
Descripcin
Multiplicacin
Exponenciacin
Divisin derecha
Divisin izquierda
Ejemplos:
>> M=[1 2 3;4 5 6]
M=
1
4
2
5
3
6
8
4
16
20
>> P=M./N
P=
9
6
>> M.*N
ans =
7
8
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
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
>> y=x.^2-4*x
y=
-3
-4
-3
>> z=[1:2:15]
z=
1
11
13
15
>> Y=(z.^3+5*z)./(4*z.^2-10)
Y=
-1.0000
1.6154
1.6667
2.0323
2.4650
2.9241
3.3964
3.8764
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)
sum(A)
sort(A)
median(A)
std(A)
Si A es un vector, devuelve la
desviacin estndar de los elementos
del vector.
det(A)
dot(a,b)
cross(a,b)
inv(A)
63
Descripcin
Genera un nmero aleatorio entre
0y1
rand(1,n)
rand(n)
rand(m,n)
Ejemplo
>> 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.0579
0.3529
9.0029
2.9232
8.7238 -1.3053
2.2344
7.7580 -1.8817
64
56
58
58
74
61
58
51
80
68
87
69
67
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
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
68
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
73
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
76
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
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)
78
79
80
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
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
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
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
25
19
23
29
32
28
>> sumaColumnas(M)
ans =
65
67
89
88
23
19
25
28
32
29
25
23
29
28
89
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
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)
94
95
96
97
98
Y ahora escribimos
>>x>4
ans =
0
0
menor que
mayor que
menor o igual
mayor o igual
igual
distinto
f (x) =
x^2
1
-x + 2
si x < 0
si 0 <= x < 1
si 1 <=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
t [a; b]
t (t 2 1) 2t (t 2 1)
r (t ) 2
, 2
;
t 1
t 1
5 t 5
101
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.
102
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
2
; 3 t 3
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
r h( ),
1 ,2
103
a) r 7 7 sen( );
b) r 3 6sen( );
c) r sen(6 );
d ) r cos(8 );
e) r 5cos(2 );
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
106
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
107
3.55556
0.36409
0.00604
0.00000
108
111
112
- 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
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
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
124
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.
127