Latex y Programaci´ on on en Matlab 6 de noviembre de 2015 Nombre: Esteban Xavier Serrano Mor´ an an NRC: 1516
Ejercicio 1: Escribir un programa en Matlab que le pida al usuario un n´ umero entero positivo menor que un mill´on on (1000000) y devuelva a pantalla el n´ umero e indique si es par umero o impar.
1
2 3
%F %F un u n ci c i on o n q ue ue a ce c e pt p t a u n n um u m er e r o m en e n or o r a u n m il i l lo lo n y devuelve %s i e s p ar ar o i mp mp ar ar function [ r es e s pu p u es e s ta t a ] = p ar a r _o _ o _i _ i mp m p ar a r ( n um u m er er o )
4 5 6 7 8 9 10 11 12 13 14
i f n u me me r o > = 1 0 00 0 0 0 00 0 0 %v %v a l i da da d a to t o i n g r e sa sa d o r e sp s p u es es t a = n u me m e r o n o v a li li d o ; else fprintf( E l n um u m er e r o i ng n g re r e sa s a do d o e s: s : %d , n u m e r o ) i f m o d ( n u m e ro ro , 2 ) = = 0 % co c o m p ro r o v ac a c i o n d e n u me m e r o p ar ar r e sp s p u es es t a = n u me me r o p ar ar ; else r e sp s p u es es t a = n u m er e r o i m p ar ar ; end end
15 16
end
Corrida del Programa:
>> par_o_impa par_o_impar(550 r(550) ) El numero numero ingres ingresado ado es: 550 ans = numero numero par >> par_o_impa par_o_impar(333 r(333) ) El numero numero ingres ingresado ado es: 333 ans =
1
numero impar
Ejercicio 2: Realizar un programa en Matlab que permita visualizar un c´ırculo de radio 6.5 y centro 3. 1 2
%S c ri p t r e al i za d o p ar a g r af i ca r u n c i rc u lo %de r = 6.5 y ce ntr o (3 ,0)
3 4 5 6 7
%Variables r ad io = 6 .5 ; h = 3; k = 0;
8 9 10 11 12
%d o mi n io y f u nc i on e s a g r af i ca r t = 0 : pi / 1 00 :2 * p i; x = r adi o* cos ( t) + h ; y = r adi o* sin ( t) + k ;
13 14 15 16
%g r af i co d e f u nc i on g r af i co = p lo t ( x , y) ax is s q ua r e
17 18 19 20
%E j es c o o r d e na d o s line(xlim ,[0 0], color , k ) ; li ne ( [ 0 0 ] , yl im , color , k ) ;
2
Corrida:
Ejercicio 3: Graficar la siguiente funci´ on y sus derivadas, en un solo gr´afico, de manera superpuesta: e−x si x < −1 |x| si − 1 < x < 1 f (x) = 2 x + 1 si x > 1 1 2
%S cr ip t q ue g ra fi ca la f un ci on f ( x) d el %r p ob l em a c on s us d e ri v ad a s
3 4 5 6 7 8 9 10
%v ar ia bl es d e l a f un ci on f ( x) x 1 = - 10 : 0. 01 : - 1 ; x 2 = - 1 :0 . 01 : 1; x 3 = 1 :0 .0 1: 1 0; f 1 = e xp ( - x1 ) ; f2 = a bs ( x2 ) ; f3 = x3 .ˆ2 + 1;
11 12 13 14 15
%d er iv ad as d e l a f un ci on f ( x) d f1 = d if f ( f 1 ) ./ d i ff ( x 1 ) ; d f2 = d if f ( f 2 ) ./ d i ff ( x 2 ) ; d f3 = d if f ( f 3 ) ./ d i ff ( x 3 ) ;
16 17 18 19
%g r af i co d e f u nc i on h ol d o n g r af i co f 1 = p l ot ( x 1 , f1 ,
red ) ;
3
20 21
g r af i co f 2 = p l ot ( x 2 , f2 , g r af i co f 3 = p l ot ( x 3 , f3 ,
red ) ; red ) ;
22 23 24 25 26 27 28 29
%g ra fi co d e f ( x ) g r a fi c od f 1 = p lo t ( x 1 ( 2: end ) , d f 1 , g r a fi c od f 2 = p lo t ( x 2 ( 2: end ) , d f 2 , g r a fi c od f 3 = p lo t ( x 3 ( 2: end ) , d f 3 , axis([-2.5,2.5,-6,6]); h ol d o ff
30 31 32 33
%E j es c o o r d e na d o s line(xlim ,[0 0], color , k ) ; %x li ne ( [ 0 0 ] , yl im , color , k ) ; %y
Corrida:
4
blue ) ; blue ) ; blue ) ;
Ejercicio 4: Elabore un programa que permita calcular las ra´ıces reales de un polinomio de segundo grado de la forma ax2 + bx + c = 0. Tenga en cuenta que dependiendo del valor del discriminante (D = b2 − 4ac) el sistema puede dar ra´ıces reales (D ≥ 0) o ra´ıces compleja (D < 0). El programa debe informar al usuario si el sistema no tiene ra´ıces reales. Adem´ as se debe indicar si las ra´ıces reales son iguales (D = 0) o diferentes (D > 0).
1 2 3
%F un ci on q ue c al cu la l as r ai ce s d e la e cu ac io n % ax ˆ2 + bx + c = 0 function [ x ] = r a ic e s_ e cu a ci o n_ c ua d ra t ic a ( a , b ,c )
4 5 6
%d e t e r m i na c i o n d e l d e t e r m i na n t e det = b ˆ2 - 4* a* c;
7 8 9 10 11 12 13 14 15 16 17
18 19 20 21
if det > 0 % r ai c e s d i f e r en t e s fprintf( E c ua c io n c on d os r a ic e s d i fe r en t e s : ) x ( 1) = 0 .5 *( - b + s qr t ( de t )) ; x ( 2) = 0 .5 *( - b - s q rt ( d et ) ) ; else if det == 0 % ra i c e s i g u a le s fprintf( E cu ac io n c on s ol o u na r ai z ) x ( 1) = 0 .5 *( - b ) ; else % r a ic e s i m a gi n ar i a s fprintf( E cu ac io n n o p os ee r es pu e st as e n l os r ea le s , ) fprintf( l as s o lu c i on e s i m a gi n ar i a s s on : ) x ( 1) = 0 .5 *( - b + s qr t ( de t )) ; x ( 2) = 0 .5 *( - b - s qr t ( de t )) ; end
22 23
end
Corrida:
>> raices_ecuacion_cuadratica(1,5,1) Ecuacion con dos raices diferentes: ans = -0.2087
-4.7913
>> raices_ecuacion_cuadratica(1,-2,1) Ecuacion con solo una raiz ans =
5
1 >> raices_ecuacion_cuadratica(1,1,5) Ecuacion no posee respuestas en los reales,las soluciones imaginarias son: ans = -0.5000 + 2.1794i
-0.5000 - 2.1794i
Ejercicio 5 Tabla de conversi´ on de temperatura. La relaci´ on de diversas escalas de temperatura con la escala Celsius (C), es la siguiente: 9 · C + 32 5 K = C + 273.15 8 · C R = 10 F =
Construir un programa en Matlab que permita pasar de una escala a otra. El programa debe solicitar al usuario el ingreso de la informaci´ on necesaria para su funcionamiento. Adem´ as, el programa siempre esperar´ a informaci´ on hasta que se pulse la tecla s. 1 2
%S c ri p t q ue h a ce t r a ns f o rm a c io n e s d e d i st i nt a s e s ca l as d e %temperatura
3 4 5 6 7 8 9 10
while true %b uc le q ue fprintf( Menu:\n ) fprintf( a ) C el ci us a fprintf( b ) C el ci us a fprintf( c ) C el ci us a fprintf( s ) S al ir \ n ) op = i np ut ( Q ue d e se a
p er mi te q ue e l m en u s e r ep it a
F ar en he it \ n ) K el vi n \ n ) R em ur \ n )
h a ce r ? \ n , s ) ;
11 12 13 14 15 16
switch op case a fprintf( T ra n sf o rm a ci o n d e C a F ar en he it \ n ) while true %c o rr e b u cl e h as t a a p ar i ci o n d e s o rd en = I ng re se C , P re si on e s p ar a s al ir a l m en u \ n ; t em p = i np u t ( or de n , s ); if t em p = = s % ap a r i c io n d e s t er m in a e l b u cl e break ; end
17 18 19 20
6
21 22 23 24 25 26 27 28 29
c = eval ( temp ); % tr a ns f or m a s t ri n g a n u me r o r es pu es ta = 9 /5 * c + 3 2; %o p e r a ci o n d e t e m p e r at u r a fprintf( F = %d \n , r e s p u e s t a ) end % t od os l o s d em as c a so s t i en en l a m i sm a e s tr uc tu ra . case b fprintf( T ra n sf o rm a ci o n d e C a K el vi n \ n ) while true o rd en = I ng re se C , P re si on e s p ar a s al ir a l m en u \ n ; t em p = i np u t ( or de n , s ); if t em p = = s break ; end c = eval ( temp ); r es pu es ta = c + 2 73 .1 5; fprintf( K = %d \n , r e s p u e s t a ) end
30 31 32 33 34 35 36 37
38 39 40 41 42
case c fprintf( T ra n sf o rm a ci o n d e C a R em ur \ n ) while true o rd en = I ng re se C , P re si on e s p ar a s al ir a l m en u \ n ; t em p = i np u t ( or de n , s ); if t em p = = s break ; end c = eval ( temp ); r e sp u es t a = 8 / 10 * c ; fprintf( R = %d \n , r e s p u e s t a ) end
43 44 45 46 47 48 49 50
51 52 53 54
case s disp( P r o g r am a f i n a l iz a d o ) break ;
55 56 57
otherwise disp( L a o pc io n i ng re sa da n o e xi st e , i nt en te d e n ue vo ) end
58 59 60 61
end
7
Corrida:
>> transformacion_temp Menu: a) Celcius a Farenheit b) Celcius a Kelvin c) Celcius a Remur s) Salir Que desea hacer? a Transformacion de C a F Ingrese C, Presione s para salir 58 F = 1.364000e+02 Ingrese C, Presione s para salir 46 F = 1.148000e+02 Ingrese C, Presione s para salir s Menu: a) Celcius a Farenheit b) Celcius a Kelvin c) Celcius a Remur s) Salir Que desea hacer? b Transformacion de C a K Ingrese C, Presione s para salir 12 K = 2.851500e+02 Ingrese C, Presione s para salir 22 K = 2.951500e+02 Ingrese C, Presione s para salir s Menu: a) Celcius a Farenheit b) Celcius a Kelvin c) Celcius a R s) Salir Que desea hacer? c Transformacion de C a Remur Ingrese C, Presione s para salir 56 R = 4.480000e+01 Ingrese C, Presione s para salir
al menu
al menu
al menu
al menu
al menu
al menu
al menu
al menu
8
63 R = 5.040000e+01 Ingrese C, Presione s para salir al menu s Menu: a) Celcius a Farenheit b) Celcius a Kelvin c) Celcius a Remur s) Salir Que desea hacer? s Programa finalizado
Ejercicio 6 Crear una funci´ on M.file con la que se pueda graficar la funci´ on param´etrica siguiente: R + r ·t x(t) = (R + r) · cos(t) + r · cos
y (t) = (R + r) · sin(t) + r · sin
r
R + r ·t r
Los par´ ametros de entrada deben ser R, r, a, b y el n´ umero de puntos n cumpliendo que, t ∈ [ a, b] ∀a, b ∈ R. 1 2 3 4 5
%F u nc i on q ue g r af i ca c i er t a f u nc i on p a ra m e tr i ca y %c uy os d at os de e nt ra da s on R = R ad io May or , %r = R ad io Meno r , a = t ie mp o in ici o , b = t ie mp o fi nal , %n = n um er o d e p un to s de a na li si s function f u n c i o n_ p a ra m e tr i c a ( R , r , a ,b , n )
6 7 8
%C r ea c io n d el d o mi n io t = l in sp ac e ( a ,b , n );
9 10 11 12
%f u n c i on e s a n a l i z ad a s x = ( R + r )* cos (t ) - r *cos ( (1 + R /r )* t) ; y = ( R + r )* sin (t ) - r *sin ( (1 + R /r )* t) ;
13 14 15 16
%G r a f ic o p l o t e ad o plot(x,y) ax is s q ua r e
17 18 19 20
%E j es c o o r d e na d o s line(xlim ,[0 0], color , k ) ; li ne ( [ 0 0 ] , yl im , color , k ) ;
21 22
end
9
Corrida:
>> funcion_parametrica(12,3,0,2*pi,200)
1
Ejercicio 7
Realizar un programa en donde el peso de una muestra se determina realizando 4 pesadas, se descarta el menor peso y se promedian los otros tres. Considere que el usuario ingresa una tabla con el n´ umero de sustancia en la primera columna y las mediciones realizadas en las otras 4 columnas. Mostrar en pantalla el n´ umero de muestra, las mediciones, el peso eliminado y el peso promedio de cada sustancia pesada. 1 2 3
%F un ci on q ue a na li za d at os , e li mi na el m en or y e nt re ga %c om o r es ul ta do u na t ab la d e d at os c on v al or es p ro me di o function [ d at os S al id a ] = m ed id o r_ pe s o ( p es os E nt ra d a )
4 5 6
%E n ca b e za d o d e d at o s d e s a li d a d a t os S al i d a ( 1 , :) = { Sustancia , P es o P r o m e di o , Peso Eliminado , P es o 1 , P es o 2 , P es o 3 };
7
10
8 9 10 11
%s up o ni en do u na m at ri z d e m * n m = l e ng t h ( p e s os E nt r a da ( : , 1 ) ) ; n = l e ng t h ( p e s os E nt r a da ( 1 , : ) ) ;
12 13 14 15 16
%b uc le q ue d et er mi na el n um er o m en or for i = 1 : m p e s o E l i m i n a d o ( i , 1 ) = m i n ( p e s o s E n t r ad a ( i , 2 : n ) ) ; end
17 18 19 20 21 22
23 24 25 26 27
28
%b uc le q ue c re a l a m at ri z s in e l v al or m en or for i = 1 : m c on ta do r = 1 ; for j = 2 : n if p e s os E n tr a da ( i , j ) ˜ = p e so E l im i n ad o ( i , 1) %eliminacion v a lo r m e no r p e s o s S i nM e n o r ( i , c o n t a d o r ) = p e s o s E n tr a d a ( i , j ) ; c on ta do r = c on ta do r + 1 ; end end p e s o s S a l i d a ( i , 1 ) = m e an ( p e s o s S i nM e n o r ( i , : ) ) ; % d e t er m i na c i on p r om e di o p e so s end
29 30
c er os = 1 :6 ; % ve ct or h ue co p ar a p od er l ee r d es de i =2
31 32 33
34
%m a tr i z c on l os d a to s f i na l es o r de n ad o s matrizFinal=[ceros;pesosEntrada(:,1),pesosSalida , pesoEliminado ,pesos SinMenor ]; [ m n ] = s iz e ( m a t ri z F in a l ) ;
35 36 37 38 39 40 41
%l le na do d e l os d at os d e s al id a for i = 2 : m for j = 1 : n d a t os S al i d a { i ,j } = m a tr i z Fi n al ( i , j ) ; end end
42 43
end
Corrida:
>> sustancias = [1 45 48 42 43;2 23 21 20 25;3 14 18 19 13;4 22 25 27 29] sustancias =
11
1 2 3 4
45 23 14 22
48 21 18 25
42 20 19 27
43 25 13 29
>> medidor_peso(sustancias) ans = Sustancia [ 1] [ 2] [ 3] [ 4]
Peso Promedio [ 45.3333] [ 23] [ 17] [ 27]
Peso 2 [ 48] [ 21] [ 18] [ 27]
Peso Eliminado [ 42] [ 20] [ 13] [ 22]
Peso 1 [ 45] [ 23] [ 14] [ 25]
Peso 3 [ 43] [ 25] [ 19] [ 29]
Ejercicio 8 Represente en Matlab la superficie 3D dada por la funci´ on: f x (x1 , · · · , xn ) =
1 2πn/2 ·
1 · exp − (x − µ)T +1 Σ−1 2 |Σ|
Para el caso en el que n = 2, usar los siguientes valores para las constantes: µ = 3 −1 (10.10)T y Σ = . −1 4
1
%S cr ip t q ue d ib uj a u na f un ci on t r id i me n si o na l f = 1/ k * e ˆ( g(x,y))
2 3 4 5 6 7
%p l a n t e a mi e n t o d e v a r i a bl e s s ym s x1 x2 ; x = [ x1 ; x2 ]; u = t ra ns po se ( [ 10 1 0] ) ; E = [3 -1; -1 4];
8 9 10 11
%d e t e r m i na c i o n d e c o n s t a nt e s k = 2 * pi * s q rt ( d e t ( E )) ; e x p o n en t e = - 0 .5 * t r a n s p o s e ( x - u ) * E * ( x - u ) ;
12 13 14
%e va l ua ci on d e l a f un ci on p ar a l os r ea le s f = 1 / k * ex p ( e x po n en t e ) ;
12
15 16
[ x 1 x 2 ] = m e sh g ri d ( 8 : 0 . 00 5 : 12 ) ; f = e va l (f );
17 18 19
%g en e ra ci on d e l a g ra fi ca 3 d s u r f ( x 1 , x 2 , f , EdgeColor , none )
Corrida:
Ejercicio 9 Escriba un programa que busque los n´ umeros amigables y diferentes entre 1 y 1000. Dos n´ umeros son amigables si el primero es la suma de los divisores del segundo y viceversa. 1
%S cr ip t q ue e nc ue nt ra l os n um er os a mi ga bl es e nt re 0 y 1000
2 3 4 5 6
i ni ci o = 0; fi n = 1 00 0; n u me r os = i n ic i o : f in ; t a ma n o = l e ng t h ( n u me r os ) ;
7 8 9
for i = 1: t am an o a = s um ( d i v i so r s ( n u me r os ( i ) ) ) - n u me r os ( i ) ;
13
10 11 12 13 14 15 16 17 18 19 20
%disp(numeros(i)) for j = ( i +1 ) :( t a ma no ) %disp(numeros(j)) b = s um ( d i v i so r s ( n u me r os ( j ) ) ) - n u me r os ( j ) ; if a == n um er os ( j ) if b = = n um er os ( i ) fprintf( %d y %d s on a mi go s \n , n u m e r o s ( i ) , n u m e r o s ( j ) ) end end end end
Corrida:
>> numeros_amigos 220 y 284 son amigos
Ejercicio 10 Realizar una funci´ on tal que ingresado un numero N, se impriman por pantalla todos los n´ umeros primos de 1 hasta N. 1 2
%F un ci on q ue i mp ri me l os n um er os p ri mo s d es de 1 h as ta n function [ p ri mo s ] = n um er os _p ri mo s ( n )
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
p ri mo s ( 1) = 1 ; %s e c on si de ra 1 v al or d e s ie mp re c on ta do r = 2 ; % c on t ad o r d e p r im o s for i = 2 : n p ri mo = t ru e ; %b an de ra , s e s up on e q ue e l n um er o e s p ri mo for j = 2: i-1 if m od (i , j) == 0 p ri mo = f al se ; %c o m p r o b ac i o n d e s u p o s ic i o n end end if primo % a lm a c en a m ie n t o d el n u me r o p r im o p r im o s ( c o nt a do r ) = i ; c on ta do r = c on ta do r + 1 ; end end
18 19 20
end
14
Corrida:
>> numeros_primos(30) ans = 1 2 3
5
7
11
15
13
17
19
23
29