Tarea 1
Contents
Ejercicio 1.A
function [salida] = factr(n) %FACTR es una función que calcula el factorial de un número de forma %recursiva. %El número ha de ser un entero positivo if n==1 salida= n; elseif n==0 salida=1; elseif n~=1 salida= n.*factr(n-1); end end
Ejercicio 1.B
function [salida] = combina(n,i) %COMBINA funcion devuelve el número de combinaciones de tamaño i de una %coleccion de tamaño n %Está construida a partir de factr salida=(factr(n))./(factr(i).*factr(n-i)); end
Ejercicio 1.C
function [salida] = bernstein(n,i,t) %bernstein devuelve el valor para un polinomio de Brenstein contreto y para %un valor de t % Depende de combina y factr
salida=combina(n,i).*t.^i.*(1-t).^(n-i);
end
function dibujo_b(n)
xd=linspace(0,1);
for i=0:n yd=bernstein(n,i,xd); plot(xd,yd) hold on end legend('B_3_0','B_3_1','B_3_2','B_3_3') end
Ejercicio 1.D
t=linspace(0,1); vx=[1,2,4,4.6]; vy=[1,3,-1,1.5]; plot(vx,vy) hold on xsalida=0; ysalida=0; n=length(vx)-1; %orden de la curva de Beizer for i=0:n xdd=bernstein(n,i,t)*vx(i+1); ydd=bernstein(n,i,t)*vy(i+1); xsalida=xsalida+xdd; ysalida=ysalida+ydd; end plot(xsalida,ysalida)
Ejercicio 2.A
Desarrollar un script que lea los datos de velocidad del viento (xlsread) y grafique el histograma (hist) considerando intervalos de clase entre [0,25].
[NUMEROS,TEXTO,RESTO]=xlsread('sotaventogaliciaanual.xlsx'); figure(2) histogram(NUMEROS,0:25) %Uso histohram en lugar de hist porque MatLab lo recomienda.
Ejercicio 2.B
%Desarrollar un script que lea los datos de velocidad del viento (xlsread), los convierta a un %histograma de frecuencias y ajuste a una distribución de Weibull mediante una regresión no %lineal (nlinfit) usando como valores iniciales de los parámetros k y c los valores del promedio %y el cuadrado de la desviación estándar de la velocidad del viento respectivamente. Graficar %en un mismo gráfico el diagrama de frecuencias y la curva de ajuste. [NUMEROS,TEXTO,RESTO]=xlsread('sotaventogaliciaanual.xlsx'); k0=mean(NUMEROS); c0=std(NUMEROS)^2; y=histc(NUMEROS,0:25); frecuencias=y/sum(y); a0=[c0 k0]; x=0:25; x=x'; f=@(a,x) (a(1)/a(2))*((x/a(2)).^(a(1)-1)).*exp(-(x/a(2)).^a(1)); af=nlinfit(x,frecuencias,f,a0); xd=linspace(0,25); yd=f(af,xd); bar(0:25,frecuencias) hold on plot(xd,yd)
Ejercicio 2.C
Desarrollar un script para interpolar (interp1) la curva de potencia del generador mediante un polinomio cúbico (pchip). Graficar los puntos de la curva y los valores de la interpolación.
[NUMEROS,TEXTO,RESTO]=xlsread('sotavento_curva potencia.xlsx'); velocidad=NUMEROS(:,1); pot=NUMEROS(:,2); xd=linspace(0,25); yd=interp1(velocidad,pot,xd,'pchip'); plot(velocidad,pot,'*') hold on plot(xd,yd)
Ejercicio 2.D
Desarrollar un script para agrupar los pasos b y c y calcular la integración (quad) necesaria para calcular la potencia media. (Referencia)
[NUMEROS,TEXTO,RESTO]=xlsread('sotaventogaliciaanual.xlsx'); k0=mean(NUMEROS); c0=std(NUMEROS)^2; BINS=0:25; y=histc(NUMEROS,BINS); frecuencias=y/sum(y); a0=[c0 k0]; x=0:25; x=x'; f=@(a,x) (a(1)/a(2))*((x/a(2)).^(a(1)-1)).*exp(-(x/a(2)).^a(1)); %distribución de weibull af=nlinfit(x,frecuencias,f,a0); %función de potencia [NUMEROS,TEXTO,RESTO]=xlsread('sotavento_curva potencia.xlsx'); velocidad=NUMEROS(:,1); pot=NUMEROS(:,2); P=polyfit(velocidad,pot,3); g=@(x) f(af,x).*polyval(P,x); ff=@(x) f(af,x); Potencia_media=quad(g,0,14)+1300*quad(ff,14,25)
Potencia_media = 221.1094
Ejercicio 3
%En este ejercicio se procede a la resolución de una ODE de segundo orden %mediante el método de "ode45". Esto lo hacemos descomponiendo la ecuación %diferencial de segundo orden en un sistema de dos ecuaciones de primer %orden. m=20; %masa del cuerpo k=20; %constanteelástica del muelle %condiciones iniciales x0=[1,0]; % 1 es posición inicial, 0 es velocidad inicial tf=40; %tiempo final figure(3) for c=[5,40,200] f=@(t,x) [x(2);(-k*x(1)-c*x(2))/(m)]; % x(1) es el desplazamiento y x(2) es la velocidad [t,x]=ode45(f,[0,tf],x0); plot(t,x(:,1)) hold on end legend('Constante de amortiguación 5','Constante de amortiguación 40','Constante de amortiguación 200') grid on xlabel('Tiempo (s)') ylabel('Desplazamiento (m)'); title('Sistema masa-resorte-amortiguador')
Ejercicio 4
Desarrollar una GUI para calcular la flecha y longitud de un cable suspendido entre dos apoyos situados en el mismo nivel, así como la gráfica de la catenaria.