EJERCICIOS DE PROGRAMACIÓN

Contents

EJERCICIO 1

Imprimir una tabla formateada (entero y real) del logaritmo natural de los números 10, 20, 40, 60, y 80.

%Declaro el vector x:
x=[10,20,40,60,80]'
%Declaro el valor del logaritmo para cada x:
f=log(x)
x =

    10
    20
    40
    60
    80


f =

   2.302585092994046
   2.995732273553991
   3.688879454113936
   4.094344562222100
   4.382026634673881

%Imprimo la tabla mediante el comando fprintf:
A=[x,f]';
fprintf('%6s %12s\n','x','log(x)')
fprintf('%6.2f %12.8f\n',A)
     x       log(x)
 10.00   2.30258509
 20.00   2.99573227
 40.00   3.68887945
 60.00   4.09434456
 80.00   4.38202663

EJERCICIO 2

Hallar el vector X para la ecuación matricial.

%Introduzco las matrices:
A=[4 -2 -10;2 10 -12;-4 -6 16]
b=[-10 32 -16]'
A =

     4    -2   -10
     2    10   -12
    -4    -6    16


b =

   -10
    32
   -16

%Hallo el vector x:
x=A\b
x =

   2.000000000000002
   4.000000000000001
   1.000000000000001

EJERCICIO 3

Para la matriz de coeficientes anterior hallar la factorización LU, es decir A = LU y aplicar a continuación X = U^-1*L^-1*B para resolver el sistema anterior.

%Introduzco las matrices:
A=[4 -2 -10;2 10 -12;-4 -6 16]
b=[-10 32 -16]';
A =

     4    -2   -10
     2    10   -12
    -4    -6    16

%Hallo la factorización LU:
[L U]=lu(A)
L =

   1.000000000000000                   0                   0
   0.500000000000000   1.000000000000000                   0
  -1.000000000000000  -0.727272727272727   1.000000000000000


U =

   4.000000000000000  -2.000000000000000 -10.000000000000000
                   0  11.000000000000000  -7.000000000000000
                   0                   0   0.909090909090909

%Hallo el valor de x:
y=L\b;
x=U\y
x =

   2.000000000000002
   4.000000000000001
   1.000000000000001

EJERCICIO 4

Hallar los autovalores y autovectores de la matriz A.

%Introduzco la matriz:
A=[0 1 -1;-6 -11 6;-6 -11 5]
A =

     0     1    -1
    -6   -11     6
    -6   -11     5

%Hallo los autovalores y autovectores mediante el comando eig():
[autovect autoval]=eig(A)
autovect =

   0.707106781186543  -0.218217890235999  -0.092057461789830
   0.000000000000004  -0.436435780471979  -0.552344770738996
   0.707106781186551  -0.872871560943971  -0.828517156108490


autoval =

  -1.000000000000005                   0                   0
                   0  -1.999999999999970                   0
                   0                   0  -3.000000000000024

EJERCICIO 5

Para el siguiente circuito, determinar los voltajes de los nodos V1 y V2 y la potencia entregada por cada fuente.

%Aplicando Kirchoff obtenemos:
A=[1.5-2*i -0.35+1.2*i;-0.35+1.2*i 0.9-1.6*i]
b=[30+40*i 20+15*i]';
A =

  Column 1

  1.500000000000000 - 2.000000000000000i
 -0.350000000000000 + 1.200000000000000i

  Column 2

 -0.350000000000000 + 1.200000000000000i
  0.900000000000000 - 1.600000000000000i

%Hallo el vector solución:
x=A\b
x =

 35.088094485892725 - 8.724877882816104i
 34.387226907093726 - 5.710952878563265i

%Tensiones:
V1=x(1)
V2=x(2)
V1 =

 35.088094485892725 - 8.724877882816104i


V2 =

 34.387226907093726 - 5.710952878563265i

%Potencias generadas:
S1=V1*conj(30+40*i)
S2=V2*conj(20+15*i)
S1 =

      7.036477192641376e+02 - 1.665270115920192e+03i


S2 =

      6.020802449634256e+02 - 6.300274611776713e+02i

EJERCICIO 6

Escribir una función recursiva para resolver el problema de la Torres de Hanoi y probarla para un valor 5 discos.

%Ingresar el número de anillos:
n=5;
THanoi(n,1,3,2)
Mover disco 1 de  a 
Mover disco 2 de  a 
Mover disco 1 de  a 
Mover disco 3 de  a 
Mover disco 1 de  a 
Mover disco 2 de  a 
Mover disco 1 de  a 
Mover disco 4 de  a 
Mover disco 1 de  a 
Mover disco 2 de  a 
Mover disco 1 de  a 
Mover disco 3 de  a 
Mover disco 1 de  a 
Mover disco 2 de  a 
Mover disco 1 de  a 
Mover disco 5 de  a 
Mover disco 1 de  a 
Mover disco 2 de  a 
Mover disco 1 de  a 
Mover disco 3 de  a 
Mover disco 1 de  a 
Mover disco 2 de  a 
Mover disco 1 de  a 
Mover disco 4 de  a 
Mover disco 1 de  a 
Mover disco 2 de  a 
Mover disco 1 de  a 
Mover disco 3 de  a 
Mover disco 1 de  a 
Mover disco 2 de  a 
Mover disco 1 de  a 
%El código empleado en la función THanoi es:
% function THanoi(num,origen,destino,auxiliar)
% if(num>0)
%     THanoi(num-1,origen,auxiliar,destino)
%     fprintf('Mover disco %d de %c a %c\n',num,origen,destino)
%     THanoi(num-1,auxiliar,destino,origen)
% end
% end

EJERCICIO 7

