Celia Castillo Martinez

Contents

EJERCICIO 1

apartado a

%function f = factr(n)
%if n == 0
%    f = 1;
%else
%    f = n * factr(n-1);
%end
%end

%Llamamos a la funcion con el nombre factr creado en el script con el mismo
%nombre, y lo evaluamos para n=4, por ejemplo.
factr(4)
ans =

    24

apartado b

%function f = combina(n,j)
%n:tamaño de la colección
%j:vector de cero a n
%a=n-j;
%f=factr(n)/(factr(j)*factr(a));
%end

%Llamamos a la funcion con el nombre combina creado en el script con el mismo
%nombre, y lo evaluamos para n=5 y j=2, por ejemplo
combina(5,2)
ans =

    10

apartado c

%function f=bernstein(n,t)
%Parámetro t, según se indica en el enunciado está en el intervalo [0,1]
%coef=[];
%for i=0:n
%    comb=combina(n,i);
%    a=n-i;
%    b=comb*t^i*(1-t)^a;
%    coef=[coef b];
%end
%f=coef'; %Muestra vector con los valores de los polinomios para un t determinado
%end

%Llamamos a la funcion con el nombre berstein creado en el script con el mismo
%nombre, y lo evaluamos para n=3 y t=0.5 por ejemplo.
bernstein(3,0.5)

% Función para el dibujo de los polinomios de grado 3 de Bernstein:
% function f=ber_vect(n,t)
% %Función que recurre a bernstein para dibujar los valores de los polinomios
% %en la misma gráfica
% %b=bernstein(n,t);%Vector con los valores del polinomio para un t
% m=length(t);
% b=[];
% for j=t
%    b1=bernstein(n,j);
%    b=[b b1];%Se guardan todos los valores de los polinomios
%    plot(j,b1,'o');hold on
% end
% grid on, title('Gráfico de los polinomios de bernstein de grado n');
% xlabel('Parámetro t');ylabel('Valores');
% end
%Ejemplo:
n=3;
t1=0:0.1:1;
ber_vectbueno(n,t1);
ans =

    0.1250
    0.3750
    0.3750
    0.1250

apartado d

%Vectores:(de dos componentes: la curva es planar, por tanto)
vx=[1 2 4 4.6]';
vy=[1 3 -1 1.5]';
%Variación del parámetro t en 0.01
t=0:0.01:1;
%Representación del polígono de control:
figure(3)
plot(vx,vy,'-o');grid on, hold on;
title('Polígono de control y curva de Bézier'); xlabel('coordenadas x');ylabel('coordenadas y');
n=3;
%Por cada t se tiene un punto de coordenadas x,y
X1=[];Y1=[];
for j=t
    b=bernstein(n,j);
    x1=vx.*b;
    y1=vy.*b;
    %Vectores que guardan los valores de la curva de Bézier para cada i:
    X1=[X1 x1];
    Y1=[Y1 y1];
end
%Para guardar en un vector todos los valores de los sumatorios para cada t:
xx=[];yy=[];
for j=1:length(X1)
    xx=[xx;sum(X1(:,j))];
    yy=[yy;sum(Y1(:,j))];
end
plot(xx,yy);hold off
legend('Polígono de Control','Curva de Bézier');

EJERCICIO 2

apartado a

% Leer los datos de viento del fichero y hacer un histograma
% considerando intervalos de clase entre [0,25].
% Leer del rango B2:B52129
datos=xlsread('datosviento.xlsx','B2:B52129');
nbins=0:25;

%No se si esto funciona, es un intento de sacar los valores de frecuencia
%del histograma, aunque ha dejado de dibujarlo, seguir comprobando
figure(4)
hist(datos,nbins)
title('Histograma de frecuencias')
grid on

apartado b

%Lectura de datos, gráfico del histograma de frecuencias y
%ajustes
%Lectura de datos:
lect1=xlsread('datosviento.xlsx');
velocidad=lect1(:,1);

%Interpolación si necesario
if any(isnan(velocidad)) %si hay algún NaN
    x=1:length(velocidad);
    i=find(~isnan(velocidad));
    velocidad=interp1(x(i),velocidad(i),x);
end

%Histograma de frecuencias
x=0.5:1:max(velocidad);
horas=hist(velocidad,x);
%Convierte a frecuencias
frec=horas/sum(horas);
[n xout]=hist(velocidad);
bar(xout,n*100/length(lect1));grid on,
title('Histograma 2')
xlabel('Velocidades del viento')
ylabel('Porcentaje de ocurrencias (%)');

