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

Latex y Programacion en Matlab

6 de noviembre de 2015
Nombre: Esteban Xavier Serrano Moran
NRC: 1516

Ejercicio 1:
Escribir un programa en Matlab que le pida al usuario un n
umero entero positivo
menor que un millon (1000000) y devuelva a pantalla el n
umero e indique si es par
o impar.

2
3

%Funcion que acepta un numero menor a un millon y


devuelve
%si es par o impar
function [ respuesta ] = par_o_impar ( numero )

4
5
6
7
8
9
10
11
12
13
14

if numero >= 1000000 %valida dato ingresado


respuesta = ' numero no valido ';
else
fprintf ( ' El numero ingresado es : %d ' , numero )
if mod ( numero ,2) == 0 %comprovacion de numero par
respuesta = ' numero par ';
else
respuesta = ' numero impar ';
end
end

15
16

end
Corrida del Programa:

>> par_o_impar(550)
El numero ingresado es: 550
ans =
numero par
>> par_o_impar(333)
El numero ingresado es: 333
ans =
1

numero impar

Ejercicio 2:
Realizar un programa en Matlab que permita visualizar un crculo de radio 6.5 y
centro 3.
1
2

%Script realizado para graficar un circulo


%de r = 6.5 y centro (3 ,0)

3
4
5
6
7

%Variables
radio = 6.5;
h = 3;
k = 0;

8
9
10
11
12

%dominio y funciones a graficar


t = 0: pi /100:2* pi ;
x = radio * cos ( t ) + h ;
y = radio * sin ( t ) + k ;

13
14
15
16

%grafico de funcion
grafico = plot (x , y )
axis square

17
18
19
20

%Ejes coordenados
line ( xlim ,[0 0] , ' color ' , 'k ') ;
line ([0 0] , ylim , ' color ' , 'k ') ;

Corrida:

Ejercicio 3:
Graficar la siguiente funcion y sus derivadas, en un solo grafico, de manera superpuesta:

si x < 1
e
si 1 < x < 1
f (x) = |x|

x2 + 1 si x > 1
1
2

%Script que grafica la funcion f ( x ) del


%rpoblema con sus derivadas

3
4
5
6
7
8
9
10

%variables de la funcion f ( x )
x1 = -10:0.01: -1;
x2 = -1:0.01:1;
x3 = 1:0.01:10;
f1 = exp ( - x1 ) ;
f2 = abs ( x2 ) ;
f3 = x3 .2 + 1;

11
12
13
14
15

%derivadas de la funcion f ( x )
df1 = diff ( f1 ) ./ diff ( x1 ) ;
df2 = diff ( f2 ) ./ diff ( x2 ) ;
df3 = diff ( f3 ) ./ diff ( x3 ) ;

16
17
18
19

%grafico de funcion
hold on
graficof1 = plot ( x1 , f1 , ' red ') ;
3

20
21

graficof2 = plot ( x2 , f2 , ' red ') ;


graficof3 = plot ( x3 , f3 , ' red ') ;

22
23
24
25
26
27
28
29

%grafico de f '( x )
graficodf1 = plot ( x1 (2: end ) ,df1 , ' blue ') ;
graficodf2 = plot ( x2 (2: end ) ,df2 , ' blue ') ;
graficodf3 = plot ( x3 (2: end ) ,df3 , ' blue ') ;
axis ([ -2.5 ,2.5 , -6 ,6]) ;
hold off

30
31
32
33

%Ejes coordenados
line ( xlim ,[0 0] , ' color ' , 'k ') ; %x
line ([0 0] , ylim , ' color ' , 'k ') ; %y

Corrida:

Ejercicio 4:
Elabore un programa que permita calcular las races 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 races reales (D 0)
o races compleja (D < 0). El programa debe informar al usuario si el sistema no
tiene races reales. Ademas se debe indicar si las races reales son iguales (D = 0) o
diferentes (D > 0).

1
2
3

%Funcion que calcula las raices de la ecuacion


% ax 2 + bx + c = 0
function [ x ] = raices_ecuacion_cuadratica ( a ,b , c )

4
5
6

%determinacion del determinante


det = b 2 - 4* a * c ;

7
8
9
10
11
12
13
14
15
16
17

18
19
20
21

if det > 0 %raices diferentes


