Control 3 Ejercicios Resueltos Computacion

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 11

% Control 3 ejercicio 1

clear all; close all; home

% leo datos del fichero

load('C3_datos.mat', 'DE', 'kB', 'temp');

d=0.36; % nm, distancia recorrida con cada salto

% Parte A

% calculo la probabilidad de salto (hacia la derecha)

probsalto=exp(-DE/(kB*temp));

% genero matriz 20 x 5000 nº aleatorios entre 0 y 1

muestreo=rand(20,5000);

% si el número aleatoria es más pequeño que la probabilidad entonces salto

% se genera así una matriz de 1 y 0 : 1 si salto, 0 si no salto)

saltos=(muestreo<=probsalto);

% sumando los saltos (por columnas) y multiplicando por d calculo la

% posición final

posfinal=sum(saltos)*d;

% genero un vector de las posibles posiciones (entre 0 y 20 'd')

posiciones=[0:1:20]*d;

% calculo el histograma de posiciones finales y lo guardo en 'h_posfinal'

h_posfinal=hist(posfinal,posiciones);

% Parte B

% calculo la función de probabilidad dividiendo el histograma entre el nº

% de muestras y multiplicando por el tamaño del 'bin' (contenedor)

p_posfinal=h_posfinal/(5000*d);

% calculo la moda identificando el valor máximo del anterior histograma

moda=mode(posfinal);

% calculo el valor medio, la mediana y la desciación estandar de las

% posiciones finales de la muestra

media=mean(posfinal);

desvest=std(posfinal);

mediana=median(posfinal);

cadena1=['Tras 20 intentos de salto:'];


cadena2=['La posición más probable (moda) es ', num2str(moda), ' nm,'];

cadena3=['la media de la posiciones final es ', num2str(media), ' nm'];

cadena4=['con una desviación estándar de ', num2str(desvest), ' nm.'];

cadena5=['La mediana de la distribución de 5000 muestras es el valor ',...

num2str(mediana), ' nm.'];

disp(cadena1); disp(cadena2); disp(cadena3); disp(cadena4); disp(cadena5);

% Parte C

% defino vector con la variable de posición y, a partir de ella, la media y

% la desviación estandar, la función gaussiana que se pide

posfun=[-0.5:0.1:20.5]*d;

fgauss=1/(desvest*sqrt(2*pi))*exp(-(posfun-media).^2/(2*desvest^2));

figure(11)

bar(posiciones,p_posfinal,1);

hold on

plot(posfun,fgauss,'-r');

axis([posfun(1) posfun(end) 0 max(p_posfinal)*1.1]);

xlabel('x_f (nm) (posición desde el origen)');

ylabel('probabilidad p(x_f)');

title('Posición final x_f tras 20 intentos de salto (nm)');

legend('p(x_f) obtenida de 5000 muestras','función gaussiana');

% Parte D

% La función P(x_0) se obtiene mediante la suma acumulada de los valores de

% la función p(x_f) multiplicada por el tamaño del bin

% De forma equivalente: es la integral de p(x_f) integral entre 0 y x_0

P_posfinal=cumsum(p_posfinal)*d;

figure(12)

bar(posiciones,P_posfinal,1);

axis([posfun(1) posfun(end) 0 1]);

xlabel('x_0 (nm) (posición desde el origen)');

ylabel('función de probabilidad P(x_0)');

title('Probabilidad P(x_0) tal que la posición final x_f \leq x_0');

legend('P(x_0) obtenida de 5000 muestras');


% Control 3 ejercicio 2a

%clear all;

close all; home

% leo datos del fichero

%load('C3_datos.mat', 'LL', 'theta0', 'M3');

g=9.8; % m/s^2

% Parte A

% definino condiciones iniciales

ang0=theta0;

v_ang0=0;

dt=0.0004;

% inicializo vectores con condiciones iniciales

i=1;

t(i)=0;

a_ang0(i)=-g/LL*sin(ang0);

v_ang(i)=v_ang0;

ang(i)=ang0;

cont=0; % para controlar el número de oscilaciones

% aumentará una unidad con cada media oscilación

while(cont<=4)

i=i+1;

t(i)=t(i-1)+dt; % tiempo transcurrido

a_ang0(i)=-g/LL*sin(ang(i-1)); % calculo aceleración angular

v_ang(i)=v_ang(i-1)+a_ang0(i)*dt; % velocidad angular

ang(i)=ang(i-1)+(v_ang(i)+v_ang(i-1))/2*dt; % posición angular

if ((v_ang(i)*v_ang(i-1))<=0) % si la velocidad cambia de signo

cont=cont+1; % el contador aumenta una unidad

end

end

% Parte B
figure(21)

plot(t,ang)

xlabel('tiempo (s)');

ylabel('Ángulo \theta (rad)')

title('Posición angular del péndulo en función del tiempo')

axis([0 max(t)*1.05 -ang0*1.05 ang0*1.05])

% calculo de las magnitudes físicas adicionales que hay que representar

% el origen de las coordenads (x,y) va a estar en el punto de equilibrio

% del péndulo, de tal manera que en t=0 'x' e 'y' serán máximos.

x=sin(ang)*LL;

y=(1-cos(ang))*LL;

Ecin=0.5*M3*(v_ang*LL).^2;

Epot=M3*g*y;

Etot=Ecin+Epot;

% Dibujo posiciones x,y

figure(22)

plot(t,x,'k',t,y,'r');

xlabel('tiempo (s)');

ylabel('posición (m)');

title('Posiciones x e y del péndulo en función del tiempo');