%Ajuste a la función de Weibull
modelfunc=@(a,x) (a(1)/a(2))*((x/a(2)).^(a(1)-1)).*exp(-(x/a(2)).^a(1));
beta0=[mean(velocidad) std(velocidad)];%Valores iniciales de los parámetros
beta=nlinfit(x,frec,modelfunc,beta0);
%Parametros de Weibull
k=beta(1);, c=beta(2);
fprintf('Parámetros Weibull: k=%1.4f, c=%1.4f\n',k,c)

%Gráfica del ajuste

%diagrama de frecuencias
figure(5)
bar(x,frec,'b');grid on;hold on
%representa la curva de ajuste
x=linspace(0,max(velocidad),100);
y=modelfunc(beta,x);
plot(x,y,'r')
title('Ajuste a la función Weibull')
xlabel('Velocidad')
ylabel('Frecuencia')
hold off
Parámetros Weibull: k=2.3849, c=6.0208

apartado c

% Leer los datos x e y del archivo de excel
x=xlsread('datospotencia','A2:A27');
y=xlsread('datospotencia','B2:B27');

%Puntos de la interpolación entre 0 y 25 en intervalos de 0.5
xq1 = 0:0.5:25;
p = pchip(x,y,xq1);

figure(6)
plot(x,y,'o',xq1,p,'-')
grid on
title('Curva de potencia de un aerogenerador')
legend('Sample Points','pchip','Location','SouthEast')

apartado d

%Script que agrupa los dos apartados anteriores e introduce la integración por quad
%directamente de los datos de las velocidades del viento
potencia=0.5*1.225*sum(velocidad.^3)/length(velocidad);
fprintf('Potencia, directamente de las medidas: %3.1f\n',potencia);
media=mean(velocidad);
%función de distribución de Weibull
potencia=0.5*1.225*media^3*gamma(1+3/k)/(gamma(1+1/k)^3);
fprintf('Potencia, función Weibull: %3.1f\n',potencia);


%Potencia media con quad

%datos de la curva de potencia
%Sacados de los datos de potencia del excel

Pr=1300; x0=4.0;xr=20;x1=25;

%Valores de los parametros de Weibull
k=2.3849;
c=6.0208;

potencia=xlsread('datospotencia.xlsx','B2:B27');
x=0:1:25;
pot=potencia(x>=x0 & x<=xr);

x=x0:1:xr;

%Ajuste
p=polyfit(x,pot',3); %ajuste a un polinomio de tercer grado
yp=polyval(p,x);

%cálculo de la potencia media
f=@(x) (k/c)*((x/c).^(k-1)).*exp(-(x/c).^k); %función de Weibull
h=@(x) f(x).*polyval(p,x);
power=quad(h,x0,xr)+Pr*quad(f,xr,x1);
fprintf('La potencia media es: %3.1f\n',power)
Potencia, directamente de las medidas: 187.8
Potencia, función Weibull: 170.0
La potencia media es: 199.1

EJERCICIO 3

Resolver la ecuación diferencial mediante el solver ODE RK (ode45) para un periodo de 40 seg. Graficar en una misma gráfica el desplazamiento en función del tiempo para cada uno de los valores del coeficiente de amortiguamiento: 5, 40, 200 Sujeta a las condiciones iniciales: m=20 Kg k=20N/m V0=0 m/s X0=1m

figure(7)

m=20;
k=20;
x0=[1,0]; %1 es posicion inicial y 0 es velocidad inicial
tf=40; %Quiero graficar de 0 a 40 segundos
c1=5;
c2=40;
c3=200;

%Indico cual es la funcion
%x(1) es x y x(2) es v
%Luego el punto y coma sirve como separador de ambos miembros (funciones a integrar)

f1=@(t,x) [x(2);(-k*x(1)-c1*x(2))/m];
f2=@(t,x) [x(2);(-k*x(1)-c2*x(2))/m];
f3=@(t,x) [x(2);(-k*x(1)-c3*x(2))/m];

[t1,x1]=ode45(f1,[0,tf],x0);
[t2,x2]=ode45(f2,[0,tf],x0);
[t3,x3]=ode45(f3,[0,tf],x0);
%Dibujo la grafica de x en funcion de t para c=5

plot(t1,x1(:,1))
grid on
xlabel('t');
ylabel('x');
title('Masa-Resorte-Amortiguador');

%Para dibujar todas las graficas juntas
hold on;

%Grafica para c=40
plot(t2,x2(:,1))
%Grafica para c=200
plot(t3,x3(:,1))

legend('c=5','c=40', 'c=200')

EJERCICIO 4 GUI

%El script en el que se pide realizar una GUI para calcular la fecha y
%la longitud de una catenaria y graficar la misma, esta incluido en el zip
%con el resto de ejercicios, asi como la imagen de la grafica.
%No he podido introducirlo en la tarea, me daba un error y no funconaba
%supongo que es normal pues tiene que interactuar con el usuario y en el
%publish tampoco se hubiera podido hacer

Catenaria