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))