legend('x','y');

axis([0 max(t)*1.05 -x(1)*1.05 x(1)*1.05]);

% Dibujo energías

figure(23)

plot(t,Ecin,'b',t,Epot,'m',t,Etot,'g');

xlabel('tiempo (s)');

ylabel('posición (m)');

title('Energías del péndulo en función del tiempo');

legend('E_{cinetica}','E_{potencial}','E_{total}');

axis([0 max(t)*1.05 0 Epot(1)*1.1]);


% Control 3 ejercicio 2b

clear all; close all; home

% leo datos del fichero

load('C3_datos.mat', 'LL', 'theta0', 'M3', 'HH', 'mu');

g=9.8; % m/s^2

% Parte A

% definino condiciones iniciales

ang0=theta0;

v_ang0=0;

dt=0.0004;

% calculo el ángulo por debajo del cual tengo fricción en el fluido

angC=acos(HH/LL);

% inicializo vectores con condiciones iniciales

i=1;

t(i)=0;

a_ang0(i)=-g/LL*sin(ang0);

v_ang(i)=v_ang0;

ang(i)=ang0;

cont=0; % para controlar el número de oscilaciones

% aumentará una unidad con cada media oscilación

while(cont<=4)

i=i+1;

t(i)=t(i-1)+dt;

if (abs(ang(i-1))>angC) % si el ángulo mayor que el critico

a_ang0(i)=-g/LL*sin(ang(i-1)); % no tengo fricción

else % si no

a_ang0(i)=-g/LL*sin(ang(i-1))-mu/M3*v_ang(i-1); % tengo friccion

end

v_ang(i)=v_ang(i-1)+a_ang0(i)*dt; % calculo de velocidad angular

ang(i)=ang(i-1)+(v_ang(i)+v_ang(i-1))/2*dt; % posición angular

if ((v_ang(i)*v_ang(i-1))<=0) % si la velocidad cambia de signo


cont=cont+1; % el contador aumenta una unidad

end

end

% Parte B

figure(26)

plot(t,ang)

xlabel('tiempo (s)');

ylabel('Ángulo \theta (rad)')

title('Posición angular del péndulo en función del tiempo')

axis([0 max(t)*1.05 -ang0*1.05 ang0*1.05])

% calculo de las magnitudes físicas adicionales que hay que representar

% el origen de las coordenads (x,y) va a estar en el punto de equilibrio

% del péndulo, de tal manera que en t=0 'x' e 'y' serán máximos.

x=sin(ang)*LL;

y=(1-cos(ang))*LL;

Ecin=0.5*M3*(v_ang*LL).^2;

Epot=M3*g*y;

Etot=Ecin+Epot;

% Dibujo posiciones x,y

figure(27)

plot(t,x,'k',t,y,'r');

xlabel('tiempo (s)');

ylabel('posición (m)');

title('Posiciones x e y del péndulo en función del tiempo');

legend('x','y');

axis([0 max(t)*1.05 -x(1)*1.05 x(1)*1.05]);

% Dibujo energías

figure(28)

plot(t,Ecin,'b',t,Epot,'m',t,Etot,'g');

xlabel('tiempo (s)');

ylabel('posición (m)');

title('Energías del péndulo en función del tiempo');


legend('E_{cinetica}','E_{potencial}','E_{total}');

axis([0 max(t)*1.05 0 Epot(1)*1.1]);


% Control 3 ejercicio 2a

clear all; close all; home;

% leo datos del fichero

load('C3_datos.mat', 'Pot', 'rV', 'rq', 'lim');

% defino la constante eléctrica

KC=9e9;

% paso los datos de longitudes de cm a m

rq=rq*1e-2;

rV=rV*1e-2;

lim=lim*1e-2;

% Parte A

% Debo resolver el sistema de 4 ecuaciones y 4 incognitas de las cargas y

% potenciales.

% Este sistema de ecuaciones se puede escribirse en función de dos

% matrices generadas a partir de los vectores posición de las cargas y de

% los potenciales (ver presentación sobre obtención de soluciones por

% mínimos cuadrados): La primera debe repetir en filas las posiciones de

% las cargas y la segunda repetir en columnas las posiciones de los

% potenciales. Para generar tales matrices recurrimos al comando 'meshgrid'

[Mrq,MrV]=meshgrid(rq,rV);

% Usando esas matrices es facil definir la matriz de coeficientes del

% sistema de ecuaciones

MA=KC*((MrV-Mrq).^2).^(-0.5);

% resolvemos el sistema

qq=(MA\(Pot'))'; %lo traspongo para que quede un vector fila

% escribo la solución en un fichero

save('C3_3sol','qq');

% Parte B

% genero vector lineal en la región solicitada para las coordenadas x,y

x=linspace(-lim,lim,200);

% y a partir de él genero el meshgrid que usaré en el calculo del potencial

[xx,yy]=meshgrid(x);
% primero genero una matriz de potencial cero

VV=zeros(size(xx));

% ahora utilizo un bucle que pasará por todas las cargas para calcular el

% potencial que produce cada carga y sumarselo a 'VV'

for i=1:length(qq)

VV=VV+qq(i)*((xx-rq(i)).^2+yy.^2).^(-0.5);

end

% ahora dibujo el potencial en la región solicitada

figure (31)

surf(xx,yy,VV, 'EdgeColor', 'none');

view(11,10); % para verloen una posición más favorable

xlabel('x (m)');

ylabel('y (m)');

zlabel('V(x,y) (V)');

title('Potencial generado por las 4 cargas en la región solicitada');

También podría gustarte