COMPUTACIÓN APLICADA A LA INGENIERÍA

Tarea Matlab: Christian Viota Barquín

Contents

EJERCICIO 1

% apartado a
type factr
%apartado b
type combina
% apartado c
type bernstein
% apartado d
t=linspace(0,1);
V=[1 2 4 4.6;1 3 -1 1.5];
plot(V(1,:),V(2,:),'-o');
n=size(V);
n=n(2);
s=size(t);
x=zeros(n,s(2));
for i=1:n
    x(i,:)=bernstein(n-1,i-1,t)*V(1,i);
    y(i,:)=bernstein(n-1,i-1,t)*V(2,i);
end
a=sum(x);
b=sum(y);
hold on;
plot(a,b);

% Muestra de la gráfica
t=linspace(0,1);
n=3;
for i=0:n
    b=bernstein(n,i,t);
    plot(t,b);
    hold on;
end
xlabel('t')
ylabel('Polinomio de Bernstein')
title('Polinomios de Bernstein de grado 3')
legend('B_3_,_0','B_3_,_1','B_3_,_2','B_3_,_3')
function f=factr(n)
 if n==0
     f=1;
 else
     f=n*factr(n-1);
 end
end

function c=combina(n,i)
    c=factr(n)/(factr(i)*factr(n-i));
end

function ber=bernstein(n,i,t)
    ber=combina(n,i)*(t.^i).*(1-t).^(n-i);
end

EJERCICIO 2

%Histograma datos viento
datos_viento=xlsread('sotaventogaliciaanual.xlsx');
intervalos=0:1:25;
%figure;
hist(datos_viento,intervalos);
title('Histograma datos viento');
xlabel('Velocidad (m/s)');
ylabel('Frecuencia');
hold off;

%Ajuste a la funcion Weibull
velocidad=xlsread('sotaventogaliciaanual.xlsx');
%interpolar si es 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
x=0.5:1:max(velocidad);
horas=hist(velocidad,x);

%convierte a frecuencias y ajusta a la función de Weibull
frec=horas/sum(horas);
f=@(a,x) (a(1)/a(2))*((x/a(2)).^(a(1)-1)).*exp(-(x/a(2)).^a(1));
a0=[2 8];  %valor inicial de los parámetros
af=nlinfit(x,frec,f,a0);

%diagrama de frecuencias
figure;
bar(x,frec,'c');
hold on;

%Curva de ajuste
x=linspace(0,max(velocidad),100);
y=f(af,x);
plot(x,y,'r')

title('Ajuste a la función Weibull')
xlabel('Velocidad (m/s)')
ylabel('Frecuencia')
hold off

%APARTADO C
%Interpolar la curva de potencia del generador

Pr=1300; x0=3.0;xr=20;x1=25; %datos de la curva de potencia
potencia=xlsread('sotavento_curva potencia.xlsx','B2:B27');
x=0:1:25;
pot=potencia(x>=x0 & x<=xr);
x=x0:1:xr;
figure;
plot(x,pot,'ro','markersize',3,'markerfacecolor','r')
title('Ajuste de la curva de potencia de un generador');
axis([0 22 0 1400]);
xlabel('Velocidad (m/s)');
ylabel('Potencia (MW)');
grid on;
hold on;

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

%Potencia media
k=2.3849; c=6.0208; %Parámetro de wibull calculados antes
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 (MW) es: %3.1f\n',power)
La potencia media (MW) es: 203.4

EJERCICIO 3

m=20;
k=20;
c=5;c1=40;c2=200;
x0=[1,0];% Desplazamiento y velocidad iniciales
tf=40; %Tiempo final
f=@(t,x) [x(2);-c*x(2)/m-k*x(1)/m];
[t,x]=ode45(f,[0,tf],x0);
plot(t,x(:,1))
grid on
xlabel('t')
ylabel('x')
title('Sistema masa-resorte-amortiguador')
hold on
f1=@(t,x) [x(2);-c1*x(2)/m-k*x(1)/m];
[t,x]=ode45(f1,[0,tf],x0);
plot(t,x(:,1))
f2=@(t,x) [x(2);-c2*x(2)/m-k*x(1)/m];
[t,x]=ode45(f2,[0,tf],x0);
plot(t,x(:,1))