Professional Documents
Culture Documents
Prompt
Ventana de Comandos
Ventana de historial de
Comandos utilizados
1
3. El tipo de dato fundamental son vectores y matrices de números complejos
almacenados en aritmética flotante de doble precisión.
Escalares
Números complejos
2
2.1.1 Variables predefinidas
Nombre Significado
Pi π
Inf Infinito
NaN Not a Number
i,j Imaginario
Comandos Valor de pi
long 3.14159265358979
short e 3.1416e+000
long e 3.14159265358979e+000
hex 400921fb54442d18
bank 3.14
+ +
rat 355/113
short 3.1416
Este comando se utiliza para visualizar un texto o contenido de una variable sin
mostrar su nombre. El formato de este comando es:
3
Cada vez que se ejecuta el comando disp, la salida aparece en una nueva
línea. Por ejemplo:
Por ejemplo:
4
Con el comando fprintf es posible empezar una nueva línea e indicarlo en la
mitad de la cadena que se introduce como parámetro. Esto se hace insertando
\n antes del carácter que va empezar en la línea siguiente, Como en el ejemplo
anterior (figura 5).
Al carácter \n se le denomina carácter de escape. Es uno de los caracteres
utilizados para controlar la salida. Además, existen estos otros caracteres de
escape que pueden ser insertados dentro de una cadena:
\b Carácter de borrado
\t Tabulación horizontal.
Ejemplo:
El símbolo % marca del lugar donde se insertará el número dentro del texto.
El flag o bandera, cuyo carácter es opcional, puede ser uno de los siguientes:
5
número que se visualiza es menor que el ancho de campo, se añadirán ceros o
espacios delante del número en cuestión. La precisión se corresponde con el
segundo número (figura 6), y especifica el número de dígitos que se mostrarán
a la derecha del punto decimal.
i Entero
Ejemplo:
6
6.- Operadores aritméticos básicos son:
Símbolo Operación
+ Suma
- Resta
* Multiplicación
/ División
\ División en sentido contrario ( 2\1) = 0.5
^ Potencia
‘ Transpuesta
( ) Paréntesis
Función Comentario
sin(x) Seno
cos(x) Coseno
tan(x) Tangente
asin(x) arco seno
acos(x) arco coseno
atan(x) arco tangente (devuelve un ángulo entre –pi/2 y +pi/2)
atan2(y, x) Devuelve un ángulo entre –pi y pi; se le pasan 2 argumentos,
proporcionales al seno y al coseno
sinh(x) seno hiperbólico
cosh(x) coseno hiperbólico
tanh(x) tangente hiperbólica
asinh(x) arco seno hiperbólico
acosh(x) arco coseno hiperbólico
atanh(x) arco tangente hiperbólica
7
imag(x) parte imaginaria
abs(x) valor absoluto
angle(x) Ángulos de fase
8
8.1 Comentarios en Matlab
Ejemplo
Ingresar la base y la altura de un Rectángulo y reportar el area, el perímetro y
la diagonal.
9
reporta el valor del área, el perímetro y la diagonal como se muestra en la
figura 12.
Ejemplo 1
10
Ejemplo 2
Ejemplo 3
11
Figura 18: Ejecución del programa para calcular promedio
Ejemplo 4
12
Ejemplo 6
Ejemplo 6
Ejemplo 7
13
Figura 26: Programa para calcular ángulos de un triangulo
Practica Nº 1
14
1 metro = 3.2 pies
11. Hacer un programa para que se ingrese una cantidad en kilos y reporte su
equivalencia en libras.
1 kilo = 2.2 libras
13. Calcular la altura que cae un objeto. Se debe ingresar el tiempo recorrido en
segundos.
== Igual a
~= Distinto a
15
10.2.- Operadores lógicos
& AND
| OR
~ NOT
if condición
Instrucciones1
else
Instrucciones2
end
if condición
Instrucciones
end
if condicion1
instrucciones1
elseif condicion2
instrucciones2
elseif condicion3
instrucciones3
elseif condición4
instrucciones4
…
else % opción por defecto cuando no se cumple
% ninguna de las anteriores
Instrucciones n
end
16
11.2.- Ejemplos de condicionales (o selectivas)
Ejemplo Condicional 01
Ejecución
Ejemplo Condicional 02
Ejecución
Ejemplo Condicional 03
17
Ejecución
Ejemplo Condicional 04
D de
18
Ejecución
Ejemplo Condicional 05
Ejecución
19
Ejemplo Condicional 06
Ejecución
Practica Nº 2
20
6. La comisión de las ventas totales es como sigue:
a) Si VENTAS < S/.80, entonces no hay comisión.
b) Si S/.80 <= VENTAS <= S/.600 entonces la comisión es igual al 12%
de las ventas.
c) Si VENTAS > 600 entonces la comisión es igual al 15% de las
ventas.
Hacer un programa para que se ingrese las ventas y se reporte la
comisión.
Hacer un programa para que se ingresen los valores de los lados del
triángulo y si estos valores cumplen las condiciones calcular el área del
triángulo en caso contrario reportar 'DATOS INCORRECTOS'.
AREA= s(s-a)(s-b)(s-c)
y = x 2 + 5 Si x<=0
y = 3x - 1 Si 0 < x < 2
y = x2 - 4x + 5 Sí x>=2
21
12. Los empleados de una fábrica 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 día de la semana.
En primer lugar, se evalúa la expresión del switch, cuyo resultado debe ser un
número 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. Sólo se ejecutará el que coincida. Si ningún valor de los
case coincide, entonces se ejecutarán las instrucciones indicadas en otherwise.
Observar que se puede agrupar más de un valor en un case.
Ejemplo múltiple 01
22
Ejecución
Ejemplo múltiple 02
23
Ejecución a
Ejecución b
Ejecución c
Ejemplo múltiple 03
24
Ejecución
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
for v=vi:vf
Instrucciones
end
25
12.1.- Ejemplos While…end
Ejemplo mientras 01
Ejecución
Ejemplo mientras 02
Ejecución
Ejemplo mientras 03
26
Ejecución
Ejemplo for 01
Ejecución
Ejemplo for 02
Ejecución
27
Ejemplo for 03
Ejecución
Ejemplo repetitivo 01
Ejecución
28
Ejemplo repetitivo 02
Ejecución
29
Ejemplo repetitivo 03
Ejecución
Ejemplo repetitivo 04
Ejecución
Ejemplo repetitivo 05
30
Ejecución
Ejemplo repetitivo 06
31
Ejecución
Ejemplo repetitivo 07
32
Ejecución
Inicializamos P = 1;
Y en el proceso de multiplicación
P = P * valor_a_multiplicar;
Ejemplo repetitivo 08
Ejecución
33
Ejemplo repetitivo 09
Ejecución
Ejemplo 10
Calcular la suma de los n términos de la siguiente serie:
Ejecución
34
Ejemplo 11
Ejecución
Ejemplo 12
35
Ejecución
Ejemplo 13
Calcular la sumatoria:
Ejecución
36
Ejercicios Resueltos
clc
n=input('ingrese numero :');
disp('Los divisores son ');
for i=1:n
if rem(n,i)==0
fprintf('%d ',i);
end
end
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
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 número 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
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);
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
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);
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
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 número 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);
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
Ejercicios De Sumatorias
1.- Escribir un programa que permita leer 3 números positivos A,B, n: n>0
calcule el valor de la sumatoria:
1 2 3 4 (n+1)
+ + + + ..... +
A A+B A + 2B A + 3B A + nB
1 2 3 4 (N+1)
- + - + .....
A A+B A + 2B A + 3B A + NB
40
3.- Escribir un programa que lea 3 números enteros positivos a, b, n>0,
calcule la sumatoria de:
1! 2! 3! 4! (n+1)!
- + - + .....
A A+B A + 2B A + 3B A + nB
4.- Escribir un programa que calcule el valor del número "e" como la suma
de la serie:
1 1 1
e = 1/i = + + + .............
0! 1! 2!
La sumatoria terminará cuando se tenga el primer término inferior a
0.001
X2 X3
1+ X+ + + ...............
2! 3!
Hasta que el termino |xn/n!| < 0.001. Se debe ingresar el valor de X.
X X2 X3 X4
f(x) = 1 + - + - + .....
3! 5! 7! 9!
La sumatoria termina cuando se tiene un término: | Xn/Y! | < 0.001.
7.- Escriba un programa que permita calcular el valor de f(x) para valores
desde X=X1 hasta X=X2.
X3 X5 X7 X9
f(x) = X + - + - + .....
3! 5! 7! 9!
Cada sumatoria termina cuando se tiene un término : | Xn/Y! | < 0.001.
8.- Escribir un programa que que lea 3 números enteros A, B y n (n>0, A>0
y B>0) y calcule la sumatoria de
9.- Escribir un programa que permita calcular cuantos términos debe tener
esta sumatoria para que el valor de esta sea lo más 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 número entero n>0 y que
imprima los n términos de la serie:
1 2 3 4 5 n
+ + + + + ....... +
2 3 4 5 6 n+1
2.- Escribir un programa que permita imprimir los números de fibonacci,
menores que un número n ingresado por el teclado.
3.- Escribir un programa que lea un número entero n>0 y que imprima los n
términos de la serie:
4, 12, 24, 40, 60........ Debe imprimir también la suma de los n términos.
4.- Escribir un programa que lea un número entero n>0 y que imprima los n
términos de la serie:
4, 9, 15, 23, 34, 49,..... Debe imprimir también la suma de los n términos.
5.- Escribir un programa que lea un número entero n>0 y que imprima los n
términos de la serie:
10, 15, 23, 35, 53, 80,..........
Además se debe imprimir la suma de los n términos.
6.- Escribir un programa que calcule e imprima el valor de los n términos de
la serie:
2, 1, 1, 2, 8, 64.......
42
Ejercicios Varios
2.- Escribir un programa que permita leer un número entero N>0 y que imprima
todos los números primos menores o iguales que N.
3.- Escribir un programa que determine todos los números primos que se
encuentran entre 2 números n1 y n2.
n1 y n2 se ingresan por teclado.
4.- Escribir un programa que permita mostrar todos los números perfectos
menores que 1000.
9.- Escribir un programa que permita leer números enteros diferentes de cero y
que al finalizar imprima:
a.- El número mayor y el número menor.
b.- El total de números leídos.
c.- La cantidad de números positivos y números 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 números enteros diferentes de cero
y que imprima:
- El mínimo número negativo leído.
- El máximo número positivo leído.
- La cantidad de datos leídos.
- La cantidad de impares positivos.
- La cantidad de pares negativos.
43
Si no se ingreso ningún número negativo debe imprimirse el mensaje: "No se
ingresaron números negativos". Si no se ingresó ningún número positivo debe
imprimirse el mensaje "No se ingresaron números positivos.
12.- Escribir un programa que permita leer las notas de 3 parciales para 40
alumnos (las notas están 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 más baja de las 3
primeras y se calcula nuevamente el promedio del alumno.
Se desea saber:
- El número de aprobados sin sustitutorio.
- El número de aprobados con sustitutorio.
- El número de alumnos que rinden examen sustitutorio.
- El número de alumnos con promedio final desaprobatorio.
El número de alumnos que a pesar de aprobar el sustitutorio al final son
desaprobados.
********
********
********
********
44
10, 11, 12, 14, 17, 22, 30, 34, 37, 44, 54,...
Ayuda: los dos primeros términos son 10 y 11, a partir de allí, cada término se
forma al aumentar a cada término la suma de los dígitos del término anterior.
18. Determinar cuales son los números de 3 dígitos, cuya suma de sus dígitos
es igual a N. Se debe ingresar el valor de N.
20. Dado un número entero, mostrar la lista de todos sus divisores Impares,
además mostrar la suma de todos sus divisores.
> >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 8 9
Para trabajar con los elementos individuales del vector se usa el nombre del
vector con un índice de la siguiente manera
8
12
30
45
13.1.- Creación de un Vector usando un valor inicial, valor final y el
incremento
Ejemplos:
>> a = [1:2:15]
a=
1 3 5 7 9 11 13 15
>> b = [1:0.1:2]
b=
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000
2.0000
>> x=linspace(0,10,5)
x=
46
Se visualizan los elementos
Para trabajar con los elementos individuales de una matriz se usa lo siguiente
Nombre_matriz(índice_fila,índice_columna)
Sintaxis:
zeros(m,n) Crea una matriz de m filas y n columnas,
elementos ceros.
ones(m,n) Crea una matriz de m filas y n columnas,
elementos unos.
eye(n) 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 transposición
>> VC=VF'
Define un vector columna VC
VC =
A partir de la transpuesta de VF
5
7
9
>> MB=MA'
MB = Define una matriz MB con 4 filas
Y 3 columnas. A partir de la
1 5 9 transpuesta de la matriz MA
2 6 10
3 7 11
4 8 12
>>
48
13.5.- Manipulación de Arreglos
13.5.1.- Vectores
>> V(5)
ans = Visualiza el quinto elemento
13
>> V (1) =2 Asigna un nuevo valor al primer elemento
V=
2 4 7 10 13 16 19
>> V (5)^V(1)+sqrt(V(6))
Utilización de los elementos del vector en
ans =
Operaciones matemáticas
173
>>
13.5.2.- Matrices
>> M=[3:6;linspace(10,40,4);15:-1:12]
Crea una matriz 3x4
M=
3 4 5 6
10 20 30 40
15 14 13 12
>> M(2,3)=25
M= Asigna un nuevo valor al elemento (2,3)
3 4 5 6
10 20 25 40
15 14 13 12
>> M(2,4)-M(3,1)
ans = Utilización de los elementos de la matriz
en operaciones matemáticas
25
>>
49
13.6.- Utilización de los dos puntos (:) en la manipulación de arreglos
Para vectores:
Para matrices:
Ejemplos:
>> MA=[1:2:11;2:2:12;3:3:18;4:4:24;5:5:30]
MA = Se define una matriz MA con 5 filas y 6
1 3 5 7 9 11 columnas
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
50
>> B=MA(:,3)
B= Se define un vector columna B a partir
5 de los elementos de la columna 3 de la
6 matriz MA
9
12
15
>> V=5:8
V= Define un vector V con 4 elementos
5 6 7 8
5 6 7 8 15 18 21 24 27 30
10 11 12
>> W(7)=13
Asigna un nuevo valor al séptimo elemento
W=
10 11 12 0 0 0 13
>> x(3)=14
x=
0 0 14
51
Adición de elementos a una matriz:
11 12 13
14 15 16
>> M(3,:)=[1:3]
M= Añade el vector 1 2 3 a la tercera fila de M
11 12 13
14 15 16
1 2 3
1 0 0
0 1 0
0 0 1
21 22 23 24 25 26 27
31 32 33 34
52
35 36 37 38
39 40 41 42
31 34
35 38
39 42
6
size(X) Devuelve un vector fila [m,n] >> X=[4 6 8;7 9 11]
donde m y n representan el tamaño X=
mxn del arreglo X 4 6 8
7 9 11
>> size(X)
ans =
2 3
reshape(X,m,n) Reordena una matriz X, que tiene r >> X=[11 12 13;14 15 16]
filas y s columnas, a una matriz de X=
m filas y n columnas. El valor de rxs 11 12 13
debe ser igual al de mxn 14 15 16
>> Y=reshape(X,3,2)
Y=
11 15
14 13
12 16
diag(x) Cuando x es un vector, este >> x=[9 7 5];
comando crea una matriz cuadrada >> diag(x)
ans =
con los elementos de x en la diagonal
9 0 0
0 7 0
0 0 5
diag(X) Cuando X es una matriz, este >> X=[15 14 13;9 8 7;4 3 2]
comando crea un vector a partir de X=
15 14 13
los elementos de la diagonal X
53
9 8 7
4 3 2
>> diag(X)
ans =
15
8
2
>> C(5)
ans =
>> C(16)
ans =
Ejemplo
54
Info =
12 15 7
10 11 12
19 18 17
21 22 23
16 17 18
31 33 35
35 35 35
26 28 30
30 30 30
55
Si M y N son dos matrices, la operación M*N se ejecuta solamente si el número
de columnas de la matriz M es igual al número de filas de la matriz N. El
resultado es una matriz que tiene el mismo número de filas que M y el mismo
número de columnas que N.
Ejemplo:
56
El producto de la multiplicación de dos matrices cuadradas (deben ser del
mismo tamaño) es también una matriz cuadrada del mismo tamaño. Sin
embargo, la multiplicación de matrices no es conmutativa.
Ejemplo:
5 8 9
1
2
3
ans =
48
5 8 9
10 16 18
15 24 27
57
( A11 B11 A12 B21 A13 B31 ) ( A11B12 A12 B22 A13 B32 )
( A B A B A B ) ( A B A B A B )
21 11 22 21 23 31 21 12 22 22 23 32
( A31 B11 A32 B21 A33 B31 ) ( A31B12 A32 B22 A33 B32 )
Y en notación matricial:
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
BA = AB = I
2 1 4
4 1 8
2 -1 3
1 0 0
0 1 0
0 0 1
Determinantes:
El determinante esta asociada a las matrices cuadradas. Un determinante es
una función que asocia un número, llamado determinante de la matriz, a cada
matriz cuadrada M. El determinante se denota comúnmente por det (M) o |M|.
El determinante se calcula a partir de una regla específica. Ejemplo:
59
m m12 6 2
M 11 m11m22 m12 m21 , por ejemplo, 6.9 2.4 46
m21 m22 4 9
División de arreglos:
Matlab posee dos tipos de división de arreglos: la división derecha y la división
izquierda.
División izquierda \:
Se emplea para resolver ecuaciones matriciales AX=B. En esta ecuación X y B
son vectores columna. X=A\B
División derecha /:
Se emplea para resolver ecuaciones matriciales XC=D. En esta ecuación 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 2 4 3
4 5 6 y 24 z 4 5 1 18 24 4
o x y
3 1 2 z 4 6 6 2
>> B=[18;24;4];
4.0000
-2.0000
3.0000
60
>> D=[18 24 4];
Xd =
Símbolo Descripción
.* Multiplicación
.^ Exponenciación
./ División derecha
.\ División izquierda
Ejemplos:
1 2 3
4 5 6
7 8 9
2 4 6
7 16 27
8 20 36
61
0.1429 0.2500 0.3333
2.0000 1.2500 1.0000
Las operaciones elemento a elemento son muy útiles para calcular el valor de
una función pasándoles distintos valores de sus argumentos. Ejemplo:
1 2 3 4 5
-3 -4 -3 0 5
1 3 5 7 9 11 13 15
Y=
62
C=max(A) Si A es un vector, C contendrá el >> A=[4 8 1 6 3 21 13 58];
Elemento mayor de A. Si A es una >> C=max(A)
C=
Matriz, C contendrá un vector fila 58
Que representa el elemento mayor
De cada columna
[d,n]=max(A) Si A es un vector, d contendrá el >> A=[4 8 1 6 3 21 13 58];
Elemento mayor de A, y n la posición >> [d,n]=max(A)
d=
Del elemento (la posición de la primera 58
Aparición, si el mayor valor se repite n=
Varias veces en el vector) 8
min(A) Lo mismo que max(A), pero para el >> A=[4 6 8 7];
Elemento menor >> min(A)
ans =
4
[d,n]=min(A) Lo mismo que [d,n]= max(A), pero >> A=[4 6 8 7];
para el elemento menor >> [d,n]=min(A)
d=
4
n=
1
sum(A) Si A es un vector, calcula la suma de >> A=[4 6 8 7];
Sus elementos >> sum(A)
ans =
25
sort(A) Si A es un vector, devuelve el mismo >> A=[4 6 8 7];
Vector ordenado en orden ascendente >> sort(A)
ans =
4 6 7 8
median(A) Si A es un vector, devuelve el valor >> A=[4 6 8 7];
de la mediana de los elementos del >> median(A)
ans =
vector. 6.5000
std(A) Si A es un vector, devuelve la >> A=[4 6 8 7];
desviación estándar de los elementos >> std(A)
ans =
del vector. 1.7078
det(A) Devuelve el valor del determinante de >> A=[4 6 ;8 7];
la matriz cuadrada A >> det(A)
ans =
-20
dot(a,b) Calcula el producto escalar de dos >> a=[4 6 8 7];
vectores a y b. Los vectores pueden >> b=[1 2 3 4];
>> dot(a,b)
ser de tipo fila o columna. ans =
68
cross(a,b) Calcula el producto cruzado de dos >> a=[4 6 8];
vectores a y b, (axb). Ambos vectores >> b=[1 2 3];
>> cross(a,b)
deben tener 3 elementos ans =
2 -4 2
inv(A) Devuelve la inversa de una matriz >> A=[4 6 8;7 2 1;1 1 1];
cuadrada A >> inv(A)
ans =
0.1250 0.2500 -1.2500
-0.7500 -0.5000 6.5000
0.6250 0.2500 -4.2500
63
14.6.- Números aleatorios
Matlab posee dos comandos: rand y randn, que pueden ser utilizados para
asignar números aleatorios a variables.
Ejemplo
Crear un vector de 8 elementos con números aleatorios entre -2 y 10.
>> v=12*rand(1,8)-2
v=
Ejemplo
Crear una matriz de 3 x 4 con números aleatorios enteros en un intervalo de 50
a 90
>> M=round(40*rand(3,4)+50)
M=
64
56 74 51 87
58 61 80 69
58 58 68 67
Ejemplo
>> a=randn
a=
-0.4326
>> b=randn(1,5)
b=
>> c=randn(3,2)
c=
1.1892 0.1746
-0.0376 -0.1867
0.3273 0.7258
>> 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
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);
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
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
68
arreglo, si se encuentra eliminarlo si no se encuentra reportar dato no se
encuentra.
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
10.- Dada una colección de puntos (xi, yi), i=1,2,...,n, existe una recta L:
y=Mx+B para la cual es mínima la suma de los cuadrados de las distancias de
los puntos a la recta. Así, L constituye la recta mas próxima-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
regresión asociada a una colección de datos.
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);
7.- Sea un vector de tipo real (de 15 elementos), encuentre el promedio de los
húmeros enteros ingresados en el vector.
71
9.- Lea dos vectores A y B y luego diga que elementos del vector A no se
encuentran en B.
20.- Ingrese los nombres y las notas de n alumnos y reportar una lista en orden
alfabético y otra lista en orden de merito.
21.- Ingrese los nombres y las tallas de los jugadores de un equipo de fútbol y
determine la talla promedio y el nombre del jugador más alto.
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 números 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 posición determinada.
Al final debe imprimir la lista resultante.
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
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
2.- Programa para ingresar una matriz de f filas y c columnas, y que se haga lo
siguiente:
a) Ingresar un número de fila y eliminarla de la matriz.
b) Ingresar un número de columna y eliminarla de la matriz.
c) Ingresar un número de fila e insertar una fila en la matriz.
d) Ingresar un número de columna e insertar una columna en la matriz.
e) Intercambiar 2 filas de la Matriz. El número de las filas a intercambiar debe
ingresarse.
f) Intercambiar 2 columnas de la Matriz. El número de las columnas a
intercambiar debe ingresarse.
g) Ordenar las filas de una matriz
h) Ordenar las columnas de una matriz
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 penúltima y así sucesivamente).
7.- Hacer un programa que, al recibir los montos de ventas mensuales de cinco
departamentos de una fábrica proporcione la siguiente información
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
penúltima 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 Mágico.(En un
cuadrado mágico 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 están arriba y abajo de la diagonal principal.
77
i) Reporta los elementos que están arriba y abajo de la diagonal secundaria.
13.- Programa para ingresar una matriz de números enteros diferentes de cero
de filas y c columnas y la acomode para que queden primero los números
positivos y luego los números negativos
15.- Ingresar una matriz cuadrada y verificar si es una matriz Triangular inferior.
15.- Funciones
Ejemplos:
78
function [V,S]=EsferaVolArea(rad) una variable de entrada y dos de salida
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
La Sentencia return
Normalmente se sale de una función cuando se llega al final de la misma. Una
sentencia return puede ser usada para forzar a salir de la función 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 función que convierta grados centígrados 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;
>> conversion(30)
ans =
86
function [ac,lc]=arLongCirc(r)
% Función 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 función que calcule las dos raíces de una ecuación de
segundo grado: ax2+bx+c=0. a, b, y c son parámetros 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);
5
X2 =
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
81
vc= pi*r^2*h;
ac= 2*pi*r^2 + 2*pi*r*h;
15.7080
ac =
37.6991
rts =
16
rtp =
1.5190
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
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
17
34
68
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 =
>> esPrimo(68)
ans =
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 =
>> esPerfecto(7)
ans =
84
12.- Función para reportar todos los factores primos de un número.
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
function x=ingresoVector()
% función 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 8 9
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 9 6 7 3
>> mayorVector(x)
ans =
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;
function m=ingresoMatriz()
% funcion que permite el ingreso de un arreglo
% Argumentos de salida: matriz con f y c columnas
86
m(i,j)=input('');
end
end
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
18
21 25 29
16 19 32
28 23 28
>> mayorMatriz(M)
ans =
32
function sf=sumaFilas(A)
% Función 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 25 29
16 19 32
28 23 28
>> sumaFilas(M)
ans =
75 67 79
function sc=sumaColumnas(A)
% Función 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 25 29
16 19 32
28 23 28
>> sumaColumnas(M)
ans =
65 67 89
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 23 28
16 19 32
21 25 29
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 25 29
28 23 28
89
Practica Nº 5 Ejercicios de Funciones
11.- Diseñar un algoritmo que informe al usuario si una frase pedida al usuario
es un palíndromo. Un palíndromo 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 minúsculas, sin tildes ni espacios en blanco.
90
12.- Calcular si dos números 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 número b. (Ejemplo: el 1 es amigo del 19, y
también el 11 del 21).
13.- Usar la función anterior para diseñar un algoritmo que encuentre todos los
números perfectos entre 0 y un número a pedido al usuario. (NOTA: un número
es perfecto si es amigo de sí mismo).
14.- Dados tres valores numéricos, que expresan una fecha (día, mes y año),
calcular la fecha siguiente, considerando la posibilidad de que el año sea
bisiesto.
15.- Escribir un algoritmo que calcule el importe final a pagar por un cliente,
dado el precio de venta al público (PVP) de un artículo. El importe final se
calcula aplicando un descuento, nunca mayor del 20%, al PVP, y añadiéndole
el 16% de IVA. El importe del artículo podrá estar en pesetas o euros, y el
resultado se dará en ambas monedas.
1 si n es primo
esprimo(n)=
0 si n no es primo
Utilizando dicha función, diseñar un programa que imprima todos los números
primos menores que uno dado por teclado.
18.- Escribir una función de nombre reccil que convierta las coordenadas
rectangulares de un punto a en coordenadas cilíndricas. Considerar que a es
un vector de tres coordenadas:
>> a=[1 1 1]
>> reccil(a)
>> ans =
91
caso contrario. Considerar que el usuario pueda escribir espacios en blanco,
tildes, mayúsculas y minúsculas.
21.- Diseñar una función MATLAB moda(x) que devuelva la moda (valor o
valores que más veces se repita) de un vector x.
Ejemplo 1
92
Ejemplo 2
Ejemplo 3
Por su parte la función feval sirve para evaluar, dentro de una función, otra
función cuyo nombre se ha recibido como argumento. Por ejemplo, is
dentro de una función se quiere evaluar la función calcular(A, b, c). donde
el nombre calcular se envía como argumento en la cadena nombre,
entonces feval(nombre, A, b,c).
Ejemplo 4
93
16.- Graficas 2D
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 sería
utilizar el comando
>>x=linspace(0,2*pi,200);
>> y = sin(x);
>>plot(x,y)
94
Realmente lo que hemos hecho es dibujar 200 puntos de la función 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 vértices.
>>x=-3:.01:3;
Definimos la función
>>y=x.*exp(-x.^2);
>>plot(x,y)
95
Figura 30. Grafica de y = x*e–x^2 con cuadrícula.
- Ejes. Los ejes que aparecen por defecto en una grafica también se
pueden modificar. Con el comando >>axis([-2 2 -1 1]), conseguiremos
que la grafica aparezca en la región -2<x<2 y -1<y<1.
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):
>>x=linspace(0,2*pi,300);
>>y=sin(x);
>>z=sin(x+pi/3);
>>plot(x,y,’r-’,x,z,’g--’),grid on
>>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.
>>[x,y]=ginput(N)
>>x=1:7
x =
1 2 3 4 5 6 7
98
Y ahora escribimos
>>x>4
ans =
0 0 0 0 1 1 1
& y
| o
~ no
>>(2<x)&(x<=6)
ans =
0 0 1 1 1 1 0
x^2 si x < 0
f (x) = 1 si 0 <= x < 1
-x + 2 si 1 <=x
>>x=linspace(-2,3,3000);
>>y=(x.^2).*(x<0)+1.*((0<=x)&(x<1))+(-x+2).*(1<=x);
99
>>plot(x,y,’.’),grid on,title(’Funcion definida a trozos’)
b) f (x) = x – (x)1/2
c) f (x) = log x
x
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
-x si x<-1
h) f (x) = 1 si 0<x<2
-x2 si x>2
(1-x)1/2 si x<-1
i) f (x) = 1- x2 si -1<x<1
(x -1)1/2 si x>1
t (t 2 1) 2t (t 2 1)
r (t ) 2 , 2 ; 5 t 5
t 1 t 1
>>t=linspace(-5,5,1000);
>>plot((t.*(t.^2-1))./(t.^2+1),(2*(t.^2-1))./(t.^2+1))
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))
>>t=linspace(0,2*pi,20);
>>quiver(cos(t),sin(t),-sin(t),cos(t)),axis square
102
Ejercicios gráficos 2: Dibujar las curvas en paramétricas siguientes;
en los apartados a) y b), dibujar además los vectores velocidad,
utilizando el comando quiver:
a ) r (t ) (2 cos3 t , 2 sen3t ); t
b) r (t ) (3sent , 2 sen(2t )); t
t t 2 t 2 t
2
c) r (t ) 12 9 , 116 2 ; 3 t 3
3
d ) r (t ) cos t (cos t 1), 2 sen(2t ) ; t
2
e) r (t ) sen(2t ) sent cos(2t ) cos t ; t
4t t
f ) r (t ) e sen(2t ), e cos(2t ) ;
4
t
2 7t 2 7
g ) r (t ) t cos( ), tsen( ) ; t
3 2 3 2
11 22
h) r (t ) t sen(3t ), cos(3t ) ; 3 t 3
10 10
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( ),
>>tetha=linspace(-pi,pi,100);
103
Calculamos los valores de r
>>r=2-4*cos(tetha);
Y dibujamos la grafica
>>polar(tetha,r)
a) r 7 7 sen( );
b) r 3 6 sen( );
c) r sen(6 );
d ) r cos(8 );
e) r 5cos(2 );
104
>>[x,y]=pol2cart(theta,r);
>>[theta,r]=cart2pol(x,y);
Para los métodos de bisección, 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;
105
Ejecución 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
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
1.8507
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
Ejecución del Programa
>> newton(1)
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
ans =
1.8508
108
Ejecución 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
109
17.1.5.- Método del Punto Fijo
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
ans =
1.8507
Resolveremos el sistema
4x1 -9 x2 + 2x3 = 5
2x1 -4 x2 + 6x3 = 3
x1 - x2 + 3x3 = 4
110
17.2.1.- Método 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 solución ');
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
>> x=gausspivoteo(A,b)
x=
6.9500
2.5000
-0.1500
111
17.2.2.- Método de Gauss-Jordán para resolver un sistema de n
ecuaciones con n incógnitas
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
112
17.2.3.- Métodos Iterativos para el sistema de N ecuaciones con N
incógnitas
Para estos aplicar estos métodos las matrices tienen que ser diagonalmente
dominantes.
Para el método de Jacobi y Seidel resolveremos el siguiente sistema:
4 x1 - x2 = 1
- x1 + 4 x2 - x3 = 1
- x2 + 4x3 - x4 = 1
- x3 + 4x4 = 1
a) Método 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
b) Método 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
x=
0.3636
0.4545
0.4545
0.3636
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
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;
ans =
-20
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
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
ans =
2.2176
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);
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
-1
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)
1.00000
-1.00000 -3.00000
1.00000 -0.33333 -1.66667
-1.00000 3.00000 0.33333 -1.00000
p=
-1
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
122
18.- Optimización de Funciones
El individuo retira sus ingresos transcurridos los 10 años ¿ Cual hubiera sido
realmente el mejor momento para haberlo hecho? ¿Cuánto pierde por no
haberlo retirado en el momento óptimo?
Solución
function y=f(x)
y= ((x-2)^2)*(1-2*x)+252*x+116;
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
Resultados
El mejor momento para retirar hubiera sido a los 8 años, entonces si el
Individuo lo retiro a los 10 años
F(10)= 1420
Por lo tanto pierde 1592- 1420 = 172 por no haberlo retirado en el momento
optimo.
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
El minimo es : 0.000001
>>
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;
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
El minimo es : 0.000005
>>
126
Bibliografía
127