fprintf ( ' Ecuacion con dos raices diferentes : ')
x (1) = 0.5*( - b + sqrt ( det ) ) ;
x (2) = 0.5*( - b - sqrt ( det ) ) ;
else
if det == 0 %raices iguales
fprintf ( ' Ecuacion con solo una raiz ')
x (1) = 0.5*( - b ) ;
else % raices imaginarias
fprintf ( ' Ecuacion no posee respuestas en los reales , '
)
fprintf ( ' las soluciones imaginarias son : ')
x (1) = 0.5*( - b + sqrt ( det ) ) ;
x (2) = 0.5*( - b - sqrt ( det ) ) ;
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 conversion de temperatura. La relacion de diversas escalas de temperatura
con la escala Celsius (C), es la siguiente:
9
C + 32
5
K = C + 273.15
8
R=
C
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 informacion necesaria para su funcionamiento. Ademas, el programa siempre esperara informacion hasta que se pulse
la tecla s.
1
2

%Script que hace transformaciones de distintas escalas de


%temperatura

3
4
5
6
7
8
9
10

while true %bucle que


fprintf ( ' Menu :\ n ')
fprintf ( 'a ) Celcius a
fprintf ( 'b ) Celcius a
fprintf ( 'c ) Celcius a
fprintf ( 's ) Salir \ n ')
op = input ( ' Que desea

permite que el menu se repita


Farenheit \ n ')
Kelvin \ n ')
Remur \ n ')
hacer ?\ n ' , 's ') ;

11
12
13
14
15
16

17
18
19
20

switch op
case 'a '
fprintf ( ' Transformacion de C a Farenheit \ n ')
while true %corre bucle hasta aparicion de 's '
orden = ' Ingrese C , Presione s para salir al menu \ n
';
temp = input ( orden , 's ') ;
if temp == 's ' %aparicion de 's ' termina el bucle
break ;
end
6

21
22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
37

c = eval ( temp ) ; %transforma string a numero


respuesta = 9/5* c + 32; %operacion de temperatura
fprintf ( 'F = %d \ n ' , respuesta )
end
% todos los demas casos tienen la misma estructura .
case 'b '
fprintf ( ' Transformacion de C a Kelvin \ n ')
while true
orden = ' Ingrese C , Presione s para salir al menu \ n
';
temp = input ( orden , 's ') ;
if temp == 's '
break ;
end
c = eval ( temp ) ;
respuesta = c + 273.15;
fprintf ( 'K = %d \ n ' , respuesta )
end

38
39
40
41
42

43
44
45
46
47
48
49
50

case 'c '


fprintf ( ' Transformacion de C a Remur \ n ')
while true
orden = ' Ingrese C , Presione s para salir al menu \ n
';
temp = input ( orden , 's ') ;
if temp == 's '
break ;
end
c = eval ( temp ) ;
respuesta = 8/10* c ;
fprintf ( 'R = %d \ n ' , respuesta )
end

51
52
53
54

case 's '


disp ( ' Programa finalizado ')
break ;

55
56
57

58

otherwise
disp ( ' La opcion ingresada no existe , intente de nuevo
')
end

59
60
61

end

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 funcion M.file con la que se pueda graficar la funcion parametrica siguiente:

R+r

x(t) = (R + r) cos(t) + r cos


r
!

R
+
r

y(t) = (R + r) sin(t) + r sin


r
Los parametros 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

%Funcion que grafica cierta funcion parametrica y


%cuyos datos de entrada son R = Radio Mayor ,
%r = Radio Menor , a = tiempo inicio , b = tiempo final ,
%n = numero de puntos de analisis
function funcion_parametrica ( R ,r ,a ,b , n )

6
7
8

%Creacion del dominio


t = linspace (a ,b , n ) ;

9
10
11
12

%funciones analizadas
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

%Grafico ploteado
plot (x , y )
axis square

17
18
19
20

%Ejes coordenados
line ( xlim ,[0 0] , ' color ' , 'k ') ;
line ([0 0] , ylim , ' color ' , 'k ') ;

21
22

end
9

Corrida:

>> funcion_parametrica(12,3,0,2*pi,200)

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

%Funcion que analiza datos , elimina el menor y entrega


%como resultado una tabla de datos con valores promedio
function [ datosSalida ] = medidor_peso ( pesosEntrada )

4
5
6

%Encabezado de datos de salida


datosSalida (1 ,:) = { ' Sustancia ' , ' Peso Promedio ' , ' Peso
Eliminado ' , ' Peso 1 ' , ' Peso 2 ' , ' Peso 3 ' };

10

8
9
10
11

%suponiendo una matriz de m * n


m = length ( pesosEntrada (: ,1) ) ;
n = length ( pesosEntrada (1 ,:) ) ;

12
13
14
15
16

%bucle que determina el numero menor


for i =1: m
pesoEliminado (i ,1) = min ( pesosEntrada (i ,2: n ) ) ;
end

17
18
19
20
21
22

23
24
25
26
27

28

%bucle que crea la matriz sin el valor menor


for i =1: m
contador = 1;
for j =2: n
if pesosEntrada (i , j ) = pesoEliminado (i ,1) %eliminacion
valor menor
pesosSinMenor (i , contador ) = pesosEntrada (i , j ) ;
contador = contador + 1;
end
end
pesosSalida (i ,1) = mean ( pesosSinMenor (i ,:) ) ; %
determinacion promedio pesos
end

29
30

ceros = 1:6; %vector hueco para poder leer desde i =2

31
32
33

34

%matriz con los datos finales ordenados


matrizFinal =[ ceros ; pesosEntrada (: ,1) , pesosSalida ,
pesoEliminado , pesosSinMenor ];
[ m n ]= size ( matrizFinal ) ;

35
36
37
38
39
40
41

%llenado de los datos de salida


for i =2: m
for j =1: n
datosSalida {i , j } = matrizFinal (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 2 '
[
48]
[
21]
[
18]
[
27]

' Peso Promedio '


[
45.3333]
[
23]
[
17]
[
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 funcion:


1


q
exp (x )T +1 1
fx (x1 , , xn ) =
n/2
2
2 ||

Para el caso en el que n =!2, usar los siguientes valores para las constantes: =
3 1
(10.10)T y =
.
1
4
%Script que dibuja una funcion tridimensional f = 1/ k * e (
g (x , y ) )

2
3
4
5
6
7

%planteamiento de variables
syms x1 x2 ;
x = [ x1 ; x2 ];
u = transpose ([10 10]) ;
E = [3 -1; -1 4];

8
9
10
11

%determinacion de constantes
k = 2* pi * sqrt ( det ( E ) ) ;
exponente = -0.5* transpose (x - u ) * E *( x - u ) ;

12
13
14

%evaluacion de la funcion para los reales


f = 1/ k * exp ( exponente ) ;
12

15
16

[ x1 x2 ] = meshgrid (8:0.005:12) ;
f = eval ( f ) ;

17
18
19

%generacion de la grafica 3 d
surf ( x1 , x2 ,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

%Script que encuentra los numeros amigables entre 0 y


1000

2
3
4
5
6

inicio = 0;
fin = 1000;
numeros = inicio : fin ;
tamano = length ( numeros ) ;

7
8
9

for i = 1: tamano
a = sum ( divisors ( numeros ( i ) ) ) - numeros ( i ) ;
13

10
11
12
13
14
15
16
17
18
19
20

%disp ( numeros ( i ) )
for j = ( i +1) :( tamano )
%disp ( numeros ( j ) )
b = sum ( divisors ( numeros ( j ) ) ) - numeros ( j ) ;
if a == numeros ( j )
if b == numeros ( i )
fprintf ( ' %d y %d son amigos \ n ' , numeros ( i ) , numeros ( j ) )
end
end
end
end

Corrida:

>> numeros_amigos
220 y 284 son amigos

Ejercicio 10
Realizar una funcion tal que ingresado un numero N, se impriman por pantalla todos
los n
umeros primos de 1 hasta N.
1
2

%Funcion que imprime los numeros primos desde 1 hasta n


function [ primos ] = numeros_primos ( n )

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

primos (1) = 1; %se considera 1 valor de siempre


contador = 2; %contador de primos
for i = 2: n
primo = true ; %bandera , se supone que el numero es primo
for j = 2: i -1
if mod (i , j ) == 0
primo = false ; %comprobacion de suposicion
end
end
if primo %almacenamiento del numero primo
primos ( contador ) = i ;
contador = contador + 1;
end
end

18
19
20

end

14

Corrida:

>> numeros_primos(30)
ans =
1
2
3

11

15

13

17

19

23

29

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