Ajustar un polinomio de orden 2 a los datos y graficar los puntos dados con el símbolo x y la curva ajustada con una línea sólida. Colocar una leyenda adecuada, etiquetas en los ejes y un título al gráfico.

%Definimos los valores:
x=linspace(0,5,11);
y=[10 10 16 24 30 38 52 68 82 96 123];
%Generamos el polinomio:
p=polyfit(x,y,2)
p =

   4.023310023310022   2.010722610722621   9.678321678321661

%Graficamos los puntos y la curva:
n=linspace(-1,6,100);
px=polyval(p,n);
grid on
hold on
xlabel('Eje x');
ylabel('Eje y');
title('Puntos y curva que se ajusta a ellos.');
axis([-1,6,0,140]);
scatter(x,y,'filled')
plot(n,px)
hold off

EJERCICIO 8

Partir la ventana Figure en cuatro particiones (2x2) y graficar las siguientes funciones para ?t de 0 a 3? en pasos de 0.05

%Hallamos los valores requeridos para las gráficas:
wt=0:0.05:3*pi;
v=120*sin(wt);
intens=100*sin(wt-pi/4);
p=v.*intens;
fm=3.0;
fa=fm*sin(wt);
fb=fm*sin(wt-2*pi/3);
fc=fm*sin(wt-4*pi/3);
fr=3.0;
x=-3:0.05:3;
y=sqrt(fr^2-x.^2);
%Dibujamos los gráficos
subplot(2,2,1);
plot(wt,v);
hold on
plot(wt,intens);
hold off
subplot(2,2,2);
plot(wt,p);
subplot(2,2,3);
plot(wt,fa);
hold on
plot(wt,fb);
plot(wt,fc);
hold off
subplot(2,2,4);
plot(x,y,x,-y)

EJERCICIO 9

Graficar la curva paramétrica para un intervalo de -4 a 4 en pasos de 0.3

%Hallamos los valores:
t=0:0.05:16*pi;
x=exp(-0.03*t).*cos(t);
y=exp(-0.03*t).*sin(t);
z=t;
%Dibujamos la curva paramétrica:
subplot(1,1,1)
plot3(x,y,z)

EJERCICIO 10

Graficar la curva para un intervalo de -4 a 4 en pasos de 0.3

%Declaramos los valores:
x=-4:0.3:4;
y=x;
[X Y]=meshgrid(x,y);
Z=sin(X).*cos(Y).*exp(-(X.^2+Y.^2).^0.5);
%Dibujamos la curva:
surf(X,Y,Z)

EJERCICIO 11

Hallar las raíces del polinomio.
%Definimos el polinomio:
p=[1 0 -35 50 24];
%Hallamos sus raíces:
raices=roots(p)
raices =

  -6.491019200948975
   4.870585123318113
   2.000000000000000
  -0.379565922369139

EJERCICIO 12

Resolver la ec. diferencial sujeta a las condiciones iniciales: y(0) = a y dy(0)/dt = b considerando el caso donde ? = 0.15, y(0) = 1, dy(0)/dt = 0 y la región de interés de la solución 0 ? t ? 35
%Condiciones iniciales:
y0=1;
dy0=0;
k=0.15;
t0=0;
tf=35;
%Hallamos la solución:
[t yy]=ode45(@funcionode,[t0 tf],[y0 dy0],[],k);
%La función y(t) es:
yt=yy(:,1);
n=length(yt);
plot(linspace(0,35,n),yt)
%La derivada dy(t)/dt es:
dyt=yy(:,2);
plot(linspace(0,35,n),dyt)
%El código de funcionode es:
% function y=funcionode(t,y,z)
%   h=sin(pi*t/5).^(t<=5);
%   y=[y(2);-2*z*y(2)-y(1)+h];
% end

EJERCICIO 13

Tomando como base las condiciones del ejemplo de la transformada de Fourier de los apuntes (pág. 124), graficar para las siguientes señales la gráfica de la señal en el tiempo y la gráfica de la amplitud espectral en función de la frecuencia.
k = 5; m = 10; fo = 10; Bo = 2.5; N = 2^m; T = 2^k/fo;
t = (0:N-1)*T/N; df = (0:N/2-1)/T;
%Gráfica 1:
g = Bo*sin(2*pi*fo*t)+Bo/2*sin(2*pi*fo*2*t);
An = abs(fft(g, N))/N;
plot(df, 2*An(1:N/2))
%Gráfica 2:
g = exp((-2).*t).*sin(2*pi*fo*t);
An = abs(fft(g, N))/N;
plot(df, 2*An(1:N/2))
%Gráfica 3:
g = sin(2*pi*fo*t+5*sin(2*pi*fo*t/10));
An = abs(fft(g, N))/N;
plot(df, 2*An(1:N/2))
%Gráfica 4:
g = sin(2*pi*fo*t-5*exp(-2*t));
An = abs(fft(g, N))/N;
plot(df, 2*An(1:N/2))

EJERCICIO 14

Leer y graficar la imagen WindTunnel.jpg de las transparencias y graficar en sendos gráficos el valor del color rojo de la imagen en función del ancho de la imagen y el histograma del mismo para una fila de la imagen que se pide al usuario. Mostrar el valor para 200.

%Vemos la imagen:
f = imread ('WindTunnel.jpg','jpeg');
image(f)
%Gráfico según el ancho de la imagen:
figure
[fila columna]=size(f);
red=f(fila,:,1);
plot(red, 'r');
%Gráfico para row=200:
figure
fila=200;
red=f(fila,:,1);
plot(red, 'r');

EJERCICIO 15

Graficar la siguiente función curva en coordenadas polares.
%Declaro la función y el intervalo:
r=inline('2-4.*cos(t)');
t=linspace(-pi,pi,150);
%Empleo el comando polar para dibujar la gráfica:
polar(t,r(t))