SlideShare una empresa de Scribd logo
1 de 112
Descargar para leer sin conexión
ANEXO: PROGRAMAS DE MATLAB
CÁLCULO DE DESPLAZAMIENTOS
HOMERBUCLE.M
clear all;
global E;
global IX; % direccion general de batimiento
global IY; % direccion general de arrastre
global IXY; % producto de inercia para esos ejes.
global K;
global area;
global G;
global modtor;
global Kt;
global CL;
global L;
global planosZ;
%global xi;
%global x;
global temps0;
%%%%%%%%%%%% Propiedades del material: material sandwich.%%%%%%%%%%%%%
E=1.2261e10; %2.6733e+010; Modulo elastico del material(N/m2)
K=5/6; % Rigidez de la viga (para una viga de seccion rectangular toma
este valor)
nu=0.3; % Coeficiente de Poisson
%G=1.0282e+010;
G=2.3e+009; % Modulo a cortante del material
Kt=1e15; %-0.0304e6 % Si no hay acoplamiento Kt=-infinito. %
Acoplamiento flexion-torsion
ro=857.7; %densidad del material sándwich (kg/m3)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Geometria%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%
% Datos iniciales para una viga de geometria cuadrada:
%base=2.5; % base(m)
%hauteur=0.2*base; % altura(m)
L=26; % longitud de la viga(m)
%I=(base*hauteur^3)/12; % momento de inercia respecto al eje x de la
seccion (Ix)
%A=base*hauteur; % area de la seccion rectangular
%J=(1/12)*base*hauteur*(base*base+hauteur*hauteur); % momento polar de
inercia de la seccion: J=Ix+Iy
%Is=ro*J; % elemento de la matriz de masas(kg*m)
% A continuacion modificaremos los valores de la geometria para poder
% obtener una representacion mas compleja y real de la pala.
%%%%%%%%%%% datos que definen la geometria %%%%%%%%%%%%%%%%%%%
% Se encuentran guardados en el mat-file geometria, si se quieren
modificar
% los datos de la pala, hay que modificarlos en los respectivos
programas y
% correr el script palahomer.m que nos modificara las variables del
% mat-file ''geometria''.
load geometria
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Una vez tenemos estos valores, podemos obtener las variables para
% cualquier punto de la pala mediante interpolacion con pchip.
%%%%%%%%%%% Otras variables importantes del
programa%%%%%%%%%%%%%%%%%%%%%%
CL=1;
type=2; % Si es uno analizaremos el estado 1 de carga.
a=[7:2:25]./L; % vector de puntos de aplicacion
(adimensional)de las cargas exteriores variables en el tiempo
dimension=length(a); % número de cargas exteriores (longitud de a).
force=ones(1,10); % vector de la misma longitud que 'a'
donde sus elementos valen 1 si hay fuerza puntual exterior en la
posicion 'a' ; 0 si no
%force=zeros(1,10);
moment_torsion=ones(1,10); % % vector de la misma longitud que
'a' donde sus elementos valen 1 si hay momento torsor exterior en la
posicion 'a' ; 0 si no
%moment_torsion=zeros(1,10);
temps0=2.4; % tiempo que duran las fuerzas exteriores. Todas
duran lo mismo en el tiempo (con 3.6 segundos ya no me converge)
n=4; % numero de puntos de Gauss
m=1.2e3; % numero de intervalos de integracion
h=temps0/m; %h=temps0/m; %H/m; % tamaño del intervalo de
integracion
met='sto'; % Metodo numerico de integracion ver el archivo metodo.m
% comienzo del programa
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
R=zeros(2*n,2*n);
M=zeros(2*n,2*n);
C=zeros(2*n,2*n);
[y,w]=gauss(0,L,n);
y=y/L; % adimensionalizamos los valores de los puntos de gauss, pues
las funciones de influencia estan
% adimensionalizadas en longitud.
% y: punto de Gauss
% w: coeficientes de Gauss
% Las tres matrices R M y C son matrices 2*n,2*n o vectores de
dimensiones 2*n, pues por cada punto de gauss hay que
% calcular dos despalazamientos (desplazamiento vertical lineal y giro
por torsion en el plano perpendicular a la seccion de la viga o
% giro por flexion en el plano de carga de la viga).
% Implementacion de la matriz de integracion[R]
for i=1:2:2*n;
R(i,i)=w((i+1)/2);
R(i+1,i+1)=w((i+1)/2);
end
% Implementacion de la matriz de masas [M]
% Para ello necesitamos calcular los valores de densidad,area y modulo
de
% torsion en los puntos de gauss: usaremos polinomios interpoladores.
% inicialmente consideramos que la densidad es constante en toda la
pala.
A=pchip(planosZ,area,y*L); % valores de area en los puntos de gauss.
J=pchip(planosZ,modtor,y*L); % valores del modulo torsion en puntos
gauss
Is=ro.*J;
for i=1:2:2*n;
M(i,i)=ro.*A((i+1)/2);
M(i+1,i+1)=Is((i+1)/2);
end
% Implementacion de la matriz de funciones de influencia [C]
for i=1:2:2*n;
for j=1:2:2*n;
C(i,j)=w1(y((i+1)/2),y((j+1)/2));
C(i,j+1)=w3(y((i+1)/2),y((j+1)/2));
C(i+1,j)=fi1(y((i+1)/2),y((j+1)/2));
C(i+1,j+1)=fi3(y((i+1)/2),y((j+1)/2));
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% calculo del desplazamiento estatico (deltaest)
deltaest=zeros(2*n,m); % la matriz de desplazamientos es una matriz
donde en cada una de las columnas se han almacenado
% los 2 desplazamientos de cada punto de gauss en un instante concreto
de tiempo.
for i=1:2:2*n
for s=1:dimension
for j=0:m-1
if j*h<temps0
[effort,m_torsion]=actionbuclejf(j*h,a(s),type,s);
if (force(s)==1)&&(moment_torsion(s)==0) % si
hay solo fuerza puntual
deltaest(i,j+1)=deltaest(i,j+1) +
w1(y((i+1)/2),a(s))*effort; % asi vamos añadiendo al valor anterior
el nuevo desplazamiento generado por nueva carga.
deltaest(i+1,j+1)=deltaest(i+1,j+1) +
fi1(y((i+1)/2),a(s))*effort;
elseif (force(s)==0)&&(moment_torsion(s)==1) % si
hay solo momento de torsion
deltaest(i,j+1)=deltaest(i,j+1) +
w3(y((i+1)/2),a(s))*m_torsion;
deltaest(i+1,j+1)=deltaest(i+1,j+1) +
fi3(y((i+1)/2),a(s))*m_torsion;
elseif (force(s)==1)&&(moment_torsion(s)==1) % hay
fuerza puntual y momento de torsion
deltaest(i,j+1)=deltaest(i,j+1) +
w1(y((i+1)/2),a(s))*effort + w3(y((i+1)/2),a(s))*m_torsion;
deltaest(i+1,j+1)=deltaest(i+1,j+1) +
fi1(y((i+1)/2),a(s))*effort + fi3(y((i+1)/2),a(s))*m_torsion;
else % no hay cargas (force=0 y moment_torsion=0)
deltaest(i,j+1)=deltaest(i,j+1);
deltaest(i+1,j+1)=deltaest(i+1,j+1);
break % pongo esto para no estar entrando
continuamente en el bucle sin analizar nada.
end
else
deltaest(i,j+1)=0;
deltaest(i+1,j+1)=0; % ¿ Haria falta poner esto, si
nunca entra aqui j*h siempre es menor que temps0
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%% PRINCIPO DE STOERM %%%%%%%%%%%%%%%%%%%%%
% resolucion de la ecuacion diferencial
% algoritmo de Stoerm
metodo % corremos el programa metodo, el cual, al estar definida la
variable met como 'sto' nos ejecuta el algoritmo de stoerm
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% FINAL DE STOERM %%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Del algoritmo de Stoerm acabamos obteniendo el valor de delta.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Calculo del desplazamiento en todos los puntos de la viga:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nb=40; % numero de puntos deseados
deltapp=zeros(2*n,m); % esto se podria quitar
point=zeros(nb,1); % esto se podria quitar
for i=1:nb+1;
point(i)=1/nb*(i-1);
end
% Point es un vector donde se representa la posicion de nb puntos de
la viga con equiespaciado entre puntos de 1/nb
deltapp=-invCRM*(delta-deltaest); % matriz que representa la segunda
derivada de delta.
C=zeros(2*nb,2*n);
for i=1:2:2*nb;
for j=1:2:2*n;
C(i,j)=w1(point((i+1)/2),y((j+1)/2));
C(i,j+1)=w3(point((i+1)/2),y((j+1)/2));
C(i+1,j)=fi1(point((i+1)/2),y((j+1)/2));
C(i+1,j+1)=fi3(point((i+1)/2),y((j+1)/2));
end
end
% Ahora llenamos la matriz de funciones de influencia colocando en
cada funcion de influencia los puntos
% de gauss como valores de chi, y valores equiespaciados de la
posicion de la viga como valores de x
% (ya no introducimos como haciamos antes en los valores de x de las
funciones de influencia los puntos de gauss)
deltaest=zeros(2*nb,m);
for i=1:2:2*nb
for s=1:dimension
for j=0:m-1
if j*h<temps0
[effort,m_torsion]=actionbuclejf(j*h,a(s),type,s);
if (force(s)==1)&&(moment_torsion(s)==0) % si
hay solo fuerza puntual
deltaest(i,j+1)=deltaest(i,j+1) +
w1(point((i+1)/2),a(s))*effort;
deltaest(i+1,j+1)=deltaest(i+1,j+1) +
fi1(point((i+1)/2),a(s))*effort;
elseif (force(s)==0)&&(moment_torsion(s)==1) % si
hay solo momento de torsion
deltaest(i,j+1)=deltaest(i,j+1) +
w3(point((i+1)/2),a(s))*m_torsion;
deltaest(i+1,j+1)=deltaest(i+1,j+1) +
fi3(point((i+1)/2),a(s))*m_torsion;
elseif (force(s)==1)&&(moment_torsion(s)==1) % hay
fuerza puntual y momento de torsion
deltaest(i,j+1)=deltaest(i,j+1) +
w1(point((i+1)/2),a(s))*effort + w3(point((i+1)/2),a(s))*m_torsion;
deltaest(i+1,j+1)=deltaest(i+1,j+1) +
fi1(point((i+1)/2),a(s))*effort + fi3(point((i+1)/2),a(s))*m_torsion;
else
% si no hay fuerza ni momento el desplazamiento es el
% que habia antes.
deltaest(i,j+1)=deltaest(i,j+1);
deltaest(i+1,j+1)=deltaest(i+1,j+1);
break % ponemos esto para no estar entrando
continuamente en el bucle sin analizar nada.
end
else
deltaest(i,j+1)=0;
deltaest(i+1,j+1)=0;
end
end
end
end
delta=zeros(2*nb,m); % esto se podria quitar
delta=deltaest-C*R*M*deltapp;
%despl=zeros(m/100,nb);
%teta=zeros(m/100,nb);
%fi=zeros(m/100,nb);
for i=1:2:2*nb
for j=1:1:m
despl(j,(i+1)/2)=delta(i,j);
fi(j,(i+1)/2)=delta(i+1,j);
tiempo(j)=t(j);
end
end
% esto nos permite separar de la matriz de desplazamientos, el
desplazamiento vertical, giro por flexion y
% giro por torsion en funcion del tiempo de cada uno de los nb puntos
seleccionados de la viga en tres
% vectores distintos que los almacenan: despl, teta y fi
respectivamente.
% El vector de tiempos es el ya obtenido en el algoritmo de stoerm:
es un vector equiespaciado.
tiempo2=tiempo'; % trasponemos el vector para que quede igual que
despl, teta y fi, en cuyas columnas se almacenan
% los desplazamientos correspondientes a cada uno de los puntos de la
viga en el transcurso del tiempo.
%for i=1:3:3*nb
% for j=1:m
% despl((i+2)/3,j)=-delta(i,j);
% teta((i+2)/3,j)=-delta(i+1,j);
% fi((i+2)/3,j)=-delta(i+2,j);
% end
%end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% affichage du resultat
% Graficos de desplazamiento vertical:
figure(1)
plot(tiempo2,despl(:,40),'.b-') % nos permite ver la evolucion de
un punto de la viga en el tiempo
title('evolucion del extremo de la viga en el tiempo')
xlabel('tiempo(s)')
ylabel('desplazamiento vertical (m)')
grid
figure(2)
plot(1:40,despl(1200,:),'.r-') % nos permite ver la deformada de la
viga en un determinado tiempo
title('deformada de la viga en un determinado tiempo')
xlabel('posicion de los puntos de la viga (pto 40 = extremo)')
ylabel('desplazamiento vertical (m)')
grid
%Graficos de angulo de torsion:
figure(3)
plot(tiempo2,fi(:,40),'.b-') % nos permite ver la evolucion del
angulo torsion de un punto de la viga en el tiempo
title('evolucion del angulo de torsion del extremo de la viga en el
tiempo')
xlabel('tiempo(s)')
ylabel('angulo de torsion')
grid
figure(4)
plot(1:40,fi(1200,:),'.r-') % nos permite ver el angulo de torsion de
la viga en un determinado tiempo
title('angulo de torsion de la viga en un determinado tiempo')
xlabel('posicion de los puntos de la viga (pto 40 = extremo)')
ylabel('angulo de torsion')
grid
% Hemos puesto como amplitud de la fuerza en el programa action un
valor de Pmax = 20:
% Para este valor los valores de axis del programita siguiente nos
permiten verlo bien.
% Probar esta secuencia para ver bien los resultados:
% Para visualizar la deformada de la viga en el transcurso del tiempo:
%for i=1:1200
%if i<600
%plot(1:40,despl(i,:),'r-')
%hold on
%pause(0.1)
%axis([38.5 40 -6e-5 1e-8])
%else
%plot(1:40,despl(i,:),'b-')
%hold on
%pause(0.1)
%axis([38.5 40 -6e-5 1e-8])
%end
%end
% Y para visualizar la evolucion de cada punto de la viga en funcion
del tiempo:
%for i=1:40
%plot(tiempo2,despl(:,i))
%hold on
%pause(1)
%end
ACTIONBUCLEJF.M
function [effort,moment_torsion] = actionbuclejf(ti,a,type,s)
global temps0;
factorcarga=1.35;
if type==1
load cargasoperacion
tiempo=(giro1)*60/(25*2*pi);
%effort0=pchip(tiempo,Fax1(:,s),ti);
effort0=pchip(tiempo,Ftantot(:,s),ti);
effort=effort0*factorcarga;
moment_torsion0=pchip(tiempo,Mtorsor(:,s),ti);
moment_torsion=moment_torsion0*factorcarga;
elseif type==2
load cargaextrema
effort0=pchip(t,Fax(:,s),ti);
effort=effort0*factorcarga;
moment_torsion0=pchip(t,Mtorsor(:,s),ti);
moment_torsion=moment_torsion0*factorcarga;
end
%moment_torsion=0;
METODO.M
% Seleccion del metodo numerico para integral la ecuacion diferencial
if met=='sto'
stoerm
end
if met=='abm'
adbami
end
if met=='ham'
hamming
end
if met=='msi'
milsim
end
if met=='rk2'
runkut2
end
if met=='rk4'
runkut4
end
STOERM.M
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%% PRINCIPIO DE STOERM %%%%%%%%%%%%%%%%%%%%%
% resolucion de la ecuacion diferencial.
% algoritmo de Stoerm
% Si nos fijamos en los apuntes se ve como la y de la ecuacion
corresponde a nuestra delta
% que es funcion del tiempo (el equivalente a la variable x de la
formula). La funcion de la
% derecha de la ecuacion, que es f(x,y) esta representada en nuestro
problema por (deltaest-delta)/CRM
% que es una funcion de x y de y, o lo que es lo mismo de t y de
delta, pues la variable delta
% esta representada por el termino delta y la varieble del tiempo por
deltaest, pues es funcion solo
% de t ya que en x esta evaluada sobre los puntos de gauss.
% Asi x0=t0; y(x0)=y(t0)=y0=delta0; z0 es igual: dy/dx=ddelta/dt=z0.
t0=0;
z0=0;
delta0=0;
delta=zeros(2*n,m);
invCRM=inv(C*R*M);
inc=zeros(2*n,m);
inc(:,1)=h*(z0+1/2*h*invCRM*(deltaest(:,1)-delta(:,1)));
delta(:,2)=delta(:,1)+inc(:,1);
for k=2:m-1
inc(:,k)=inc(:,k-1)+h*h*invCRM*(deltaest(:,k)-delta(:,k));
delta(:,k+1)=delta(:,k)+inc(:,k);
end
t=zeros(1,m);
for k=1:m
t(k)=t0+(k-1)*h;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% FINAL DE STOERM %%%%%%%%%%%%%%%%%%%%%%%%%%%%
GAUSS.M
function[x,w]=gauss(x1,x2,n)
eps=0.001;
m=(n+1)/2;
xm=0.5*(x1+x2);
xl=0.5*(x2-x1);
for i=1:m
z=cos(pi*(i-0.25)/(n+0.5));
p1=1;
p2=0;
for j=1:n
p3=p2;
p2=p1;
p1=((2*j-1)*z*p2-(j-1)*p3)/j;
end
pp=n*(z*p1-p2)/(z*z-1);
z1=z;
z=z1-p1/pp;
while abs(z-z1)>eps
p1=1;
p2=0;
for j=1:n
p3=p2;
p2=p1;
p1=((2*j-1)*z*p2-(j-1)*p3)/j;
end
pp=n*(z*p1-p2)/(z*z-1);
z1=z;
z=z1-p1/pp;
end
x(i,1)=xm-xl*z;
x(n+1-i,1)=xm+xl*z;
w(i,1)=2*xl/((1-z*z)*pp*pp);
w(n+1-i,1)=w(i);
end;
PALAHOMER.M
% Este script nos va a permitir obtener los datos geometricos
necesarios
% para el programa homer, de manera que si queremos modificar esos
datos
% simplemente tendremos que correr previamente este script para
generar el
% mat file usado en homer. Hacemos esto porq si no hay q modificar
ningun
% dato de la pala, es decir, estamos analizando una pala de unas
% caracteristicas concretas, el programa de analisis homer se
ejecutara mas
% rapido.
% Asi:
L=26; % longitud de la viga(m)
planosZ=linspace(0,L,L+1); % vector longitud en el que vamos a
calcular valores
tipo=2; % definimos el tipo de pala que queremos de los modelos a
estudio.
% Recordar: tipo=1 pala con distribucion de webs desde
transicion
% tipo=2 pala con webs solo zona aerodinamica
% tipo=3 pala sin ninguna distribucion de webs.
% Centros de masas de las secciones (consideraremos ademas que
coinciden
% con los centros de torsion o shear center, por lo que la inercia y
la
% torsion se producira sobre estos puntos):
[xg,yg] = cmasas(planosZ,tipo); % estos valores estan calculados para
cada seccion
% respecto a unos ejes x,y que pasan por su leading edge.
% Momentos de inercia de las secciones:
[cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] =
palalmlineal(planosZ);
[Ixggir,Iyggir,Ixyggir] = mominercia(planosZ,tipo,xg,yg,torsion); %
inercia sobre ejes que pasan por xg,yg
% Hay que pasar estos valores a las direcciones globales de batimiento
y
% arrastre:
IX=Iyggir; % Direccion general de batimiento de la pala (X).
IY=Ixggir; % Direccion general de arrastre de la pala (Y).
IXY=-Ixyggir; % Efecto en el cambio del producto de inercia por el
sentido de ejes considerado
% Sentido de la direccion de batimiento: sentido de la
velocidad del viento.
% Sentido de la direccion de arrastre: Hacia el extrados
del perfil.
% Areas de las secciones: variable area
[xext,yextraext,yintraext,xint,yextraint,yintraint,area]=secciontotpch
ip(planosZ,tipo);
% Modulos de torsion: 'modtor'
[modtor]=modulotorsion(planosZ);
% Una vez obtenidas estas variables generamos un mat-file para el
programa
% homer que las contenga. Este archivo se llamara geometria:
save geometria
W1.M
function [reponse] = w1(x,xi)
global E;
global IX;
global IY;
global IXY;
global K;
global area;
global G;
global modtor;
global Kt;
global CL;
global L;
global planosZ;
x=x*L;
xi=xi*L;
P=1;
puntis=30;
if CL==1
if x<xi
if x==0
reponse=0; % la viga esta empotrada, su extremo no se
mueve.
else
% metodo Hermite:
XH=linspace(0,x,puntis); % XH es la variable de
integracion.
MfH=P*(xi-XH);
%Para no torsion:
%I=pchip(planosZ,IY,XH); % BATIMIENTO (FLAP)
%I=pchip(planosZ,IX,XH); % ARRASTRE (LAG)
%FH=(MfH./(E.*I)).*(x-XH);
% Para torsion:
Iy=pchip(planosZ,IY,XH);
Ix=pchip(planosZ,IX,XH);
Ixy=pchip(planosZ,IXY,XH);
FH=((MfH.*Ix)./(E.*(Ix.*Iy-Ixy.^2))).*(x-XH); % BATIMIENTO
(FLAP)
%FH=((MfH.*Iy)./(E.*(Ix.*Iy-Ixy.^2))).*(x-XH); % ARRASTRE
(LAG)
trapecio=sum(diff(XH).*(FH(1:end-1)+FH(2:end))/2);
% añadimos la parte de hermite a la parte ttrapezoidal.
h = diff(XH);
delta = diff(FH)./h;
d = pchipslopes(h,delta);
D = sum((h.^2).*(d(2:end)-d(1:end-1))/12);
reponse=trapecio-D;
%reponse =-(x^2*L^3/(2*E*I)*(x/3-xi)); sin cortante
%1 reponse = -(-(L/(K*A*G)*x) + x^2*L^3/(2*E*I)*(x/3-
xi)); con
%cortante
end
else
if x==0
reponse=0; % la viga esta empotrada, su extremo no se
mueve.
else
% metodo Hermite:
XH=linspace(0,xi,puntis); % XH es la variable de
integracion.
MfH=P*(xi-XH);
%Para no torsion:
%I=pchip(planosZ,IY,XH); % BATIMIENTO (FLAP)
%I=pchip(planosZ,IX,XH); % ARRASTRE (LAG)
%FH=(MfH./(E.*I)).*(x-XH);
% Para torsion:
Iy=pchip(planosZ,IY,XH);
Ix=pchip(planosZ,IX,XH);
Ixy=pchip(planosZ,IXY,XH);
FH=((MfH.*Ix)./(E.*(Ix.*Iy-Ixy.^2))).*(x-XH); % BATIMIENTO
(FLAP)
%FH=((MfH.*Iy)./(E.*(Ix.*Iy-Ixy.^2))).*(x-XH); % ARRASTRE
(LAG)
trapecio=sum(diff(XH).*(FH(1:end-1)+FH(2:end))/2);
% añadimos la parte de hermite a la parte ttrapezoidal.
h = diff(XH);
delta = diff(FH)./h;
d = pchipslopes(h,delta);
D = sum((h.^2).*(d(2:end)-d(1:end-1))/12);
reponse=trapecio-D;
%reponse = -(xi^2*L^2/(2*E*I)*(xi/3-x)*L);
%1 reponse = -(-L/(K*A*G)*xi +
xi^2*L^2/(2*E*I)*(xi/3-x)*L);
end
end
end
W3.M
function [reponse] = w3(x,xi)
global E;
global IX;
global IY;
global IXY;
global K;
global area;
global G;
global modtor;
global Kt;
global CL;
global L;
global planosZ;
if CL==1
if x<xi
reponse =L^2/(2*Kt)*x^2;
else
reponse =L^2/(2*Kt)*xi^2; % xi*L/Kt*(xi/2-x)*L;
end
end
FI1.M
function [reponse] = fi1(x,xi)
global E;
global IX;
global IY;
global IXY;
global K;
global area;
global G;
global modtor;
global Kt;
global CL;
global L;
global planosZ;
if CL==1
if x<xi
reponse =x*L/Kt*(xi-x/2)*L;
else
reponse =xi^2*L^2/(2*Kt);
end
end
FI3.M
function [reponse] = fi3(x,xi)
global E;
global IX;
global IY;
global IXY;
global K;
global area;
global G;
global modtor;
global Kt;
global CL;
global L;
global planosZ;
x=x*L;
xi=xi*L;
puntis=30;
if CL==1
if x<xi
if x==0
reponse=0; % la viga esta empotrada, su extremo no se
mueve.
else
% metodo Hermite:
XH=linspace(0,x,puntis); % XH es la variable de
integracion.
MtH=1;
J=pchip(planosZ,modtor,XH);
FH=(MtH./(G.*J));
trapecio=sum(diff(XH).*(FH(1:end-1)+FH(2:end))/2);
% añadimos la parte de hermite a la parte ttrapezoidal.
h = diff(XH);
delta = diff(FH)./h;
d = pchipslopes(h,delta);
D = sum((h.^2).*(d(2:end)-d(1:end-1))/12);
reponse=trapecio-D;
%reponse =-(x^2*L^3/(2*E*I)*(x/3-xi)); sin cortante
%1 reponse = -(-(L/(K*A*G)*x) + x^2*L^3/(2*E*I)*(x/3-
xi)); con
%cortante
end
else
if x==0
reponse=0; % la viga esta empotrada, su extremo no se
mueve.
else
% metodo Hermite:
XH=linspace(0,xi,puntis); % XH es la variable de
integracion.
MtH=1;
J=pchip(planosZ,modtor,XH);
FH=(MtH./(G.*J));
trapecio=sum(diff(XH).*(FH(1:end-1)+FH(2:end))/2);
% añadimos la parte de hermite a la parte ttrapezoidal.
h = diff(XH);
delta = diff(FH)./h;
d = pchipslopes(h,delta);
D = sum((h.^2).*(d(2:end)-d(1:end-1))/12);
reponse=trapecio-D;
%reponse = -(xi^2*L^2/(2*E*I)*(xi/3-x)*L);
%1 reponse = -(-L/(K*A*G)*xi +
xi^2*L^2/(2*E*I)*(xi/3-x)*L);
end
end
end
CÁLCULO DE FUERZAS
FUERZASCICLO.M
% Este programa permite calcular las fuerzas aerodinámicas a las que
% se encuentra sometida una pala del aerogenerador en su movimiento de
% giro , dando lugar a fuerzas ciclicas de frecuencia 1P.
giro1=[0:20:360]*pi/180;
num=length(giro1);
% Programa calculo aerogenerador STRIP THEORY (CIEMAT)
% Vamos a intentar calcular la distribucion de fuerzas sobre un rotor
% que presenta las siguientes caracteristicas geometricas en sus
palas.
% Llamada a los programas que contienen la geometria del rotor.
rbuje=1; % (m)
L=26; % (m)
R=L+rbuje; % Radio de 27 m.
%x=0.1:0.01:1;
x=(7:2:25)*(1/L); % vector de puntos con longitudes adimensionales con
la longitud de la pala.
puntos=length(x); % numero de puntos en q dividimos la pala
elementos=puntos-1; % numero de elementos de pala en que queda
dividida la misma.
l=x*L; % distribucion de longitudes de pala (distancias medidas desde
la base de la pala)
r=l+rbuje; % distribución de radios
N=3; % número de palas de la aeroturbina (separadas por tanto 120
grados entre si).
ro=1.225; % densidad del aire a T=25ºC
nu=1.5e-5; % viscosidad cinematica del aire a T=25ºC, nu = viscosidad
dinamica/ro (m^2/s)
omrpm=25; % velocidad de giro de la maquina en revoluciones por minuto
omega=omrpm/(60/(2*pi)); % velocidad de giro de la maquina en rad/s
%Vhub=omega*R/lambda; % velocidad del viento a la altura del buje
(m/s)
Vhub=25; % velocidad del viento a la altura del buje (m/s)
lambda=omega*R/Vhub; % cociente entre la velocidad de punta de pala y
la velocidad viento en el buje
hbuje=50; % altura del buje. Se puede utilizar la expresion
hbuje=0.75D +10 m siendo D el diámetro del rotor.
[cuerda,torsion,espesorrel]=palalmlineal(l); % variacion lineal de la
cuerda.
teta=torsion*pi/180; % pasamos torsion q esta en grados a radianes.
%%%%%%%%%%% CALCULO DE LOS VALORES ADIMENSIONALES DEL PROBLEMA
%%%%%%%%%%
%lan=(omega/Vhub)*r; % parametro de avance local de la pala
sigma=(N/pi)*cuerda./r; % solidez local de la pala
% Consideraremos en este apartado que el viento no es uniforme sino
que presenta cortadura vertical.
% Cada pala esta afectada por un viento distinto, asi que numeraremos
las tres palas con los coeficientes 1,2 y 3.
for s=1:num
%giro1=0; % angulo de giro en el que se encuentra la pala 1 en el
plano del rotor
giro2=giro1(s)+(2/3)*pi; % angulo en el que se encuentra la pala 2
(120 grados mas que la 1)
giro3=giro1(s)-(2/3)*pi; % angulo en el que se encuentra la pala (120
grados menos que la 1)
% Calculo de las palas.
h1=hbuje+r.*sin(giro1(s)); % vector de alturas de los elementos de
pala de la pala 1.
h2=hbuje+r.*sin(giro2); % vector de alturas de los elementos de pala
de la pala 2.
h3=hbuje+r.*sin(giro3); % vector de alturas de los elementos de pala
de la pala 3.
v1=viento(h1,Vhub,hbuje); % vector de velocidades de viento incidente
en cada tramo de la pala 1.
% se ve como se ha llamado a la funcion viento, considerando como
valores
% de referencia la velocidad q queremos en el buje y la altura del
mismo.
v2=viento(h2,Vhub,hbuje); % vector de velocidades de viento incidente
en cada tramo de la pala 2.
v3=viento(h3,Vhub,hbuje); % vector de velocidades de viento incidente
en cada tramo de la pala 3.
for k=1:puntos; % k = seccion de la pala. La ultima es la anterior a
la punta.
j=1;
a(1)=0; % valor inicial del parametro de velocidad inducida axial
aprima(1)=0; % valor inicial del parametro de velocidad inducida
tangencial
[alfa,cl,cd,cm] = polarespala(l(k)); % Obtenemos los datos de las
curvas polares de la seccion.
while j<50
FI1(j)=atan((v1(k)/(omega*r(k)))*((1-a(j))/(1+aprima(j))));
FI2(j)=atan((v2(k)/(omega*r(k)))*((1-a(j))/(1+aprima(j))));
FI3(j)=atan((v3(k)/(omega*r(k)))*((1-a(j))/(1+aprima(j))));
alfa1(j)=FI1(j)-teta(k);
alfa2(j)=FI2(j)-teta(k);
alfa3(j)=FI3(j)-teta(k);
alfagrad1(j)=alfa1(j)*180/pi;
alfagrad2(j)=alfa2(j)*180/pi;
alfagrad3(j)=alfa3(j)*180/pi;
coefsust1(j)=pchip(alfa,cl,alfagrad1(j));
coefsust2(j)=pchip(alfa,cl,alfagrad2(j));
coefsust3(j)=pchip(alfa,cl,alfagrad3(j));
%coefresist1(j)= pchip(cl1,cd,coefsust1(j));
%coefresist2(j)= pchip(cl1,cd,coefsust2(j));
%coefresist3(j)= pchip(cl1,cd,coefsust3(j));
coefresist1(j)= pchip(alfa,cd,alfagrad1(j));
coefresist2(j)= pchip(alfa,cd,alfagrad2(j));
coefresist3(j)= pchip(alfa,cd,alfagrad3(j));
% Vamos a incluir los efectos de perdida en punta de pala a
traves
% del factor de Prandtl Fp.
Fp1(j)=(2/pi)*acos(exp(-(N*(R-r(k)))/(2*r(k)*sin(FI1(j)))));
Fp2(j)=(2/pi)*acos(exp(-(N*(R-r(k)))/(2*r(k)*sin(FI2(j)))));
Fp3(j)=(2/pi)*acos(exp(-(N*(R-r(k)))/(2*r(k)*sin(FI3(j)))));
% Vamos a ver el resultado segun dos libros diferentes, el de
% Arnalte Gomez y el del Ciemat (al primero le daremos el
subindice
% 1 para los datos calculados y al segundo el valor 2)
Y(j)=(1/Vhub^2)*(sigma(k)/(8*N))*((v1(k)^2/(sin(FI1(j)))^2)*(coefsust1
(j)*cos(FI1(j))+coefresist1(j)*sin(FI1(j)))+...
(v2(k)^2/(sin(FI2(j)))^2)*(coefsust2(j)*cos(FI2(j))+coefresist2(j)*sin
(FI2(j)))+...
(v3(k)^2/(sin(FI3(j)))^2)*(coefsust3(j)*cos(FI3(j))+coefresist3(j)*sin
(FI3(j))));
Z(j)=(1/Vhub)*(sigma(k)/(8*N))*((v1(k)/(sin(FI1(j))*cos(FI1(j))))*(coe
fsust1(j)*sin(FI1(j))-coefresist1(j)*cos(FI1(j)))+...
(v2(k)/(sin(FI2(j))*cos(FI2(j))))*(coefsust2(j)*sin(FI2(j))-
coefresist2(j)*cos(FI2(j)))+...
(v3(k)/(sin(FI3(j))*cos(FI3(j))))*(coefsust3(j)*sin(FI3(j))-
coefresist3(j)*cos(FI3(j))));
% Segun libro Arnalte Gomez.
% a(j+1)=Y(j)*(1/Fp(j))/(Y(j)*(1/Fp(j))+1);
% aprima(j+1)=Z(j)*(1/Fp(j))/(1-Z(j)*(1/Fp(j)));
% En este caso como divide directamente por los coeficientes Y
y Z
% por el factor Fp se dispara mas la solucion de A en la punta
de
% la pala q en el caso del ciemat, donde la subida no es tan
% grande.
% Segun libro del ciemat.
%%%%%%%%%%%%%%%%%%%%%%%%% MATLAB 5.3
%%%%%%%%%%%%%%%%%%%%%%%%%%%
%g=inline('(u.^2)*(constante1+constante2^2)-
u*(2*constante1+constante2)+constante1','u','constante1','constante2')
;
%constante1=Y(j);
%constante2=Fp1(j);
%a(j+1)=fzero(g,[0 1],[],0,constante1,constante2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%% MATLAB 7
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
constante1=Y(j);
constante2=Fp1(j);
g=@(u)(u.^2)*(constante1+constante2^2)-
u*(2*constante1+constante2)+constante1;
a(j+1)=fzero(g,[0 1]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Zprima(j)=Z(j)*(1-a(j+1))/(Fp1(j)*(1-a(j+1)*Fp1(j)));
aprima(j+1)=Zprima(j)/(1-Zprima(j));
j=j+1;
end
% Guardamos en un nuevo vector los valores resultantes de la
% convergencia (ver que j tiene q reducirse en 1 pues sale con un
valor
% adicional con el que ya no entra en el bucle.
A(k)=a(j-1);
Aprima(k)=aprima(j-1);
fi1(k)=FI1(j-1);
fi2(k)=FI2(j-1);
fi3(k)=FI3(j-1);
figrad1(k)=FI1(j-1)*180/pi;
figrad2(k)=FI2(j-1)*180/pi;
figrad3(k)=FI3(j-1)*180/pi;
alphagrad1(k)=alfagrad1(j-1);
alphagrad2(k)=alfagrad2(j-1);
alphagrad3(k)=alfagrad3(j-1);
Coefsust1(k)=coefsust1(j-1);
Coefsust2(k)=coefsust2(j-1);
Coefsust3(k)=coefsust3(j-1);
Coefresist1(k)=coefresist1(j-1);
Coefresist2(k)=coefresist2(j-1);
Coefresist3(k)=coefresist3(j-1);
Coefmoment1(k)=pchip(alfa,cm,alphagrad1(k));
Coefmoment2(k)=pchip(alfa,cm,alphagrad2(k));
Coefmoment3(k)=pchip(alfa,cm,alphagrad3(k));
y(k)=Y(j-1);
z(k)=Z(j-1);
fp1(k)=Fp1(j-1);
fp2(k)=Fp2(j-1);
fp3(k)=Fp3(j-1);
end
% Nota: hay que darse cuenta que no se han calculado en el bucle los
% valores de los datos correspondientes a la punta de la pala. Esto
nos permite despues a la hora de calcular la distribucion de fuerzas
sobre los elementos de pala de la misma no tener que eliminar el dato
de los valores de la punta de pala de los distintos vectores, pues el
numero de elementos de pala es igual al numero de puntos en que hemos
dividido la pala menos 1.
%figure(1)
%plot(x(1:k),A,x(1:k),A,'mo');
%title('Velocidad inducida axial a')
%xlabel('r/R')
%ylabel('a')
%grid
%figure(2)
%plot(x(1:k),Aprima,x(1:k),Aprima,'mo');
%title('Velocidad inducida tangencial aprima')
%xlabel('r/R')
%ylabel('aprima')
%grid
%%%%%%%% CALCULO DE LAS VARIABLES DIMENSIONALES DE TURBINA
%%%%%%%%%%%%%
elementos=puntos;
W1=((omega*r(1:elementos).*(1+Aprima)).^2+(v1(1:elementos).*(1-
A)).^2).^0.5; % velocidad relativa a los perfiles pala 1
%W2=((omega*r(1:elementos).*(1+Aprima)).^2+(v2(1:elementos).*(1-
A)).^2).^0.5; % velocidad relativa a los perfiles pala 2
%W3=((omega*r(1:elementos).*(1+Aprima)).^2+(v3(1:elementos).*(1-
A)).^2).^0.5; % velocidad relativa a los perfiles pala 3
deltaR=2; % elemento diferencial de radio (concentramos las cargas en
distancias de 2m)
Cx1=Coefsust1.*cos(fi1)+ Coefresist1.*sin(fi1); % Coeficiente Cx1
%Cx2=Coefsust2.*cos(fi2)+ Coefresist2.*sin(fi2); % Coeficiente Cx2
%Cx3=Coefsust3.*cos(fi3)+ Coefresist3.*sin(fi3); % Coeficiente Cx3
Cy1=Coefsust1.*sin(fi1)- Coefresist1.*cos(fi1); % Coeficiente Cy1
%Cy2=Coefsust2.*sin(fi2)- Coefresist2.*cos(fi2); % Coeficiente Cy2
%Cy3=Coefsust3.*sin(fi3)- Coefresist3.*cos(fi3); % Coeficiente Cy3
% distribución de fuerza axial en las palas (Newton)
Fax1(s,:)=0.5*ro*cuerda(1:elementos).*(W1.^2).*Cx1*deltaR;
%Fax2=0.5*ro*cuerda(1:elementos).*(W2.^2).*Cx2*deltaR;
%Fax3=0.5*ro*cuerda(1:elementos).*(W3.^2).*Cx3*deltaR;
% Numero de Reynolds del perfil:
Re1=(W1.*cuerda(1:elementos))/nu;
%Re2=(W2.*cuerda(1:elementos))/nu;
%Re3=(W3.*cuerda(1:elementos))/nu;
% distribucion de fuerza tangencial en las palas (Newton)
Ftan1(s,:)=0.5*ro*cuerda(1:elementos).*(W1.^2).*Cy1*deltaR;
%Ftan2=0.5*ro*cuerda(1:elementos).*(W2.^2).*Cy2*deltaR;
%Ftan3=0.5*ro*cuerda(1:elementos).*(W3.^2).*Cy3*deltaR;
% distribucion de momentos torsores o de cabeceo en los perfiles
(N*m).
Mca1(s,:)=0.5*ro*((cuerda(1:elementos)).^2).*(W1.^2).*Coefmoment1*delt
aR;
%Mca2=0.5*ro*((cuerda(1:elementos)).^2).*(W2.^2).*Coefmoment2*deltaR;
%Mca3=0.5*ro*((cuerda(1:elementos)).^2).*(W3.^2).*Coefmoment3*deltaR;
% Fuerzas de sustentacion en los perfiles (Newton).
L1(s,:)=0.5*ro*cuerda(1:elementos).*(W1.^2).*Coefsust1*deltaR;
%L2=0.5*ro*cuerda(1:elementos).*(W2.^2).*Coefsust2*deltaR;
%L3=0.5*ro*cuerda(1:elementos).*(W3.^2).*Coefsust3*deltaR;
% Fuerzas de resistencia en los perfiles (Newton).
D1(s,:)=0.5*ro*cuerda(1:elementos).*(W1.^2).*Coefresist1*deltaR;
%D2=0.5*ro*cuerda(1:elementos).*(W2.^2).*Coefresist2*deltaR;
%D3=0.5*ro*cuerda(1:elementos).*(W3.^2).*Coefresist3*deltaR;
% Distancias entre el centro aerodinamico y el centro de presiones en
cada perfil aerodinamico (m).
lcp1=-Mca1./L1;
%lcp2=-Mca2./L2;
%lcp3=-Mca3./L3;
end
% NOTA: Hemos considerado la velocidad en el buje como una velocidad
media
% sobre las areas que atraviesa el viento. Esto seguramente puede ser
% mejorado calculando una velocidad media sobre el área de paso de
forma
% mas precisa que esta mera aproximacion. En principio nos vale de
momento
% asi.
% Una vez hecho esto, tenemos el modelo de cargas concentradas para
los
% distintos angulos de giro de la turbina. Las columnas de las
matrices
% corresponden a las variaciones de las fuerzas en el tiempo para las
% secciones correspondientes (columna 1 = seccion 1 y así).
% Si dibujamos la variación de la fuerza sobre una seccion, por
ejemplo la
% ultima, tenemos:
figure(1)
plot((giro1)*180/pi,Fax1(:,end),'-o')
% Para todas las secciones
figure(2)
plot((giro1)*180/pi,Fax1,'-o')
% Y como funcion del tiempo
figure(3)
plot((giro1)*60/(omrpm*2*pi),Fax1,'-o')
% A continuacion calcularemos la funcion de distribucion de masas.
k= 10/4; % relación de espesor entre el núcleo y las pieles del
sandwich.
dens=(2*1750+144*k)/(2+k); % densidad del sandwich (kg/m^3): fibra de
vidrio epoxi + balsa core.
tipo=2;
g=9.81 % aceleracion de la gravedad (m/s^2)
[xextH,yextraextH,yintraextH,xintH,yextraintH,yintraintH,areatot]=secc
iontotpchip(l,tipo);
% la funcion de distribucion de masas es
Funmasa=areatot.*dens;
% las fuerzas masicas que analizaremos con el modelo de cargas
concentradas
% seran:
Peso=Funmasa*deltaR*g;
% La funcion peso varía en el tiempo su contribucion a la Ftangencial
que
% mueve el aerogenerador. Esa variacion es de tipo cosenoidal:
for f=1:num
Ftanpeso(f,:)=-Peso(1:end)*cos(giro1(f)); % hay una seccion menos
como en el resto de fuerzas
end
Ftantot=Ftan1+Ftanpeso;
figure(4)
plot((giro1)*60/(omrpm*2*pi),Ftantot,'-o')
figure(5)
plot((giro1)*60/(omrpm*2*pi),Ftantot(:,end),'-o')
% Calculamos finalmente el momento torsor definitivo sobre las
secciones:
[xg,yg] = cmasas(l,tipo);
[cuerda,torsion] = palalmlineal(l);
for j=1:elementos
Mtorsor(:,j)=(xg(j)-0.25*cuerda(j))*(-
Ftan1(:,j)*sin(torsion(j)*pi/180)-Fax1(:,j)*cos(torsion(j)*pi/180)) +
yg(j)*(-
Ftan1(:,j)*cos(torsion(j)*pi/180)+Fax1(:,j)*sin(torsion(j)*pi/180))+(-
Mca1(:,j));
end
figure(6)
plot((giro1)*60/(omrpm*2*pi),Mtorsor,'-o')
save cargasoperacion Fax1 Ftan1 Ftanpeso Ftantot Mca1 Mtorsor giro1
omrpm
VIENTO.M
% Funcion de variacion de la velocidad del aire con la altura.
function [v] = viento(h,v0,h0)
% La funcion de velocidad del viento depende de los siguientes
parámetros:
% h: altura (m) a la cual se quiere calcular la velocidad del viento v
% (m/s)
% v0: velocidad de referencia a la altura de referencia h0 (por
ejemplo
% velocidad medida por un anemómetro a una determinada altura).
% h0: altura de referencia (m) a la que se conoce la velocidad.
n=0.2; % coeficiente potencial que depende del tipo de terreno n =
[0.13-0.20] en superficie moderadamente rugosa.
v=v0*(h/h0).^n; % velocidad del viento a una altura h del suelo.
POLARESPALA.M
% Archivo que contiene las curvas polares de los perfiles de la pala
LM26
% según la geometría definida en palalmlineal.
% Procedamos a leer los datos de las secciones analizadas (uso de
XFOIL y
% AIRFOIL_PREP).
function [alfa,Cl,Cd,Cm] = polarespala(l)
% alfa es un vector, no una matriz como pueden ser el resto de salidas
ya
% que siempre consideraremos los mismos valores de alfa para todas las
% secciones y todas las curvas (se queda en un vector porque no hace
falta
% hacer una matriz redundante con todas las filas iguales)
L=26; % 26m de longitud de pala
longit=length(l);
for i=1:longit
if l(i)<0 | l(i)>L
error('introduzca un/unos valor/es de longitud entre L=0 y L=26
(m)')
end
end
% sección L=3m; CILINDRO (consideramos CL=0,CM=0,CD=1.17= constante)
CL3=0;
CM3=0;
CD3=1.17;
% seccion L=6m:
matrix6=XLSREAD('perfil6m.xls','tableExtrap','H15:K87');
alpha6=matrix6(:,1);
CL6=matrix6(:,2);
CD6=matrix6(:,3);
CM6=matrix6(:,4);
% seccion L=7m
matrix7=XLSREAD('perfil7m.xls','tableExtrap','H15:K82');
alpha7=matrix7(:,1);
CL7=matrix7(:,2);
CD7=matrix7(:,3);
CM7=matrix7(:,4);
% seccion L=9m
matrix9=XLSREAD('perfil9m.xls','tableExtrap','H15:K82');
alpha9=matrix9(:,1);
CL9=matrix9(:,2);
CD9=matrix9(:,3);
CM9=matrix9(:,4);
% seccion L=11m
matrix11=XLSREAD('perfil11m.xls','tableExtrap','H15:K82');
alpha11=matrix11(:,1);
CL11=matrix11(:,2);
CD11=matrix11(:,3);
CM11=matrix11(:,4);
% seccion L=13m
matrix13=XLSREAD('perfil13m.xls','tableExtrap','H15:K82');
alpha13=matrix13(:,1);
CL13=matrix13(:,2);
CD13=matrix13(:,3);
CM13=matrix13(:,4);
% seccion L=15m
matrix15=XLSREAD('perfil15m.xls','tableExtrap','H15:K82');
alpha15=matrix15(:,1);
CL15=matrix15(:,2);
CD15=matrix15(:,3);
CM15=matrix15(:,4);
% seccion L=17m
matrix17=XLSREAD('perfil17m.xls','tableExtrap','H15:K82');
alpha17=matrix17(:,1);
CL17=matrix17(:,2);
CD17=matrix17(:,3);
CM17=matrix17(:,4);
% seccion L=19m
matrix19=XLSREAD('perfil19m.xls','tableExtrap','H15:K82');
alpha19=matrix19(:,1);
CL19=matrix19(:,2);
CD19=matrix19(:,3);
CM19=matrix19(:,4);
% seccion L=21m
matrix21=XLSREAD('perfil21m.xls','tableExtrap','H15:K82');
alpha21=matrix21(:,1);
CL21=matrix21(:,2);
CD21=matrix21(:,3);
CM21=matrix21(:,4);
% seccion L=23m
matrix23=XLSREAD('perfil23m.xls','tableExtrap','H15:K82');
alpha23=matrix23(:,1);
CL23=matrix23(:,2);
CD23=matrix23(:,3);
CM23=matrix23(:,4);
% seccion L=25m
matrix25=XLSREAD('perfil25m.xls','tableExtrap','H15:K82');
alpha25=matrix25(:,1);
CL25=matrix25(:,2);
CD25=matrix25(:,3);
CM25=matrix25(:,4);
% seccion L=26m
matrix26=XLSREAD('perfil26m.xls','tableExtrap','H15:K87');
alpha26=matrix6(:,1);
CL26=matrix26(:,2);
CD26=matrix26(:,3);
CM26=matrix26(:,4);
% Definamos los valores del angulo de ataque que queremos obtener:
alfa=[-180:10:-20 -19:1:30 35:5:60 70:10:180];
% Con esos valores de alfa, definamos los valores de CD,CL,CM de las
% secciones criticas, para que todas tengan el mismo numero de puntos
y
% para los mismos alfas.
% seccion L=3m:
Cl3=zeros(1,length(alfa));
Cd3=1.17*ones(1,length(alfa));
Cm3=zeros(1,length(alfa));
% seccion L=6m:
Cl6=pchip(alpha6,CL6,alfa);
Cd6=pchip(alpha6,CD6,alfa);
Cm6=pchip(alpha6,CM6,alfa);
% seccion L=7m
Cl7=pchip(alpha7,CL7,alfa);
Cd7=pchip(alpha7,CD7,alfa);
Cm7=pchip(alpha7,CM7,alfa);
% seccion L=9m
Cl9=pchip(alpha9,CL9,alfa);
Cd9=pchip(alpha9,CD9,alfa);
Cm9=pchip(alpha9,CM9,alfa);
% seccion L=11m
Cl11=pchip(alpha11,CL11,alfa);
Cd11=pchip(alpha11,CD11,alfa);
Cm11=pchip(alpha11,CM11,alfa);
% seccion L=13m
Cl13=pchip(alpha13,CL13,alfa);
Cd13=pchip(alpha13,CD13,alfa);
Cm13=pchip(alpha13,CM13,alfa);
% seccion L=15m
Cl15=pchip(alpha15,CL15,alfa);
Cd15=pchip(alpha15,CD15,alfa);
Cm15=pchip(alpha15,CM15,alfa);
% seccion L=17m
Cl17=pchip(alpha17,CL17,alfa);
Cd17=pchip(alpha17,CD17,alfa);
Cm17=pchip(alpha17,CM17,alfa);
% seccion L=19m
Cl19=pchip(alpha19,CL19,alfa);
Cd19=pchip(alpha19,CD19,alfa);
Cm19=pchip(alpha19,CM19,alfa);
% seccion L=21m
Cl21=pchip(alpha21,CL21,alfa);
Cd21=pchip(alpha21,CD21,alfa);
Cm21=pchip(alpha21,CM21,alfa);
% seccion L=23m
Cl23=pchip(alpha23,CL23,alfa);
Cd23=pchip(alpha23,CD23,alfa);
Cm23=pchip(alpha23,CM23,alfa);
% seccion L=25m
Cl25=pchip(alpha25,CL25,alfa);
Cd25=pchip(alpha25,CD25,alfa);
Cm25=pchip(alpha25,CM25,alfa);
% seccion L=26m
Cl26=pchip(alpha26,CL26,alfa);
Cd26=pchip(alpha26,CD26,alfa);
Cm26=pchip(alpha26,CM26,alfa);
for j=1:longit
if l(j)<=3
Cl(j,:)=Cl3;
Cm(j,:)=Cm3;
Cd(j,:)=Cd3;
elseif l(j)<=6
% interpolamos entre la seccion L=3 y L=6
% definimos el peso: W
W=((l(j)-3)/(6-3));
Cd(j,:)=W*Cd6 + (1-W)*Cd3;
Cl(j,:)=W*Cl6 + (1-W)*Cl3;
Cm(j,:)=W*Cm6 + (1-W)*Cm3;
elseif l(j)<=7
% interpolamos entre la seccion L=6 y L=7
% definimos el peso: W
W=((l(j)-6)/(7-6));
Cd(j,:)=W*Cd7 + (1-W)*Cd6;
Cl(j,:)=W*Cl7 + (1-W)*Cl6;
Cm(j,:)=W*Cm7 + (1-W)*Cm6;
elseif l(j)<=9
% interpolamos entre la seccion L=7 y L=9
% definimos el peso: W
W=((l(j)-7)/(9-7));
Cd(j,:)=W*Cd9 + (1-W)*Cd7;
Cl(j,:)=W*Cl9 + (1-W)*Cl7;
Cm(j,:)=W*Cm9 + (1-W)*Cm7;
elseif l(j)<=11
% interpolamos entre la seccion L=9 y L=11
% definimos el peso: W
W=((l(j)-9)/(11-9));
Cd(j,:)=W*Cd11 + (1-W)*Cd9;
Cl(j,:)=W*Cl11 + (1-W)*Cl9;
Cm(j,:)=W*Cm11 + (1-W)*Cm9;
elseif l(j)<=13
% interpolamos entre la seccion L=11 y L=13
% definimos el peso: W
W=((l(j)-11)/(13-11));
Cd(j,:)=W*Cd13 + (1-W)*Cd11;
Cl(j,:)=W*Cl13 + (1-W)*Cl11;
Cm(j,:)=W*Cm13 + (1-W)*Cm11;
elseif l(j)<=15
% interpolamos entre la seccion L=13 y L=15
% definimos el peso: W
W=((l(j)-13)/(15-13));
Cd(j,:)=W*Cd15 + (1-W)*Cd13;
Cl(j,:)=W*Cl15 + (1-W)*Cl13;
Cm(j,:)=W*Cm15 + (1-W)*Cm13;
elseif l(j)<=17
% interpolamos entre la seccion L=15 y L=17
% definimos el peso: W
W=((l(j)-15)/(17-15));
Cd(j,:)=W*Cd17 + (1-W)*Cd15;
Cl(j,:)=W*Cl17 + (1-W)*Cl15;
Cm(j,:)=W*Cm17 + (1-W)*Cm15;
elseif l(j)<=19
% interpolamos entre la seccion L=17 y L=19
% definimos el peso: W
W=((l(j)-17)/(19-17));
Cd(j,:)=W*Cd19 + (1-W)*Cd17;
Cl(j,:)=W*Cl19 + (1-W)*Cl17;
Cm(j,:)=W*Cm19 + (1-W)*Cm17;
elseif l(j)<=21
% interpolamos entre la seccion L=19 y L=21
% definimos el peso: W
W=((l(j)-19)/(21-19));
Cd(j,:)=W*Cd21 + (1-W)*Cd19;
Cl(j,:)=W*Cl21 + (1-W)*Cl19;
Cm(j,:)=W*Cm21 + (1-W)*Cm19;
elseif l(j)<=23
% interpolamos entre la seccion L=21 y L=23
% definimos el peso: W
W=((l(j)-21)/(23-21));
Cd(j,:)=W*Cd23 + (1-W)*Cd21;
Cl(j,:)=W*Cl23 + (1-W)*Cl21;
Cm(j,:)=W*Cm23 + (1-W)*Cm21;
elseif l(j)<=25
% interpolamos entre la seccion L=23 y L=25
% definimos el peso: W
W=((l(j)-23)/(25-23));
Cd(j,:)=W*Cd25 + (1-W)*Cd23;
Cl(j,:)=W*Cl25 + (1-W)*Cl23;
Cm(j,:)=W*Cm25 + (1-W)*Cm23;
elseif l(j)<=26
% interpolamos entre la seccion L=25 y L=26
% definimos el peso: W
W=((l(j)-25)/(26-25));
Cd(j,:)=W*Cd26 + (1-W)*Cd25;
Cl(j,:)=W*Cl26 + (1-W)*Cl25;
Cm(j,:)=W*Cm26 + (1-W)*Cm25;
end
end
RAFAGA_PARKED.M
% Programa de determinación de las fuerzas a las que esta sometida la
pala con el rotor parada bajo condiciones extremas de carga
% Llamada a los programas que contienen la geometria del rotor.
%palalm % programa q tiene la geometria de pala LM 26 (R = 26m)
%rotor17 % programa q tiene la geometria de una pala de rotor 17m (R =
8.5m)
rbuje=1; % (m)
L=26; % (m)
R=L+rbuje; % Radio de 27 m.
%tetarad=tetagrad*pi/180; % distribución de torsion (radianes)
%x=0.2:0.01:1;
%x=0.1:0.01:1;
x=(7:2:25)*(1/L); % vector de puntos con longitudes adimensionales con
la longitud de la pala.
puntos=length(x); % numero de puntos en q dividimos la pala
elementos=puntos-1; % numero de elementos de pala en que queda
dividida la misma.
l=x*L; % distribucion de longitudes de pala (distancias medidas desde
la base de la pala)
r=l+rbuje; % distribución de radios
%lambda=6; % cociente entre la velocidad de punta de pala y la
velocidad viento en el buje
N=3; % número de palas de la aeroturbina (separadas por tanto 120
grados entre si).
ro=1.225; % densidad del aire a T=25ºC
nu=1.5e-5; % viscosidad cinematica del aire a T=25ºC, nu = viscosidad
dinamica/ro (m^2/s)
%Vhub=11; % velocidad del viento en m/s en el buje del aerogenerador
%omega=lambda*Vhub/R; % velocidad de giro de la aeroturbina (rad/s)
%omrpm=omega*(60/(2*pi)); % velocidad giro en rpm
%omrpm=25; % velocidad de giro de la maquina en revoluciones por
minuto
%omega=omrpm/(60/(2*pi)); % velocidad de giro de la maquina en rad/s
%Vhub=omega*R/lambda; % velocidad del viento a la altura del buje
(m/s)
Vhub=70;
%lambda=omega*R/Vhub;
hbuje=50; % altura del buje. Se puede utilizar la expresion
hbuje=0.75D +10 m siendo D el diámetro del rotor.
%cuerda=spline(rc,c,r); % valores de cuerda para cada valor del vector
x
%teta=spline(rt,tetarad,r); % valores de angulo de torsion para
valores de x (radianes)
[cuerda,torsion,espesorrel]=palalmlineal(l); % variacion lineal de la
cuerda.
%[cuerda,torsion,espesorrel]=palalmpotencial(l); % variacion potencial
de la cuerda.
teta=torsion*pi/180; % pasamos torsion q esta en grados a radianes.
giro1=pi/2; % angulo de giro en el que se encuentra la pala 1 en el
plano del rotor
h1=hbuje+r.*sin(giro1); % vector de alturas de los elementos de pala
de la pala 1.
[alfa,cl,cd,cm] = polarespala(l); % Obtenemos los datos de las curvas
polares de las secciones.
alfagrad=90-torsion; % angulos de ataque de las secciones
for j=1:puntos
coefsust(j)=pchip(alfa,cl(j,:),alfagrad(j));
coefresist(j)=pchip(alfa,cd(j,:),alfagrad(j));
coefmoment(j)=pchip(alfa,cm(j,:),alfagrad(j));
end
deltaR=2; % elemento diferencial de radio
t0=3; % tiempo de duración del análisis
t=0:0.01:t0; % vector de tiempos
long=length(t);
I=0.14; % factor de intensidad de la turbulencia
omega=10; % frecuencia de las turbulencias en rad/s
tipo=2;
[xg,yg] = cmasas(l,tipo);
%[cuerda,torsion] = palalmlineal(l);
for j=1:long
v1=(Vhub*(h1/hbuje).^0.11)*(1-I*cos(omega*t(j))); % vector de
velocidades de viento incidente en cada tramo de la pala 1.
% distribución de fuerza axial en las palas (Newton)
Fax(j,:)=0.5*ro*cuerda(1:puntos).*(v1.^2).*coefresist*deltaR;
% Numero de Reynolds del perfil:
Re(j,:)=(v1.*cuerda(1:puntos))/nu;
% distribucion de fuerza tangencial en las palas (Newton)
Ftan(j,:)=0.5*ro*cuerda(1:puntos).*(v1.^2).*coefsust*deltaR;
% distribucion de momentos torsores o de cabeceo en los perfiles
(N*m).
Mca(j,:)=0.5*ro*((cuerda(1:puntos)).^2).*(v1.^2).*coefmoment*deltaR;
Mtorsor(j,:)=(xg-0.25*cuerda).*(-Ftan(j,:).*sin(torsion*pi/180)-
Fax(j,:).*cos(torsion*pi/180)) + yg.*(-
Ftan(j,:).*cos(torsion*pi/180)+Fax(j,:).*sin(torsion*pi/180))+(-
Mca(j,:));
end
% Fuerza axial en toda la pala en un determinado tiempo
plot(l,Fax(j,:),'.-')
grid
% Fuerza axial en las secciones en funcion del tiempo
figure(2)
plot(t,Fax,'.-')
grid
save cargaextrema Fax Ftan Mca Mtorsor t t0
GEOMETRÍA Y PARÁMETROS ESTRUCTURALES
NACA44XX.M
% Funcion q nos determinara la forma de un perfil naca 44xx de cuerda
1.
function [Xu,Yu,Xl,Yl] = naca44xx(t)
% Variables de entrada:
% t = espesor por unidad de cuerda del perfil (valores entre 0 y
1)
% Variables de salida:
% Xu,Yu (upper) : determinan la forma del extrados del perfil
(zona
% superior)
% Xl,Yl (lower) : determinan la forma del intrados del perfil
(zona
% inferior)
% Perfiles NACA serie 4.
% NACA cuatro cifras:
% - La primera cifra indica la máxima flecha de la línea media en %
con respecto a la cuerda.
% Esta cifra define el parámetro m.
% - La segunda cifra expresa la posición de la máxima flecha de la
línea media con respecto
% al borde de ataque, en tanto por diez respecto de la cuerda.
Parámetro p.
% - Por último las dos últimas cifras indican el espesor máximo del
perfil en % con respecto
% a la cuerda. Parámetro t.
% De esta forma un perfil NACA 2415 presenta un espesor máximo de 15%
relativo a cuerda (t=grosor/c=0.15) con
% un valor de flecha máxima de la línea media del 2% relativo a la
cuerda (m=Yc/c=0.02) situado a una
% distancia del 40% de la cuerda desde el borde de ataque del perfil
(p=posicion Yc/c=0.4).
% A continuación escribiremos las ecuaciones que nos permitan
determinar la geometria de este
% tipo de perfiles. En función de los valores otorgados a m,p y t
obtendremos un perfil u
% otro de la mencionada serie.
% A modo de ejemplo realizaremos el estudio del perfil NACA 4415.
m=0.04;
p=0.4;
%[a,b]=TEXTREAD('extrados4415.txt','%f%f','headerlines',1);
%x=a(end:-1:1)';
x=0:0.01:1; % Vector de puntos de la cuerda (cuerda unitaria)
% Línea de curvatura media:
k=0;
for s=x
k=k+1;
if s<=p
Yc(k)=(m/p^2)*(2*p*s-s^2);
DerYc(k)=(m/p^2)*(2*p-2*s);
teta(k)=atan(DerYc(k));
else
Yc(k)=(m/(1-p)^2)*((1-2*p)+2*p*s-s^2);
DerYc(k)=(m/(1-p)^2)*(2*p-2*s);
teta(k)=atan(DerYc(k));
end
end
% Distribución de espesor:
Yt=(t/0.2)*(0.2969*x.^0.5-0.1260*x-0.3516*x.^2+0.2843*x.^3-
0.1015*x.^4);
% Extradós del perfil(parte superior):
Xu=x-Yt.*sin(teta);
Yu=Yc+Yt.*cos(teta);
% Intradós del perfil(parte inferior):
Xl=x+Yt.*sin(teta);
Yl=Yc-Yt.*cos(teta);
PALALMLINEAL.M
% Funcion que nos determina la geometria de la pala a una distancia l.
function [cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] =
palalmlineal(l)
% Variables de entrada: Longitud en el que se quiere determinar la
cuerda del
% perfil (m). (valores comprendidos entre 0 y L = 26m.)
% Variables de salida:
% - Cuerda del perfil para una determinada distancia (m).
% - Angulo de torsion o encastre (grados) del perfil para una
longitud l.
% - Espesor relativo del perfil en tanto por uno de la cuerda (m)
para
% una longitud dada l (m).
% - Offset sobre el eje X de cada seccion, es decir, punto de
% interseccion de la seccion con el eje X de envergadura de pala (en
% tanto pot uno respecto de la cuerda de cada seccion)
% - Posicion en tanto por uno de la cuerda que ocupa la web1 en los
% distintos perfiles
% - Posicion en tanto por uno de la cuerda que ocupa la web2 en los
% distintos perfiles
% - Distribucion de grosor de material a lo largo de la envergadura
de
% la pala (m).
L=26; % 26m de longitud de pala
lon=length(l);
for i=1:lon
if l(i)<0 | l(i)>L
error('introduzca un/unos valor/es de longitud entre L=0 y L=26
(m)')
end
end
% Vamos a generar la siguiente distribucion de cuerdas. También
% estableceremos las distribuciones de xoffset (como se coloca cada
seccion
% perpendicularmente al eje X de la pala, punto de corte de la seccion
con
% el eje X), la distribucion de las webs(listones perpendiculares q
unen el
% extrados e intrados del perfil para otorgarle mayor consistencia a
la
% seccion) y el espesor de material en cada seccion.
relaspecto=0.02/0.15; % esta es la relacion grosor material/grosor del
perfil.
%espe=0.02; % tanto por uno respecto de la cuerda que quiero de
espesor en las secciones.
%C1=2.3; % cuerda maxima de la pala (m)
n=-2; % exponente de la funcion de ajuste en las webs.(mas abajo
indicado) en el tramo < lc1
% Si n=1 ===> Funcion lineal
% Si n distinto de 1 ===> Funcion potencial
% * n=0.5 ==> funcion raiz cuadrada sqrt(x)
% * n=-1 ==> funcion 1/x
% * n=-0.5 ==> funcion 1/sqrt(x)
% * n=-2 ==> funcion 1/(x^2) ...................
ajustar a la q mas nos guste.
% Definimos los valores en las zonas clave de la pala:
% Fin de la raiz:
lc0=3; % longitud donde finaliza la zona que es igual q la raiz (m)
C0=1.5; % cuerda en la raiz (m)
xoffsraiz=0.5*C0; % offset de la raiz (m)
dweb1raiz=(relaspecto/2)*C0; % distancia desde el borde de ataque
hasta la linea media de web1 en la raiz (m)
web1raiz=abs(xoffsraiz-dweb1raiz); % distancia absoluta de la linea
media de la web1 al eje X longitudinal de la pala (m)
dweb2raiz=C0-(relaspecto/2)*C0; % distancia desde el borde de ataque
hasta la linea media de web2 en la raiz (m)
web2raiz=abs(xoffsraiz-dweb2raiz); % distancia absoluta de la linea
media de la web2 al eje X longitudinal de la pala (m)
% Perfil de cuerda maxima de la pala
lc1=6; % longitud del perfil de cuerda maxima (m)
C1=2.3; % cuerda maxima de la pala (m)
xoffsmax=0.325*C1; % offset en el perfil de cuerda maxima (m)
dweb1max=0.15*C1; % distancia desde el borde de ataque hasta la linea
media de web1 en el perfil de cuerda maxima (m)
web1max=abs(xoffsmax-dweb1max); % distancia absoluta de la linea media
de la web1 al eje X longitudinal de la pala (m)
dweb2max=0.5*C1; % distancia desde el borde de ataque hasta la linea
media de web2 en el perfil de cuerda maxima (m)
web2max=abs(xoffsmax-dweb2max); % distancia absoluta de la linea media
de la web2 al eje X longitudinal de la pala (m)
% Punta de la pala
lc2=L; % longitud de la punta de la pala (m)
C2=0.525; % cuerda en la punta de pala (m)
xoffspunta=0.3*C2; % offset en el perfil de cuerda maxima (m)
dweb1punta=0.15*C2; % distancia desde el borde de ataque hasta la
linea media de web1 en el perfil de punta de pala (m)
web1punta=abs(xoffspunta-dweb1punta); % distancia absoluta de la linea
media de la web1 al eje X longitudinal de la pala (m)
dweb2punta=0.5*C2; % distancia desde el borde de ataque hasta la linea
media de web2 en el perfil de punta de pala (m)
web2punta=abs(xoffspunta-dweb2punta); % distancia absoluta de la linea
media de la web2 al eje X longitudinal de la pala (m)
for j=1:lon
if l(j)<lc0
cuerda(j)=C0;
xoffset(j)=xoffsraiz/cuerda(j);
% no hay webs en este tramo, de forma q vamos a hacer q estan
% fusionadas con el espesor de la raiz, para obtener todos los
% vectores de la misma longitud.
dejeweb1(j)=web1raiz; % distancia de la web1 al eje X
web1(j)=(xoffset(j)*cuerda(j)-dejeweb1(j))/cuerda(j);
dejeweb2(j)=web2raiz; % distancia de la web2 al eje X
web2(j)=(xoffset(j)*cuerda(j)+dejeweb2(j))/cuerda(j);
%grosmat(j)=espe*C1; % grosor de material en este tramo (2% de
la cuerda maxima)
elseif l(j)< lc1
cuerda(j)=C0+((C1-C0)/(lc1-lc0))*(l(j)-lc0);
xoffset(j)=(xoffsraiz+((xoffsmax-xoffsraiz)/(lc1-lc0))*(l(j)-
lc0))/cuerda(j);
dejeweb1(j)=web1raiz+((web1max-web1raiz)/(lc1^n-
lc0^n))*(l(j)^n-lc0^n); % variacion potencial de la dist. al eje de la
web1
web1(j)=(xoffset(j)*cuerda(j)-dejeweb1(j))/cuerda(j);
dejeweb2(j)=web2raiz+((web2max-web2raiz)/(lc1^n-
lc0^n))*(l(j)^n-lc0^n); % variacion potencial de la dist. al eje de la
web2
web2(j)=(xoffset(j)*cuerda(j)+dejeweb2(j))/cuerda(j);
%dejeweb1(j)=web1raiz+((web1max-web1raiz)/(lc1-lc0))*(l(j)-
lc0); % variacion lineal de la dist. al eje de la web1
%dejeweb2(j)=web2raiz+((web2max-web2raiz)/(lc1-lc0))*(l(j)-
lc0); % variacion lineal de la dist. al eje de la web2
%grosmat(j)=espe*C1;% grosor de material en este tramo (2% de
la cuerda maxima)
else
cuerda(j)=C1+((C1-C2)/(lc1-lc2))*(l(j)-lc1);
xoffset(j)=(xoffsmax+((xoffsmax-xoffspunta)/(lc1-lc2))*(l(j)-
lc1))/cuerda(j);
dejeweb1(j)=web1max+((web1max-web1punta)/(lc1-lc2))*(l(j)-
lc1); % variacion lineal de la dist. al eje de la web1
web1(j)=(xoffset(j)*cuerda(j)-dejeweb1(j))/cuerda(j);
dejeweb2(j)=web2max+((web2max-web2punta)/(lc1-lc2))*(l(j)-
lc1); % variacion lineal de la dist. al eje de la web2
web2(j)=(xoffset(j)*cuerda(j)+dejeweb2(j))/cuerda(j);
%grosmat(j)=espe*cuerda(j);% grosor de material en este tramo
(2% de la cuerda)
end
end
% A continuacion obtendremos el angulo de torsion de la misma forma
que para la pala lm 26
% DISTRIBUCION ANGULO DE TORSION DE LA PALA (grados): datos obtenidos
libro
% 'Sistemas eólicos de produccion de energia electrica'.
lt=(0:0.5:L); % longitudes para los angulos de torsion (m)
tetagrad=[0 0 0 0 0 0 0 8 10 11.5 12.75 14 15 14 12.75 12 11 10 9 8.5
8 7.5 7 6.5 6.25 6 5.5 5.25 5 4.5 4.25 4 3.5 3.25 3 2.75 2.5 2.25 2
1.75 1.5 1.25 1 0.9 0.8 0.7 0.5 0.25 0.2 0.1 0 0 0];
long=length(lt);
%definimos las coordenadas de los puntos x,y por los que hacemos pasar
la
%funcion:
x1=lc1; x4=lt(long); x2=12; x3=20;
y1=tetagrad(x1/0.5+1); y4=tetagrad(long); y2=tetagrad(x2/0.5+1);
y3=tetagrad(x3/0.5+1);
%potencias de la funcion:
pot=6;
pot2=-1.5;
MM=[x1^pot x1^pot2 x1 1;x2^pot x2^pot2 x2 1;x3^pot x3^pot2 x3 1;x4^pot
x4^pot2 x4 1];
q=[y1 y2 y3 y4]';
solu=MMq;
%la funcion es del tipo:
%Fun=solu(1)*l.^pot + solu(2)*l.^pot2 + solu(3)*l + solu(4);
for j=1:lon
if l(j)<=3
torsion(j)=0;
elseif (l(j)>3) & (l(j)<6)
torsion(j)=spline(lt,tetagrad,l(j)); % valores de angulo de
torsion para valores de l (grados)
else
torsion(j)=solu(1)*l(j).^pot + solu(2)*l(j).^pot2 + solu(3)*l(j) +
solu(4);
end
end
% A continuacion representamos el espesor maximo relativo a la cuerda
para la pala lm 26
% DISTRIBUCION ESPESOR RELATIVO DE LA PALA (tanto por uno DE LA
CUERDA):datos obtenidos libro
% 'Sistemas eólicos de produccion de energia electrica'.
le=lt; % longitudes de las secciones a estudio (m)
esperel=[1 1 1 1 1 1 1 0.875 0.775 0.7 0.62 0.55 0.5 0.46 0.44 0.41
0.39 0.375 0.35 0.33 0.315 0.3 0.29 0.28 0.27 0.26 0.25 0.25-
(0.05/8)*(1:8) 0.2-(0.05/18)*(1:18)];
%definimos las coordenadas de los puntos x,y por los que hacemos pasar
la
%funcion:
xx1=3; xx4=le(long); xx2=7 ; xx3=20; % si ponemos xx1=6 ==>xx2=10; si
xx1=3 ==> xx2=7
yy1=esperel(xx1/0.5+1); yy4=esperel(long); yy2=esperel(xx2/0.5+1);
yy3=esperel(xx3/0.5+1);
%potencias de la funcion:
po=0.5;
po2=-0.5;
Mat=[xx1^po xx1^po2 xx1 1;xx2^po xx2^po2 xx2 1;xx3^po xx3^po2 xx3
1;xx4^po xx4^po2 xx4 1];
qu=[yy1 yy2 yy3 yy4]';
so=Matqu;
%la funcion es del tipo:
%Fun2=so(1)*l.^po + so(2)*l.^po2 + so(3)*l + so(4);
for j=1:lon
if l(j)<=3
espesorrel(j)=1;
else
espesorrel(j)=so(1)*l(j).^po + so(2)*l(j).^po2 + so(3)*l(j) +
so(4); % valores del espesor maximo relativo a la cuerda del perfil
para valores de l (adim)
end
end
% finalmente definiremos la distribucion de grosores GROSMAT
%relaspecto=0.02/0.15; % esta es la relacion grosor material/grosor
del perfil.
for j=1:lon
if l(j)<lc0
grosmat(j)=relaspecto*espesorrel(j)*cuerda(j);
elseif l(j)< lc1
grosmat(j)=relaspecto*espesorrel(j)*cuerda(j);
else
grosmat(j)=relaspecto*espesorrel(j)*cuerda(j);
end
end
grosmat=0.95*grosmat;
SECCIONEXTPCHIP.M
% La siguiente funcion nos va a dar la seccion exterior de los
perfiles de
% la pala a estudio.
function [x,yextra,yintra,area]=seccionextpchip(planosZ)
% Variables de entrada: vector con los planos Z donde quiero la
seccion
% Variables salida:
% x: Matriz cuyas filas son las coordenadas de las x
extrados para
% cada plano de corte Z
% x=xextra=xintra
% yextra: Matriz cuyas filas son las coordenadas de las y
extrados para
% cada plano de corte Z
% yintra: Matriz cuyas filas son las coordenadas de las y
intrados para
% cada plano de corte Z
% Este programa nos generara las secciones de cualquier zona de la
pala. La
% pala la podemos dividir en tres partes diferenciadas: 1- la zona de
% encastre q es de seccion circular, 2- zona de transicion de la zona
% circular a la zona aerodinamica de perfiles, 3- zona puramente
% aerodinamica compuesta por perfiles aerodinamicos hasta la punta de
pala.
% Para ello definiremos las dos secciones entre las q se encuentra la
% transicion descrita (seccion circular y perfil de cuerda maxima)
mediante
% el mismo numero de puntos, uniremos los puntos de una seccion con
los de
% la otra (dos a dos) para obtener rectas en tres dimensiones de las
que
% obtendremos sus ecuaciones, y al cortar por planos perpendiculares
al de
% envergadura o longitud de la pala (X) obtendremos puntos de las
secciones
% interiores de transicion.
for i=planosZ
if i<0 | i>26
error('introduzca un/unos valor/es de distancia del plano entre
L=0 y L=26 (m)')
end
end
% Secciones límite en la zona de transicion:
% 1- Seccion circular:(cir)
lcir=3; % distancia a la que se encuentra la seccion 1 de la raiz de
la pala (m)
% llamamos a la funcion que tiene la geometria de la pala
[cuerdacir,torsioncir,espesorrelcir,xoffsetcir,web1cir,web2cir,grosmat
cir] = palalmlineal(lcir);
rcir=cuerdacir/2; % radio de la seccion
% como ejes de las secciones definimos los ejes x,y como eje x en
% direccion de la cuerda y eje y el perpendicular.
npuntos=101;
xcir=linspace(-rcir,rcir,npuntos); % generamos 101 puntos
equiespaciados ==> dividimos en 100 partes el diametro.
ycirsup=(rcir^2-xcir.^2).^0.5; % parte superior de la seccion
ycirinf=-((rcir^2-xcir.^2).^0.5); % parte inferior de la seccion
% 2- Seccion perfil de cuerda maxima:(per)
lper=6; % distancia a la que se encuentra el perfil de cuerda maxima
de la raiz de la pala (m)
% llamamos a la funcion que tiene la geometria de la pala
[cuerdaper,torsionper,espesorrelper,xoffsetper,web1per,web2per,grosmat
per] = palalmlineal(lper);
% Generamos el perfil de cuerda unidad y espesor espesorrelper
[Xuunit,Yuunit,Xlunit,Ylunit] = naca44xx(espesorrelper);
% Multiplicamos estos valores por la cuerda del perfil
Xuper=Xuunit*cuerdaper;
Yuper=Yuunit*cuerdaper;
Xlper=Xlunit*cuerdaper;
Ylper=Ylunit*cuerdaper;
% Definimos el vector de puntos a lo largo de la cuerda:
xper0=linspace(0,cuerdaper,npuntos);
% Obtenemos los puntos correspondientes a este vector en el extrados
e intrados del
% perfil mediante un ajuste con los polinomios cubicos a trozos
% (pchip en principio mejor que con spline):
ypersup=pchip(Xuper,Yuper,xper0);
yperinf=pchip(Xlper,Ylper,xper0);
% La altura o coordenada y de los puntos no varia al aplicar el
offset
% del perfil. Solo varia la coordenada x:
xper=xper0-xoffsetper*cuerdaper;
% Ya tenemos los puntos que definen las secciones limite.
% Nota : hemos realizado el ajuste de las funciones antes del offset.
% A continuacion estableceremos las rectas que unen los puntos de las
% secciones dos a dos, para poder determinar los puntos de
interseccion de
% esas rectas con planos perpendiculares al eje longitudinal de la
pala,
% definiendo asi las secciones en los distintos planos.
% Una recta en 3D entre 2 puntos A(x1,y1,z1) y B(x2,y2,z2) se puede
definir
% de la siguiente forma:
% y=a*x+b donde a=pendientexy=v2/v1; b=o.origenxy=y1-(v2/v1)*x1
% z=c*x+d donde c=pendientexz=v3/v1; b=o.origenxz=z1-(v3/v1)*x1
% siendo v=vector director=(v1,v2,v3)=(x2-x1,y2-
y1,z2-z1)
% De esta forma introduciendo un valor para x, se obtiene y(x) y z(x).
% Tomamos como ejes positivos de la pala los mencionados
anteriormente, x direccion
% cordal de las secciones y sentido borde de salida del perfil, y
% perpendicular a x con sentido hacia el extrados del perfil, y z
direccion
% perpendicular a las secciones (longitudinal a la pala) hacia la
punta de
% pala.
% Rectas del extrados:
% Generamos los vectores directores de las rectas: v=AB=B(x,y,z)-
A(x,y,z)
% siendo B los puntos del perfil y A los de la seccion mas proxima a
la
% raiz.
vx_ext=(xper-xcir);
vy_ext=(ypersup-ycirsup);
vz_ext=(lper-lcir)*ones(1,length(vx_ext));
% pendientes
pend_xy_ext=vy_ext./vx_ext;
pend_xz_ext=vz_ext./vx_ext;
% ordenadas origen
oo_xy_ext=ycirsup-pend_xy_ext.*xcir;
oo_xz_ext=lcir*ones(1,length(vx_ext))-pend_xz_ext.*xcir;
% Rectas del intrados:
% Generamos los vectores directores de las rectas: v=AB=B(x,y,z)-
A(x,y,z)
% siendo B los puntos del perfil y A los de la seccion mas proxima a
la
% raiz.
vx_int=(xper-xcir);
vy_int=(yperinf-ycirinf);
vz_int=(lper-lcir)*ones(1,length(vx_int));
% pendientes
pend_xy_int=vy_int./vx_int;
pend_xz_int=vz_int./vx_int;
% ordenadas origen
oo_xy_int=ycirinf-pend_xy_int.*xcir;
oo_xz_int=lcir*ones(1,length(vx_int))-pend_xz_int.*xcir;
% En esta zona de transicion:
% definido un vector de planos de corte Z (variable de entrada de la
funcion)
% calculamos los puntos x,y de esa seccion, pues conocemos la variable
z,
% de la siguiente manera:
% x=(z-d)/c ====> y=a*x+b.
% Vemos la longitud del vector de planos Z:
longi=length(planosZ);
for j=1:longi
if (planosZ(j)>=0) & (planosZ(j)<=lcir)
% Hasta la longitud lcir todas las secciones son circulares e
% iguales.
% extrados
xextra(j,:)=xcir;
yextra(j,:)=ycirsup;
% intrados
xintra(j,:)=xcir;
yintra(j,:)=ycirinf;
% CALCULO DEL AREA:
area(j)=pi*(cuerdacir/2)^2;
% metodo Hermite:
aexttrap= sum(diff(xextra(j,:)).*(yextra(j,1:end-
1)+yextra(j,2:end))/2)-sum(diff(xintra(j,:)).*(yintra(j,1:end-
1)+yintra(j,2:end))/2); % regla trapecio compuesta
% ahora lo calculamos mediante el metodo de Hermite:
hsup = diff(xextra(j,:));
deltasup = diff(yextra(j,:))./hsup;
dsup = pchipslopes(hsup,deltasup); % esto nos da las
pendientes o derivadas del polinomio interpolador de Hermite en los
puntos del perfil.
hinf = diff(xintra(j,:));
deltainf = diff(yintra(j,:))./hinf;
dinf = pchipslopes(hinf,deltainf); % esto nos da las
pendientes o derivadas del polinomio interpolador de Hermite en los
puntos del perfil.
Dsup = sum((hsup.^2).*(dsup(2:end)-dsup(1:end-1))/12);
Dinf = sum((hinf.^2).*(dinf(2:end)-dinf(1:end-1))/12);
areaextH=aexttrap-(Dsup-Dinf);
area(j)=areaextH;
% Calulo de las cosas usando pchip:
ppsup=pchip(xextra(j,:),yextra(j,:)); % pp = piecewise
polynomial.
ppinf=pchip(xintra(j,:),yintra(j,:));
intsup=quad(@ppval,xextra(j,1),xextra(j,end),[],[],ppsup);
intinf=quad(@ppval,xintra(j,1),xintra(j,end),[],[],ppinf);
area(j)=intsup-intinf;
elseif (planosZ(j)>lcir) & (planosZ(j)<=lper)
%Zona de transicion de la pala.Obtenemos los puntos x,y
mediante la
%interseccion de los planos de corte con las rectas trazadas
%anteriormente entre las secciones limite. Aplicando la
formula
%anteriormente descrita, al saber z, calculamos x e y para
cada
%seccion.
[cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] =
palalmlineal(planosZ(j));
% extrados
xextra(j,:)=(planosZ(j)-oo_xz_ext)./pend_xz_ext;
yextra(j,:)=pend_xy_ext.*xextra(j,:)+oo_xy_ext;
% intrados
xintra(j,:)=(planosZ(j)-oo_xz_int)./pend_xz_int;
yintra(j,:)=pend_xy_int.*xintra(j,:)+oo_xy_int;
% Calulo del area usando pchip:
ppsup=pchip(xextra(j,:),yextra(j,:)); % pp = piecewise
polynomial.
ppinf=pchip(xintra(j,:),yintra(j,:));
intsup=quad(@ppval,xextra(j,1),xextra(j,end),[],[],ppsup);
intinf=quad(@ppval,xintra(j,1),xintra(j,end),[],[],ppinf);
area(j)=intsup-intinf;
else
% Aqui estamos en la zona puramente aerodinamica de la pala.
Las
% coordenadas de los perfiles las obtendremos ayudandonos de
la
% funcion q nos los genera q es naca44xx y de la distribucion
de
% espesores.
[cuerdai,torsioni,espesorreli,xoffseti,web1i,web2i,grosmati] =
palalmlineal(planosZ(j));
[Xuuniti,Yuuniti,Xluniti,Yluniti] = naca44xx(espesorreli);
Xui=Xuuniti*cuerdai;
Yui=Yuuniti*cuerdai;
Xli=Xluniti*cuerdai;
Yli=Yluniti*cuerdai;
xi0=linspace(0,cuerdai,npuntos);
% extrados
xextra(j,:)=xi0-xoffseti*cuerdai;
yextra(j,:)=pchip(Xui,Yui,xi0);
% intrados
xintra(j,:)=xi0-xoffseti*cuerdai;
yintra(j,:)=pchip(Xli,Yli,xi0);
% Calculo del area de las secciones utilizando pchip:
ppsup=pchip(xextra(j,:),yextra(j,:)); % pp = piecewise
polynomial.
ppinf=pchip(xintra(j,:),yintra(j,:));
intsup=quad(@ppval,xextra(j,1),xextra(j,end),[],[],ppsup);
intinf=quad(@ppval,xintra(j,1),xintra(j,end),[],[],ppinf);
area(j)=intsup-intinf;
end
end
% NOTA:
% Como hemos usado los mismos valores de x para las funciones de
intrados y
% extrados, los valores de xextra y xintra q se obtienen son los
mismos, de
% forma q podiamos poner un unico valor de salida x que fuera
% x=xextra=xintra.
x=xextra; % o x=xintra
SECCIONTOTPCHIP.M
% La siguiente funcion nos va a dar exactamente las distintas
secciones de
% la pala a estudio en funcion de su distancia al encastre de la pala.
function
[xext,yextraext,yintraext,xint,yextraint,yintraint,area]=secciontotpch
ip(planosZ,tipo)
% La variable tipo nos va a definir distintos tipos de interiores de
la
% pala. Asi, llamaremos:
% TIPO = 1: La pala interiormente tiene una distribucion de webs que
es la
% que viene dada por el programa que especifica la geometria de la
pala (en
% nuestro caso,palalmlineal).
% TIPO = 2: La pala interiormente solo presenta la distribucion de
webs en
% la zona puramente aerodinamica, tb segun indica palalmlineal.
% TIPO = 3: La pala interiormente no presenta ninguna distribucion de
webs.
if nargin < 2 || isempty(tipo), tipo = 1; end; % si no ponemos nada en
tipo o ponemos la matriz vacia analizamos por defecto el tipo 1 de
pala.
for i=planosZ
if i<0 | i>26
error('introduzca un/unos valor/es de distancia del plano entre
L=0 y L=26 (m)')
end
end
if (tipo==1) | (tipo==2) | (tipo==3)
% puede comenzar el programa
else
error('introduzca un valor de tipo que sea 1, 2 o 3
correspondiente a los modelos de pala')
end
% Las coordenadas de la zona exterior de la seccion las obtenemos
mediante
% la funcion seccionext.
[xext,yextraext,yintraext,areaext]=seccionextpchip(planosZ);
% Para calcular ahora la parte interna de seccion procedemos como
hemos hecho
% anteriormente:
% Vemos la longitud del vector de planos Z:
longi=length(planosZ);
global puntoscelda
global poscfinal
global poscinicial
puntoscelda=33; % poner un numero impar que sea multiplo de 3 (numero
de celdas).
% si lo ponemos par nos da luego problemas al hacer
diff(y)
% en el programa de calculos de inercia posterior. Si
lo
% ponemos par, hay q cambiar en mominercia la manera
de
% calcular el mominerciax de la parte circular de la
pala,
% hacer la forma que usa pchip y quad.
k=0;
for j=1:longi
if (planosZ(j)>=0) & (planosZ(j)<=3)
[cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] =
palalmlineal(planosZ(j));
rcirint=cuerda/2-grosmat; % radio de la seccion interior
% como ejes de las secciones definimos los ejes x,y como eje x
en
% direccion de la cuerda y eje y el perpendicular.
npuntos=3*puntoscelda;
xcir=linspace(-rcirint,rcirint,npuntos); % generamos
''npuntos'' puntos equiespaciados.
ycirsup=(rcirint^2-xcir.^2).^0.5; % parte superior de la
seccion interior
ycirinf=-((rcirint^2-xcir.^2).^0.5); % parte inferior de la
seccion interior
% extrados
xextra(j,:)=xcir;
yextraint(j,:)=ycirsup;
% intrados
xintra(j,:)=xcir;
yintraint(j,:)=ycirinf;
% como las xextra y xintra son iguales:
xint(j,:)=xextra(j,:);
% CALCULO DEL AREA:
% El area de estas secciones es el area de una corona
circular:
area(j)=areaext(j)-pi*rcirint^2;
%area2(j)=area(j);
%areawebs(j)=area(j);
else
k=k+1; % contador para la variable poscinicial y poscfinal.
ver mas abajo.
[cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] =
palalmlineal(planosZ(j));
% Puntos del contorno interno de la seccion (extrados/intrados
% interno): necesito primero obtener la derivada del contorno
externo
% de la seccion.
% Calcularemos a continuacion la forma interior, mediante
% los polinomios de Hermite de interpolacion.
hsup = diff(xext(j,:));
deltasup = diff(yextraext(j,:))./hsup;
dsup = pchipslopes(hsup,deltasup); % esto nos da las
pendientes o derivadas del polinomio interpolador de Hermite en los
puntos del perfil.
hinf = diff(xext(j,:));
deltainf = diff(yintraext(j,:))./hinf;
dinf = pchipslopes(hinf,deltainf); % esto nos da las
pendientes o derivadas del polinomio interpolador de Hermite en los
puntos del perfil.
betasup=atan(dsup);
betainf=atan(dinf);
% Extrados interno:
Xinterior=(xext(j,:))+(grosmat)*sin(betasup);
Yinterior=yextraext(j,:)-(grosmat)*cos(betasup);
%Intardos interno:
Xinterior1=(xext(j,:))+(-grosmat)*sin(betainf);
Yinterior1=yintraext(j,:)-(-grosmat)*cos(betainf);
% Definimos los parametros importantes en la seccion interna,
como son
% las posiciones de las webs y demas.
posweb11=(-xoffset+web1).*cuerda-grosmat./2;
posweb12=(-xoffset+web1).*cuerda+grosmat./2;
posweb21=(-xoffset+web2).*cuerda-grosmat./2;
posweb22=(-xoffset+web2).*cuerda+grosmat./2;
lat11sup=pchip(Xinterior,Yinterior,posweb11);; % coordenada de
lat11 q saco de la parte superior (extrados)
lat11inf=pchip(Xinterior1,Yinterior1,posweb11);% coordenada de
lat11 q saco de la parte inferior (intrados)
lat12sup=pchip(Xinterior,Yinterior,posweb12);;% coordenada de
lat12 q saco de la parte superior (extrados)
lat12inf=pchip(Xinterior1,Yinterior1,posweb12);% coordenada de
lat12 q saco de la parte inferior (intrados)
lat21sup=pchip(Xinterior,Yinterior,posweb21);;% coordenada de
lat21 q saco de la parte superior (extrados)
lat21inf=pchip(Xinterior1,Yinterior1,posweb21);% coordenada de
lat21 q saco de la parte inferior (intrados)
lat22sup=pchip(Xinterior,Yinterior,posweb22);;% coordenada de
lat22 q saco de la parte superior (extrados)
lat22inf=pchip(Xinterior1,Yinterior1,posweb22);% coordenada de
lat22 q saco de la parte inferior (intrados)
% Obtengo puntos equidistantes entre los puntos superior e
inferior de cada
% pared de cada lateral.
lat11=linspace(lat11inf,lat11sup,20); % su coordenada x es
posweb11
lat12=linspace(lat12inf,lat12sup,20); % su coordenada x es
posweb12
lat21=linspace(lat21inf,lat21sup,20); % su coordenada x es
posweb21
lat22=linspace(lat22inf,lat22sup,20); % su coordenada x es
posweb22
% Vamos a ir obteniendo el vector de puntos que me definan la
parte
% superior e inferior del perfil por su parte interna.
% puntoscelda ====> estan definidos al principio del bucle.
% Primeramente tenemos que calcular en este caso donde donde
se juntan
% las funciones de intrados y extrados (las internas se
sobreentiende),
% pues ambas convergen en dos puntos, uno en el borde de
ataque de la
% seccion y otro en el borde de salida, que son precisamente
donde
% comiennza y acaba la cuerda interior de las secciones. Esos
puntos
% son poscinicial y poscfinal.
% Para ello haremos un barrido de las funciones y cuando su
diferencia
% sea nula obtendremos los valores finales de poscinicial y
poscfinal.
% POSCINICIAL:
% Establecemos el paso del barrido:
paso=-0.001*cuerda;
% Hacemos el barrido
for x=posweb12:paso:-xoffset*cuerda
Wu=pchip(Xinterior,Yinterior,x);
Wl=pchip(Xinterior1,Yinterior1,x);
dif=Wu-Wl;
if dif<0
xanterior=x-paso;
%interpolamos entre x y x anterior la solucion
poscinicial(k)=xanterior+((x-xanterior)/(difanterior-
dif))*difanterior;
break
elseif dif==0
poscinicial(k)=x;
break
end
difanterior=dif; % guardamos el valor de dif q es positivo
para poderlo usar en la interpolacion al encontrar el negativo
siguiente.
end
% POSCFINAL:
% Establecemos el paso del barrido:
paso2=0.001*cuerda;
% Hacemos el barrido
for x=posweb21:paso2:cuerda-xoffset*cuerda
Wu=pchip(Xinterior,Yinterior,x);
Wl=pchip(Xinterior1,Yinterior1,x);
dif=Wu-Wl;
if dif<0
xanterior=x-paso;
%interpolamos entre x y x anterior la solucion
poscfinal(k)=xanterior+((x-xanterior)/(difanterior-
dif))*difanterior;
break
elseif dif==0
poscfinal(k)=x;
break
end
difanterior=dif; % guardamos el valor de dif q es positivo
para poderlo usar en la interpolacion al encontrar el negativo
siguiente.
end
% Ahora ya sabiendo el valor de poscinicial y poscfinal
empezamos a
% calcular los puntos iinteriores de la seccion.
% Dependiendo de si estos valores son mayores o menores q los
valores
% de posicion de las webs tendremos mas o menos celdas
interiores en la
% seccion. Asi:
if (tipo==1) | ((tipo==2)&(planosZ(j)>=6))
if (poscinicial(k)>=posweb11) & (poscfinal(k)<=posweb22)
% Solo tenemos una celda, la central.
npuntos=3*puntoscelda;
% CELDA CENTRAL (2):
% Usando PCHIP:
xcelda2=linspace(posweb12,posweb21,npuntos);
% Extrados interno:
[yextraint2] = pchip(Xinterior,Yinterior,xcelda2);
%Intardos interno:
[yintraint2] = pchip(Xinterior1,Yinterior1,xcelda2);
% introducimos estos datos en las variables de salida:
xint(j,:)=xcelda2;
yextraint(j,:)=yextraint2;
yintraint(j,:)=yintraint2;
elseif (poscinicial(k)<posweb11) &
(poscfinal(k)<=posweb22)
% Tenemos celda izquierda y central, pero derecha no.
npuntos0=(3*puntoscelda-1)/2; % como puntos celda es
impar hay que hacer q una celda tenga un punto mas q la otra
npuntos1=3*puntoscelda-npuntos0;
% CELDA IZQUIERDA (1):
% Usando PCHIP:
xcelda1=linspace(poscinicial(k),posweb11,npuntos0);
% Extrados interno:
[yextraint1] = pchip(Xinterior,Yinterior,xcelda1);
%Intardos interno:
[yintraint1] = pchip(Xinterior1,Yinterior1,xcelda1); %
Aqui hemos obtenido las constantes del ajuste del perfil interno.
% CELDA CENTRAL (2):
% Usando PCHIP:
xcelda2=linspace(posweb12,posweb21,npuntos1);
% Extrados interno:
[yextraint2] = pchip(Xinterior,Yinterior,xcelda2);
%Intardos interno:
[yintraint2] = pchip(Xinterior1,Yinterior1,xcelda2);
% introducimos estos datos en las variables de salida:
xint(j,:)=[xcelda1 xcelda2];
yextraint(j,:)=[yextraint1 yextraint2];
yintraint(j,:)=[yintraint1 yintraint2];
elseif (poscinicial(k)>=posweb11) &
(poscfinal(k)>posweb22)
% En este caso no tendriamos celda 1, si 2 y 3.
npuntos0=(3*puntoscelda-1)/2;
npuntos1=3*puntoscelda-npuntos0;
% CELDA CENTRAL (2):
% Usando PCHIP:
xcelda2=linspace(posweb12,posweb21,npuntos0);
% Extrados interno:
[yextraint2] = pchip(Xinterior,Yinterior,xcelda2);
%Intardos interno:
[yintraint2] = pchip(Xinterior1,Yinterior1,xcelda2);
% CELDA DERECHA (3):
% Usando PCHIP:
xcelda3=linspace(posweb22,poscfinal(k),npuntos1);
% Extrados interno:
[yextraint3] = pchip(Xinterior,Yinterior,xcelda3);
%Intardos interno:
[yintraint3] = pchip(Xinterior1,Yinterior1,xcelda3);
% introducimos estos datos en las variables de salida:
xint(j,:)=[xcelda2 xcelda3];
yextraint(j,:)=[yextraint2 yextraint3];
yintraint(j,:)=[yintraint2 yintraint3];
elseif (poscinicial(k)<posweb11) & (poscfinal(k)>posweb22)
% tenemos todas las celdas:
npuntos=puntoscelda;
% CELDA IZQUIERDA (1):
% Usando PCHIP:
xcelda1=linspace(poscinicial(k),posweb11,npuntos);
% Extrados interno:
[yextraint1] = pchip(Xinterior,Yinterior,xcelda1);
%Intardos interno:
[yintraint1] = pchip(Xinterior1,Yinterior1,xcelda1); %
Aqui hemos obtenido las constantes del ajuste del perfil interno.
% CELDA CENTRAL (2):
% Usando PCHIP:
xcelda2=linspace(posweb12,posweb21,npuntos);
% Extrados interno:
[yextraint2] = pchip(Xinterior,Yinterior,xcelda2);
%Intardos interno:
[yintraint2] = pchip(Xinterior1,Yinterior1,xcelda2);
% CELDA DERECHA (3):
% Usando PCHIP:
xcelda3=linspace(posweb22,poscfinal(k),npuntos);
% Extrados interno:
[yextraint3] = pchip(Xinterior,Yinterior,xcelda3);
%Intardos interno:
[yintraint3] = pchip(Xinterior1,Yinterior1,xcelda3);
% introducimos estos datos en las variables de salida:
xint(j,:)=[xcelda1 xcelda2 xcelda3];
yextraint(j,:)=[yextraint1 yextraint2 yextraint3];
yintraint(j,:)=[yintraint1 yintraint2 yintraint3];
end
% CALCULO DEL AREA DE LA SECCION:
if posweb11>poscinicial(k)
ppsupcelda1=pchip(xcelda1,yextraint1); % pp =
piecewise polynomial.
ppinfcelda1=pchip(xcelda1,yintraint1);
intsupcelda1=quad(@ppval,xcelda1(1),xcelda1(end),[],[],ppsupcelda1);
intinfcelda1=quad(@ppval,xcelda1(1),xcelda1(end),[],[],ppinfcelda1);
Acelda1=intsupcelda1-intinfcelda1;
else
Acelda1=0;
end
ppsupcelda2=pchip(xcelda2,yextraint2); % pp = piecewise
polynomial.
ppinfcelda2=pchip(xcelda2,yintraint2);
intsupcelda2=quad(@ppval,xcelda2(1),xcelda2(end),[],[],ppsupcelda2);
intinfcelda2=quad(@ppval,xcelda2(1),xcelda2(end),[],[],ppinfcelda2);
Acelda2=intsupcelda2-intinfcelda2;
if poscfinal(k)>posweb22
ppsupcelda3=pchip(xcelda3,yextraint3); % pp =
piecewise polynomial.
ppinfcelda3=pchip(xcelda3,yintraint3);
intsupcelda3=quad(@ppval,xcelda3(1),xcelda3(end),[],[],ppsupcelda3);
intinfcelda3=quad(@ppval,xcelda3(1),xcelda3(end),[],[],ppinfcelda3);
Acelda3=intsupcelda3-intinfcelda3;
else
Acelda3=0;
end
area(j)=areaext(j)-(Acelda1 + Acelda2 + Acelda3);
end
if (tipo==3) | ((tipo==2)&(planosZ(j)<6))
% Obtenemos un vector de puntos representativo de todo el
perfil
% interno:
npuntos=3*puntoscelda;
xinter=linspace(poscinicial(k),poscfinal(k),npuntos);
yextrainter=pchip(Xinterior,Yinterior,xinter);
yintrainter=pchip(Xinterior1,Yinterior1,xinter);
xint(j,:)=xinter;
yextraint(j,:)=yextrainter;
yintraint(j,:)=yintrainter;
% CALCULO DEL AREA DE LA SECCION:
% utilizando pchip:
ppsup=pchip(xinter,yextrainter); % pp = piecewise
polynomial.
ppinf=pchip(xinter,yintrainter);
intsup=quad(@ppval,xinter(1),xinter(end),[],[],ppsup);
intinf=quad(@ppval,xinter(1),xinter(end),[],[],ppinf);
areaint=intsup-intinf;
area(j)=areaext(j)-areaint;
end
end
end
CMASAS.M
% Vamos a crear una funcion para calcular los centros de masas de las
% secciones que nos da la funcion secciontotpchip.
function [xg,yg] = cmasas(planosZ,tipo)
if nargin < 2 || isempty(tipo), tipo = 1; end;
[xext,yextraext,yintraext,xint,yextraint,yintraint,areatot]=secciontot
pchip(planosZ,tipo);
[cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] =
palalmlineal(planosZ);
posweb11=(-xoffset+web1).*cuerda-grosmat./2; % posicion de la web11
posweb12=(-xoffset+web1).*cuerda+grosmat./2; % posicion de la web12
posweb21=(-xoffset+web2).*cuerda-grosmat./2; % posicion de la web21
posweb22=(-xoffset+web2).*cuerda+grosmat./2; % posicion de la web22
global puntoscelda % numero de puntos definidos en secciontotpchip por
celda
global poscfinal % punto de interseccion de las funciones de extrados
e intrados interno en la celda 3 definidas en secciontotpchip
global poscinicial % punto de interseccion de las funciones de
extrados e intrados interno en la celda 1 de la seccion
pc=puntoscelda;
% Procedamos al calculo del primer momento de area tanto sobre el eje
x
% como sobra el eje y. Estos momentos se identifican con la leta S
(Sx,Sy)
% de forma que xg=Sy/Aseccion e yg=Sx/Aseccion.
long=length(planosZ);
k=0;
for j=1:long
% CALCULAMOS PRIMERO LO REFERENTE A LAS ZONAS EXTERIORES:
exteriorsup(1,:)=xext(j,:) + xoffset(j)*cuerda(j); % añadimos los
offsets para calcular los momentos respecto sistema ejes q pasan por
el borde ataque del perfil.
exteriorsup(2,:)=yextraext(j,:);
exteriorinf(1,:)=xext(j,:) + xoffset(j)*cuerda(j);
exteriorinf(2,:)=yintraext(j,:);
% Sy:
%ZONA EXTERIOR:
% utilizando solo la regla del trapecio:
integrandou=(exteriorsup(1,:)).*exteriorsup(2,:);
integrandol=(exteriorinf(1,:)).*exteriorinf(2,:);
momysup=sum(diff(exteriorsup(1,:)).*(integrandou(1:end-
1)+integrandou(2:end))/2);
momyinf=sum(diff(exteriorinf(1,:)).*(integrandol(1:end-
1)+integrandol(2:end))/2);
momyexte=momysup-momyinf;
% si añadimos el termino que se obtiene de integrar el polinomio
de
% Hermite:
hu = diff(exteriorsup(1,:));
deltau = diff(integrandou)./hu;
du = pchipslopes(hu,deltau);
Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12);
momysupH=momysup-Dsup;
hl = diff(exteriorinf(1,:));
deltal = diff(integrandol)./hl;
dl = pchipslopes(hl,deltal);
Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12);
momyinfH=momyinf-Dinf;
momyHexte=momysupH-momyinfH;
% Sx:
% ZONA EXTERIOR:
[maxi,indi]=max(exteriorsup(2,:));
[mini,indi2]=min(exteriorinf(2,:));
% utilizando solo la regla del trapecio:
% extrados: (up es de extrados y arriba abajo corresponde a los
dos tramos
% de curva que se ven si se plotea (y^2)*x(y) frente a y, todo de
extrados).
inteuparriba=(exteriorsup(2,end:-1:indi)).*exteriorsup(1,end:-
1:indi); % invertimos los valores para integrar la funcion en el
sentido de las x positivas.
inteuparriba2=exteriorsup(1,end)*(linspace(0,exteriorsup(2,end),30));
% esto es la funcion y*xmax
inteupabajo=(exteriorsup(2,1:indi)).*exteriorsup(1,1:indi);
inteupabajo2=exteriorsup(1,1)*(linspace(0,exteriorsup(2,1),30));%
esto es la funcion y*xmin
momxuparriba=sum(diff(exteriorsup(2,end:-
1:indi)).*(inteuparriba(1:end-1)+inteuparriba(2:end))/2)+...
sum(diff(linspace(0,exteriorsup(2,end),30)).*(inteuparriba2(1:end-
1)+inteuparriba2(2:end))/2);
momxupabajo=sum(diff(exteriorsup(2,1:indi)).*(inteupabajo(1:end-
1)+inteupabajo(2:end))/2)+...
sum(diff(linspace(0,exteriorsup(2,1),30)).*(inteupabajo2(1:end-
1)+inteupabajo2(2:end))/2);
momxup=momxuparriba-momxupabajo;
% intrados: low es de intrados y arriba abajo corresponde a los
dos tramos
% de curva que se ven si se plotea (y^2)*x(y) frente a y, todo de
intrados).
intelowarriba=(exteriorinf(2,end:-1:indi2)).*exteriorinf(1,end:-
1:indi2); % invierto el sentido de la curva superior para integrar en
el sentido de las x negativas (y)
intelowarriba2=exteriorinf(1,end)*(linspace(0,exteriorinf(2,end),30));
% esto es la funcion y*xmax
intelowabajo=(exteriorinf(2,1:indi2)).*exteriorinf(1,1:indi2);
intelowabajo2=exteriorinf(1,1)*(linspace(0,exteriorinf(2,1),30));%
esto es la funcion y*xmin
momxlowarriba=sum(diff(exteriorinf(2,end:-
1:indi2)).*(intelowarriba(1:end-1)+intelowarriba(2:end))/2)+...
sum(diff(linspace(0,exteriorinf(2,end),30)).*(intelowarriba2(1:end-
1)+intelowarriba2(2:end))/2);% las areas tienen q salir negativas
aqui.
momxlowabajo=sum(diff(exteriorinf(2,1:indi2)).*(intelowabajo(1:end-
1)+intelowabajo(2:end))/2)+...
sum(diff(linspace(0,exteriorinf(2,1),30)).*(intelowabajo2(1:end-
1)+intelowabajo2(2:end))/2);
momxlow=momxlowarriba-momxlowabajo;
momxexte=momxup-momxlow; % lo q vale es restar no sumar (antes lo
habia sumado)
% esta es la que vale porque ambas partes, la positiva y negativa
añaden inercia
% si no, si la seccion fuera simetrica y las sumara, daria inercia
nula y
% eso esta mal.
% si añadimos el termino que se obtiene de integrar el polinomio
de
% Hermite:
huparriba = diff(exteriorsup(2,end:-1:indi));
deltauparriba = diff(inteuparriba)./huparriba;
duparriba = pchipslopes(huparriba,deltauparriba);
Duparriba = sum((huparriba.^2).*(duparriba(2:end)-duparriba(1:end-
1))/12);
if exteriorsup(2,end)>0
huparriba2 = diff(linspace(0,exteriorsup(2,end),30));
deltauparriba2 = diff(inteuparriba2)./huparriba2;
duparriba2 = pchipslopes(huparriba2,deltauparriba2);
Duparriba2 = sum((huparriba2.^2).*(duparriba2(2:end)-
duparriba2(1:end-1))/12);
else
Duparriba2=0;
end
% tengo q poner este if porq si me dieran las coordenadas del
perfil
% exactas (pasando el extrados e intrados por (0,0) y (c,0)) como
hace
% Xfoil (el programa nuestro naca44xx no pasa exactamente por
(0,0) y
% (c,0)), el termino de inteuparriba se anula solo, pero a la hora
de
% añadir la parte de Hermite tendriamos problema porque
dividiriamos por 0,
% de forma q si estos puntos tienen y=0, tenemos q poner q
D=0,parte de
% Hermite nula (la parte de la regla del trapecio ya se anula sola
como
% hemos dixo antes, T=0). Esto hay q hacerlo tb para el punto del
origen
% en extrados, y repetirlo para origen y cuerda de intrados tb.
momxuparribaH=momxuparriba-Duparriba-Duparriba2;
hupabajo = diff(exteriorsup(2,1:indi));
deltaupabajo = diff(inteupabajo)./hupabajo;
dupabajo = pchipslopes(hupabajo,deltaupabajo);
Dupabajo = sum((hupabajo.^2).*(dupabajo(2:end)-dupabajo(1:end-
1))/12);
if exteriorsup(2,1)>0
hupabajo2 = diff(linspace(0,exteriorsup(2,1),30));
deltaupabajo2 = diff(inteupabajo2)./hupabajo2;
dupabajo2 = pchipslopes(hupabajo2,deltaupabajo2);
Dupabajo2 = sum((hupabajo2.^2).*(dupabajo2(2:end)-
dupabajo2(1:end-1))/12);
else
Dupabajo2=0;
end
momxupabajoH=momxupabajo-Dupabajo-Dupabajo2;
hlowarriba = diff(exteriorinf(2,end:-1:indi2));
deltalowarriba = diff(intelowarriba)./hlowarriba;
dlowarriba = pchipslopes(hlowarriba,deltalowarriba);
Dlowarriba = sum((hlowarriba.^2).*(dlowarriba(2:end)-
dlowarriba(1:end-1))/12);
if exteriorinf(2,end)<0 % el intrados tiene y negativas
hlowarriba2 = diff(linspace(0,exteriorinf(2,end),30));
deltalowarriba2 = diff(intelowarriba2)./hlowarriba2;
dlowarriba2 = pchipslopes(hlowarriba2,deltalowarriba2);
Dlowarriba2 = sum((hlowarriba2.^2).*(dlowarriba2(2:end)-
dlowarriba2(1:end-1))/12);
else
Dlowarriba2=0;
end
momxlowarribaH=momxlowarriba-Dlowarriba-Dlowarriba2;
hlowabajo = diff(exteriorinf(2,1:indi2));
deltalowabajo = diff(intelowabajo)./hlowabajo;
dlowabajo = pchipslopes(hlowabajo,deltalowabajo);
Dlowabajo = sum((hlowabajo.^2).*(dlowabajo(2:end)-dlowabajo(1:end-
1))/12);
if exteriorinf(2,1)<0
hlowabajo2 = diff(linspace(0,exteriorinf(2,1),30));
deltalowabajo2 = diff(intelowabajo2)./hlowabajo2;
dlowabajo2 = pchipslopes(hlowabajo2,deltalowabajo2);
Dlowabajo2 = sum((hlowabajo2.^2).*(dlowabajo2(2:end)-
dlowabajo2(1:end-1))/12);
else
Dlowabajo2=0;
end
momxlowabajoH=momxlowabajo-Dlowabajo-Dlowabajo2;
momxupH=momxuparribaH-momxupabajoH;
momxlowH=momxlowarribaH-momxlowabajoH;
momxHexte=momxupH-momxlowH; % esta es la buena
% UNA VEZ HECHO ESTO SOLO FALTA LAS ZONAS INTERIORES:
if (planosZ(j)>=0) & (planosZ(j)<=3)
% solo tenemos una zona interior, no hay webs.
% definimos variables:
% ZONA INTERIOR:
interiorsup(1,:)=xint(j,:) + xoffset(j)*cuerda(j); % añadimos
los offsets para calcular los momentos respecto sistema ejes q pasan
por el borde ataque del perfil.
interiorsup(2,:)=yextraint(j,:);
interiorinf(1,:)=xint(j,:) + xoffset(j)*cuerda(j);
interiorinf(2,:)=yintraint(j,:);
% CALCULO DE LOS MOMENTOS DE INERCIA:
% Sy:
% ZONA INTERIOR:
% utilizando solo la regla del trapecio:
integrandou=(interiorsup(1,:)).*interiorsup(2,:);
integrandol=(interiorinf(1,:)).*interiorinf(2,:);
momysup=sum(diff(interiorsup(1,:)).*(integrandou(1:end-
1)+integrandou(2:end))/2);
momyinf=sum(diff(interiorinf(1,:)).*(integrandol(1:end-
1)+integrandol(2:end))/2);
momyinte=momysup-momyinf;
% si añadimos el termino que se obtiene de integrar el
polinomio de
% Hermite:
hu = diff(interiorsup(1,:));
deltau = diff(integrandou)./hu;
du = pchipslopes(hu,deltau);
Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12);
momysupH=momysup-Dsup;
hl = diff(interiorinf(1,:));
deltal = diff(integrandol)./hl;
dl = pchipslopes(hl,deltal);
Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12);
momyinfH=momyinf-Dinf;
momyHinte=momysupH-momyinfH;
% Una vez analizadas todas las partes simplemente queda
restarlas:
momytotality=momyexte-momyinte;
momyHtotality=momyHexte-momyHinte;
Sy(j)=momyHtotality;% ponemos como resultado final el de
integracion con polinomio Hermite.
xg(j)=Sy(j)/areatot(j);
% Sx:
% ZONA INTERIOR:
[maxi,indi]=max(interiorsup(2,:));
[mini,indi2]=min(interiorinf(2,:));
% utilizando solo la regla del trapecio:
% extrados: (up es de extrados y arriba abajo corresponde a
los dos tramos
% de curva que se ven si se plotea (y^2)*x(y) frente a y, todo
de extrados).
inteuparriba=(interiorsup(2,end:-1:indi)).*interiorsup(1,end:-
1:indi); % invertimos los valores para integrar la funcion en el
sentido de las x positivas.
inteupabajo=(interiorsup(2,1:indi)).*interiorsup(1,1:indi);
momxuparriba=sum(diff(interiorsup(2,end:-
1:indi)).*(inteuparriba(1:end-1)+inteuparriba(2:end))/2);
momxupabajo=sum(diff(interiorsup(2,1:indi)).*(inteupabajo(1:end-
1)+inteupabajo(2:end))/2);
momxup=momxuparriba-momxupabajo;
% intrados: low es de intrados y arriba abajo corresponde a
los dos tramos
% de curva que se ven si se plotea (y^2)*x(y) frente a y, todo
de intrados).
intelowarriba=(interiorinf(2,end:-
1:indi2)).*interiorinf(1,end:-1:indi2); % invierto el sentido de la
curva superior para integrar en el sentido de las x negativas (y)
intelowabajo=(interiorinf(2,1:indi2)).*interiorinf(1,1:indi2);
momxlowarriba=sum(diff(interiorinf(2,end:-
1:indi2)).*(intelowarriba(1:end-1)+intelowarriba(2:end))/2);% las
areas tienen q salir negativas aqui.
momxlowabajo=sum(diff(interiorinf(2,1:indi2)).*(intelowabajo(1:end-
1)+intelowabajo(2:end))/2);
momxlow=momxlowarriba-momxlowabajo;
momxinte=momxup-momxlow; % lo q vale es restar no sumar (antes
lo habia sumado)
% esta es la que vale porque ambas partes, la positiva y
negativa añaden inercia
% si no, si la seccion fuera simetrica y las sumara, daria
inercia nula y
% eso esta mal.
% si añadimos el termino que se obtiene de integrar el
polinomio de
% Hermite:
huparriba = diff(interiorsup(2,end:-1:indi));
deltauparriba = diff(inteuparriba)./huparriba;
duparriba = pchipslopes(huparriba,deltauparriba);
Duparriba = sum((huparriba.^2).*(duparriba(2:end)-
duparriba(1:end-1))/12);
momxuparribaH=momxuparriba-Duparriba;
hupabajo = diff(interiorsup(2,1:indi));
deltaupabajo = diff(inteupabajo)./hupabajo;
dupabajo = pchipslopes(hupabajo,deltaupabajo);
Dupabajo = sum((hupabajo.^2).*(dupabajo(2:end)-dupabajo(1:end-
1))/12);
momxupabajoH=momxupabajo-Dupabajo;
hlowarriba = diff(interiorinf(2,end:-1:indi2));
deltalowarriba = diff(intelowarriba)./hlowarriba;
dlowarriba = pchipslopes(hlowarriba,deltalowarriba);
Dlowarriba = sum((hlowarriba.^2).*(dlowarriba(2:end)-
dlowarriba(1:end-1))/12);
momxlowarribaH=momxlowarriba-Dlowarriba;
hlowabajo = diff(interiorinf(2,1:indi2));
deltalowabajo = diff(intelowabajo)./hlowabajo;
dlowabajo = pchipslopes(hlowabajo,deltalowabajo);
Dlowabajo = sum((hlowabajo.^2).*(dlowabajo(2:end)-
dlowabajo(1:end-1))/12);
momxlowabajoH=momxlowabajo-Dlowabajo;
momxupH=momxuparribaH-momxupabajoH;
momxlowH=momxlowarribaH-momxlowabajoH;
momxHinte=momxupH-momxlowH; % esta es la buena
momxHtotality=momxHexte-momxHinte;
Sx(j)=momxHtotality; % ponemos como resultado final el de
integracion con polinomio Hermite.
yg(j)=Sx(j)/areatot(j);
else
k=k+1; % contador para la variable poscinicial y poscfinal.
if (tipo==1) | ((tipo==2)&(planosZ(j)>=6))
% Tenemos webs interiores, ahora hay q ver cuantas:
if (poscinicial(k)>=posweb11(j)) &
(poscfinal(k)<=posweb22(j))
% Solo tenemos una celda, la central.
% CELDA CENTRAL (2):
celdacensup(1,:)=xint(j,:) + xoffset(j)*cuerda(j);
celdacensup(2,:)=yextraint(j,:);
celdaceninf(1,:)=xint(j,:) + xoffset(j)*cuerda(j);
celdaceninf(2,:)=yintraint(j,:);
% Sy:
% utilizando solo la regla del trapecio:
integrandou=(celdacensup(1,:)).*celdacensup(2,:);
integrandol=(celdaceninf(1,:)).*celdaceninf(2,:);
momysup=sum(diff(celdacensup(1,:)).*(integrandou(1:end-
1)+integrandou(2:end))/2);
momyinf=sum(diff(celdaceninf(1,:)).*(integrandol(1:end-
1)+integrandol(2:end))/2);
momyceldacen=momysup-momyinf;
% si añadimos el termino que se obtiene de integrar el
polinomio de
% Hermite:
hu = diff(celdacensup(1,:));
deltau = diff(integrandou)./hu;
du = pchipslopes(hu,deltau);
Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12);
momysupH=momysup-Dsup;
hl = diff(celdaceninf(1,:));
deltal = diff(integrandol)./hl;
dl = pchipslopes(hl,deltal);
Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12);
momyinfH=momyinf-Dinf;
momyHceldacen=momysupH-momyinfH;
momyHtotality=momyHexte-momyHceldacen;
Sy(j)=momyHtotality; % ponemos como resultado final el
de integracion con polinomio Hermite.
xg(j)=Sy(j)/areatot(j);
% Sx:
% utilizando solo la regla del trapecio:
[maxim,in]=max(celdacensup(2,:));
integrandou1=(celdacensup(2,end:-
1:in)).*celdacensup(1,end:-1:in);
integrandou2=celdacensup(1,end)*(linspace(0,celdacensup(2,end),30)); %
esto es la funcion y*xmax
integrandou3=(celdacensup(2,1:in)).*celdacensup(1,1:in);
integrandou4=celdacensup(1,1)*(linspace(0,celdacensup(2,1),30)); %
esto es la funcion y*xmin
integrandol1=(celdaceninf(2,end:-
1:1)).*celdaceninf(1,end:-1:1);% hay q invertir el sentido
integrandol2=celdaceninf(1,end)*(linspace(0,celdaceninf(2,end),30)); %
esto es la funcion y*xmax
integrandol3=celdaceninf(1,1)*(linspace(0,celdaceninf(2,1),30)); %
esto es la funcion y*xmin
momxsup=sum(diff(celdacensup(2,end:-
1:in)).*(integrandou1(1:end-1)+integrandou1(2:end))/2)+...
sum(diff(linspace(0,celdacensup(2,end),30)).*(integrandou2(1:end-
1)+integrandou2(2:end))/2)-...
sum(diff(celdacensup(2,1:in)).*(integrandou3(1:end-
1)+integrandou3(2:end))/2)-...
sum(diff(linspace(0,celdacensup(2,1),30)).*(integrandou4(1:end-
1)+integrandou4(2:end))/2);
momxinf=sum(diff(celdaceninf(2,end:-
1:1)).*(integrandol1(1:end-1)+integrandol1(2:end))/2)+...
sum(diff(linspace(0,celdaceninf(2,end),30)).*(integrandol2(1:end-
1)+integrandol2(2:end))/2)-...
sum(diff(linspace(0,celdaceninf(2,1),30)).*(integrandol3(1:end-
1)+integrandol3(2:end))/2);
momxceldacen=momxsup-momxinf;
% si añadimos el termino que se obtiene de integrar el
polinomio de
% Hermite:
% superior:
hu1 = diff(celdacensup(2,end:-1:in));
deltau1 = diff(integrandou1)./hu1;
du1 = pchipslopes(hu1,deltau1);
Dsup1 = sum((hu1.^2).*(du1(2:end)-du1(1:end-1))/12);
hu2 = diff(linspace(0,celdacensup(2,end),30));
deltau2 = diff(integrandou2)./hu2;
du2 = pchipslopes(hu2,deltau2);
Dsup2 = sum((hu2.^2).*(du2(2:end)-du2(1:end-1))/12);
hu3 = diff(celdacensup(2,1:in));
deltau3 = diff(integrandou3)./hu3;
du3 = pchipslopes(hu3,deltau3);
Dsup3 = sum((hu3.^2).*(du3(2:end)-du3(1:end-1))/12);
hu4 = diff(linspace(0,celdacensup(2,1),30));
deltau4 = diff(integrandou4)./hu4;
du4 = pchipslopes(hu4,deltau4);
Dsup4 = sum((hu4.^2).*(du4(2:end)-du4(1:end-1))/12);
momxsupH=momxsup-Dsup1-Dsup2+Dsup3+Dsup4;
% Inferior:
hl1 = diff(celdaceninf(2,end:-1:1)); % invertimos el
sentido como en el integrando
deltal1 = diff(integrandol1)./hl1;
dl1 = pchipslopes(hl1,deltal1);
Dinf1 = sum((hl1.^2).*(dl1(2:end)-dl1(1:end-1))/12);
hl2 = diff(linspace(0,celdaceninf(2,end),30));
deltal2 = diff(integrandol2)./hl2;
dl2 = pchipslopes(hl2,deltal2);
Dinf2 = sum((hl2.^2).*(dl2(2:end)-dl2(1:end-1))/12);
hl3 = diff(linspace(0,celdaceninf(2,1),30));
deltal3 = diff(integrandol3)./hl3;
dl3 = pchipslopes(hl3,deltal3);
Dinf3 = sum((hl3.^2).*(dl3(2:end)-dl3(1:end-1))/12);
momxinfH=momxinf-Dinf1-Dinf2+Dinf3;
momxHceldacen=momxsupH-momxinfH;
momxHtotality=momxHexte-momxHceldacen;
Sx(j)=momxHtotality; % ponemos como resultado final el
de integracion con polinomio Hermite.
yg(j)=Sx(j)/areatot(j);
% Reinicializamos las matrices usadas para q luego no
de
% problemas el programa al asignar otros datos, pues
si no
% se quedarian guardadas las dimensiones actuales de
% celdacensup y celdaceninf:
celdacensup=[];
celdaceninf=[];
elseif (poscinicial(k)<posweb11(j)) &
(poscfinal(k)<=posweb22(j))
% Tenemos celda izquierda y central, pero derecha no.
npuntos0=(3*pc-1)/2;
npuntos1=3*pc-npuntos0;
% CELDA IZQUIERDA:
celdaizqsup(1,:)=xint(j,1:npuntos0) +
xoffset(j)*cuerda(j);
celdaizqsup(2,:)=yextraint(j,1:npuntos0);
celdaizqinf(1,:)=xint(j,1:npuntos0) +
xoffset(j)*cuerda(j);
celdaizqinf(2,:)=yintraint(j,1:npuntos0);
% CELDA CENTRAL:
celdacensup(1,:)=xint(j,npuntos0+1:end) +
xoffset(j)*cuerda(j);
celdacensup(2,:)=yextraint(j,npuntos0+1:end);
celdaceninf(1,:)=xint(j,npuntos0+1:end) +
xoffset(j)*cuerda(j);
celdaceninf(2,:)=yintraint(j,npuntos0+1:end);
% Sy:
% CELDA IZQ:
% utilizando solo la regla del trapecio:
integrandou=(celdaizqsup(1,:)).*celdaizqsup(2,:);
integrandol=(celdaizqinf(1,:)).*celdaizqinf(2,:);
momysup=sum(diff(celdaizqsup(1,:)).*(integrandou(1:end-
1)+integrandou(2:end))/2);
momyinf=sum(diff(celdaizqinf(1,:)).*(integrandol(1:end-
1)+integrandol(2:end))/2);
momyceldaizq=momysup-momyinf;
% si añadimos el termino que se obtiene de integrar el
polinomio de
% Hermite:
hu = diff(celdaizqsup(1,:));
deltau = diff(integrandou)./hu;
du = pchipslopes(hu,deltau);
Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12);
momysupH=momysup-Dsup;
hl = diff(celdaizqinf(1,:));
deltal = diff(integrandol)./hl;
dl = pchipslopes(hl,deltal);
Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12);
momyinfH=momyinf-Dinf;
momyHceldaizq=momysupH-momyinfH;
% CELDA CENTRAL:
% utilizando solo la regla del trapecio:
integrandou=(celdacensup(1,:)).*celdacensup(2,:);
integrandol=(celdaceninf(1,:)).*celdaceninf(2,:);
momysup=sum(diff(celdacensup(1,:)).*(integrandou(1:end-
1)+integrandou(2:end))/2);
momyinf=sum(diff(celdaceninf(1,:)).*(integrandol(1:end-
1)+integrandol(2:end))/2);
momyceldacen=momysup-momyinf;
% si añadimos el termino que se obtiene de integrar el
polinomio de
% Hermite:
hu = diff(celdacensup(1,:));
deltau = diff(integrandou)./hu;
du = pchipslopes(hu,deltau);
Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12);
momysupH=momysup-Dsup;
hl = diff(celdaceninf(1,:));
deltal = diff(integrandol)./hl;
dl = pchipslopes(hl,deltal);
Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12);
momyinfH=momyinf-Dinf;
momyHceldacen=momysupH-momyinfH;
momyHtotality=momyHexte-momyHceldaizq-momyHceldacen;
Sy(j)=momyHtotality; % ponemos como resultado final el
de integracion con polinomio Hermite.
xg(j)=Sy(j)/areatot(j);
% Sx:
% CELDA IZQ:
% utilizando solo la regla del trapecio:
integrandou1=celdaizqsup(1,end)*(linspace(0,celdaizqsup(2,end),30)); %
esto es la funcion y*xmax
integrandou2=(celdaizqsup(2,:)).*celdaizqsup(1,:);
integrandol1=celdaizqinf(1,end)*(linspace(0,celdaizqinf(2,end),30)); %
esto es la funcion y*xmax
integrandol2=(celdaizqinf(2,:)).*celdaizqinf(1,:);
momxsup=sum(diff(linspace(0,celdaizqsup(2,end),30)).*(integrandou1(1:e
nd-1)+integrandou1(2:end))/2)-
sum(diff(celdaizqsup(2,:)).*(integrandou2(1:end-
1)+integrandou2(2:end))/2);
momxinf=sum(diff(linspace(0,celdaizqinf(2,end),30)).*(integrandol1(1:e
nd-1)+integrandol1(2:end))/2)-
sum(diff(celdaizqinf(2,:)).*(integrandol2(1:end-
1)+integrandol2(2:end))/2);
momxceldaizq=momxsup-momxinf;
% si añadimos el termino que se obtiene de integrar el
polinomio de
% Hermite:
% superior:
hu1 = diff(linspace(0,celdaizqsup(2,end),30));
deltau1 = diff(integrandou1)./hu1;
du1 = pchipslopes(hu1,deltau1);
Dsup1 = sum((hu1.^2).*(du1(2:end)-du1(1:end-1))/12);
hu2 = diff(celdaizqsup(2,:));
deltau2 = diff(integrandou2)./hu2;
du2 = pchipslopes(hu2,deltau2);
Dsup2 = sum((hu2.^2).*(du2(2:end)-du2(1:end-1))/12);
momxsupH=momxsup-Dsup1+Dsup2;
% inferior:
hl1 = diff(linspace(0,celdaizqinf(2,end),30));
deltal1 = diff(integrandol1)./hl1;
dl1 = pchipslopes(hl1,deltal1);
Dinf1 = sum((hl1.^2).*(dl1(2:end)-dl1(1:end-1))/12);
hl2 = diff(celdaizqinf(2,:));
deltal2 = diff(integrandol2)./hl2;
dl2 = pchipslopes(hl2,deltal2);
Dinf2 = sum((hl2.^2).*(dl2(2:end)-dl2(1:end-1))/12);
momxinfH=momxinf-Dinf1+Dinf2;
momxHceldaizq=momxsupH-momxinfH;
% CELDA CENTRAL:
% utilizando solo la regla del trapecio:
[maxim,in]=max(celdacensup(2,:));
integrandou1=(celdacensup(2,end:-
1:in)).*celdacensup(1,end:-1:in);
integrandou2=celdacensup(1,end)*(linspace(0,celdacensup(2,end),30)); %
esto es la funcion y*xmax
integrandou3=(celdacensup(2,1:in)).*celdacensup(1,1:in);
integrandou4=celdacensup(1,1)*(linspace(0,celdacensup(2,1),30)); %
esto es la funcion y*xmin
integrandol1=(celdaceninf(2,end:-
1:1)).*celdaceninf(1,end:-1:1);% hay q invertir el sentido
integrandol2=celdaceninf(1,end)*(linspace(0,celdaceninf(2,end),30)); %
esto es la funcion y*xmax
integrandol3=celdaceninf(1,1)*(linspace(0,celdaceninf(2,1),30)); %
esto es la funcion y*xmin
momxsup=sum(diff(celdacensup(2,end:-
1:in)).*(integrandou1(1:end-1)+integrandou1(2:end))/2)+...
sum(diff(linspace(0,celdacensup(2,end),30)).*(integrandou2(1:end-
1)+integrandou2(2:end))/2)-...
sum(diff(celdacensup(2,1:in)).*(integrandou3(1:end-
1)+integrandou3(2:end))/2)-...
sum(diff(linspace(0,celdacensup(2,1),30)).*(integrandou4(1:end-
1)+integrandou4(2:end))/2);
momxinf=sum(diff(celdaceninf(2,end:-
1:1)).*(integrandol1(1:end-1)+integrandol1(2:end))/2)+...
sum(diff(linspace(0,celdaceninf(2,end),30)).*(integrandol2(1:end-
1)+integrandol2(2:end))/2)-...
sum(diff(linspace(0,celdaceninf(2,1),30)).*(integrandol3(1:end-
1)+integrandol3(2:end))/2);
momxceldacen=momxsup-momxinf;
% si añadimos el termino que se obtiene de integrar el
polinomio de
% Hermite:
% superior:
hu1 = diff(celdacensup(2,end:-1:in));
deltau1 = diff(integrandou1)./hu1;
du1 = pchipslopes(hu1,deltau1);
Dsup1 = sum((hu1.^2).*(du1(2:end)-du1(1:end-1))/12);
hu2 = diff(linspace(0,celdacensup(2,end),30));
deltau2 = diff(integrandou2)./hu2;
du2 = pchipslopes(hu2,deltau2);
Dsup2 = sum((hu2.^2).*(du2(2:end)-du2(1:end-1))/12);
hu3 = diff(celdacensup(2,1:in));
deltau3 = diff(integrandou3)./hu3;
du3 = pchipslopes(hu3,deltau3);
Dsup3 = sum((hu3.^2).*(du3(2:end)-du3(1:end-1))/12);
hu4 = diff(linspace(0,celdacensup(2,1),30));
deltau4 = diff(integrandou4)./hu4;
du4 = pchipslopes(hu4,deltau4);
Dsup4 = sum((hu4.^2).*(du4(2:end)-du4(1:end-1))/12);
momxsupH=momxsup-Dsup1-Dsup2+Dsup3+Dsup4;
% Inferior:
hl1 = diff(celdaceninf(2,end:-1:1)); % invertimos el
sentido como en el integrando
deltal1 = diff(integrandol1)./hl1;
dl1 = pchipslopes(hl1,deltal1);
Dinf1 = sum((hl1.^2).*(dl1(2:end)-dl1(1:end-1))/12);
hl2 = diff(linspace(0,celdaceninf(2,end),30));
deltal2 = diff(integrandol2)./hl2;
dl2 = pchipslopes(hl2,deltal2);
Dinf2 = sum((hl2.^2).*(dl2(2:end)-dl2(1:end-1))/12);
hl3 = diff(linspace(0,celdaceninf(2,1),30));
deltal3 = diff(integrandol3)./hl3;
dl3 = pchipslopes(hl3,deltal3);
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab
ejemplos matlab

Más contenido relacionado

La actualidad más candente

Funciones Trigonometricas
Funciones TrigonometricasFunciones Trigonometricas
Funciones Trigonometricasjavier5651
 
Inteligencia Articulado
Inteligencia ArticuladoInteligencia Articulado
Inteligencia ArticuladoOmar Sanchez
 
Teorico2 funcion de_onda
Teorico2 funcion de_ondaTeorico2 funcion de_onda
Teorico2 funcion de_ondaDanae Reyes
 
deformaciones almeria- mecánica de solidos
deformaciones almeria- mecánica de solidosdeformaciones almeria- mecánica de solidos
deformaciones almeria- mecánica de solidosHugo Méndez
 
1 distribucion binomial y sus momentos
1 distribucion binomial y sus momentos1 distribucion binomial y sus momentos
1 distribucion binomial y sus momentosvictor pere
 
Problemas resueltos tema5
Problemas resueltos tema5Problemas resueltos tema5
Problemas resueltos tema5Felipe Alzate
 
Problemas geotecnia cimientos
Problemas geotecnia cimientosProblemas geotecnia cimientos
Problemas geotecnia cimientosJulian Socarras
 
Utp pd_iy_va_sap8 transformaciones geometricas
 Utp pd_iy_va_sap8 transformaciones geometricas Utp pd_iy_va_sap8 transformaciones geometricas
Utp pd_iy_va_sap8 transformaciones geometricasjcbp_peru
 
La derivada como razon de cambio
La derivada como razon de cambioLa derivada como razon de cambio
La derivada como razon de cambioITCN
 
Design and implementation of a real scale segway
Design and implementation of a real scale segwayDesign and implementation of a real scale segway
Design and implementation of a real scale segwayLuis Flores Pozo
 
Funciones trigonometricas
Funciones trigonometricasFunciones trigonometricas
Funciones trigonometricasSergio Alegria
 

La actualidad más candente (15)

Funciones Trigonometricas
Funciones TrigonometricasFunciones Trigonometricas
Funciones Trigonometricas
 
Inteligencia Articulado
Inteligencia ArticuladoInteligencia Articulado
Inteligencia Articulado
 
Teorico2 funcion de_onda
Teorico2 funcion de_ondaTeorico2 funcion de_onda
Teorico2 funcion de_onda
 
Movimiento cohetes
Movimiento cohetesMovimiento cohetes
Movimiento cohetes
 
deformaciones almeria- mecánica de solidos
deformaciones almeria- mecánica de solidosdeformaciones almeria- mecánica de solidos
deformaciones almeria- mecánica de solidos
 
1 distribucion binomial y sus momentos
1 distribucion binomial y sus momentos1 distribucion binomial y sus momentos
1 distribucion binomial y sus momentos
 
Analisis sismico de_presas
Analisis sismico de_presasAnalisis sismico de_presas
Analisis sismico de_presas
 
Problemas resueltos tema5
Problemas resueltos tema5Problemas resueltos tema5
Problemas resueltos tema5
 
Fisica2 clase2
Fisica2 clase2Fisica2 clase2
Fisica2 clase2
 
V3.n1.claiman
V3.n1.claimanV3.n1.claiman
V3.n1.claiman
 
Problemas geotecnia cimientos
Problemas geotecnia cimientosProblemas geotecnia cimientos
Problemas geotecnia cimientos
 
Utp pd_iy_va_sap8 transformaciones geometricas
 Utp pd_iy_va_sap8 transformaciones geometricas Utp pd_iy_va_sap8 transformaciones geometricas
Utp pd_iy_va_sap8 transformaciones geometricas
 
La derivada como razon de cambio
La derivada como razon de cambioLa derivada como razon de cambio
La derivada como razon de cambio
 
Design and implementation of a real scale segway
Design and implementation of a real scale segwayDesign and implementation of a real scale segway
Design and implementation of a real scale segway
 
Funciones trigonometricas
Funciones trigonometricasFunciones trigonometricas
Funciones trigonometricas
 

Similar a ejemplos matlab

Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos ...
Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos ...Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos ...
Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos ...Carlos Aguilar
 
Clases graficas ultima_clase_matlab
Clases graficas ultima_clase_matlabClases graficas ultima_clase_matlab
Clases graficas ultima_clase_matlabStefanny Gavilema
 
Exposición cálculo integral y diferencial
Exposición cálculo integral y diferencialExposición cálculo integral y diferencial
Exposición cálculo integral y diferencialSophiZambrano95
 
SIMULACION EN MATLAB
SIMULACION EN MATLABSIMULACION EN MATLAB
SIMULACION EN MATLABorlandodiaz11
 
Agrupamiento Kmeans
Agrupamiento KmeansAgrupamiento Kmeans
Agrupamiento KmeansOmar Sanchez
 
Procesamiento Digital De Señales Filtro Pasa Altas - MATLAB
Procesamiento Digital De Señales Filtro Pasa Altas - MATLABProcesamiento Digital De Señales Filtro Pasa Altas - MATLAB
Procesamiento Digital De Señales Filtro Pasa Altas - MATLABFernando Marcos Marcos
 
TERCERA PRACTICA
TERCERA PRACTICATERCERA PRACTICA
TERCERA PRACTICAkokame
 
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.DianaJulia10
 
ampliteoriatema1_unlocked.pdf
ampliteoriatema1_unlocked.pdfampliteoriatema1_unlocked.pdf
ampliteoriatema1_unlocked.pdfAngelCasodelaVega
 
3.3.2 método de bairstow (1)
3.3.2 método de bairstow (1)3.3.2 método de bairstow (1)
3.3.2 método de bairstow (1)Ricardo Sarabia
 
Modulo 10 - miércoles.pptx
Modulo 10 - miércoles.pptxModulo 10 - miércoles.pptx
Modulo 10 - miércoles.pptxALDOMORALES37
 
Ejercicios detallados del obj 7 mat iii 733
Ejercicios detallados del obj 7 mat iii  733 Ejercicios detallados del obj 7 mat iii  733
Ejercicios detallados del obj 7 mat iii 733 Jonathan Mejías
 

Similar a ejemplos matlab (20)

Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos ...
Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos ...Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos ...
Solucion de Ecuaciones Diferenciales Ordinarias de Segundo Orden por Métodos ...
 
Clases graficas ultima_clase_matlab
Clases graficas ultima_clase_matlabClases graficas ultima_clase_matlab
Clases graficas ultima_clase_matlab
 
Exposición cálculo integral y diferencial
Exposición cálculo integral y diferencialExposición cálculo integral y diferencial
Exposición cálculo integral y diferencial
 
Matlab2009b -clase2
Matlab2009b  -clase2Matlab2009b  -clase2
Matlab2009b -clase2
 
SIMULACION EN MATLAB
SIMULACION EN MATLABSIMULACION EN MATLAB
SIMULACION EN MATLAB
 
Agrupamiento Kmeans
Agrupamiento KmeansAgrupamiento Kmeans
Agrupamiento Kmeans
 
Capitulo 9 funciones vectoriales
Capitulo 9  funciones vectorialesCapitulo 9  funciones vectoriales
Capitulo 9 funciones vectoriales
 
RNAs Backpropagation
RNAs Backpropagation RNAs Backpropagation
RNAs Backpropagation
 
Trabajo funciones
Trabajo funcionesTrabajo funciones
Trabajo funciones
 
Procesamiento Digital De Señales Filtro Pasa Altas - MATLAB
Procesamiento Digital De Señales Filtro Pasa Altas - MATLABProcesamiento Digital De Señales Filtro Pasa Altas - MATLAB
Procesamiento Digital De Señales Filtro Pasa Altas - MATLAB
 
TERCERA PRACTICA
TERCERA PRACTICATERCERA PRACTICA
TERCERA PRACTICA
 
Practica#6 ismael
Practica#6 ismaelPractica#6 ismael
Practica#6 ismael
 
Dinamic alab2
Dinamic alab2Dinamic alab2
Dinamic alab2
 
Taller 2 Elementos Finitos
Taller 2 Elementos FinitosTaller 2 Elementos Finitos
Taller 2 Elementos Finitos
 
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
ANÁLISIS CINEMÁTICO DE MECANISMOS Unidad 2.
 
Unidad3.pdf
Unidad3.pdfUnidad3.pdf
Unidad3.pdf
 
ampliteoriatema1_unlocked.pdf
ampliteoriatema1_unlocked.pdfampliteoriatema1_unlocked.pdf
ampliteoriatema1_unlocked.pdf
 
3.3.2 método de bairstow (1)
3.3.2 método de bairstow (1)3.3.2 método de bairstow (1)
3.3.2 método de bairstow (1)
 
Modulo 10 - miércoles.pptx
Modulo 10 - miércoles.pptxModulo 10 - miércoles.pptx
Modulo 10 - miércoles.pptx
 
Ejercicios detallados del obj 7 mat iii 733
Ejercicios detallados del obj 7 mat iii  733 Ejercicios detallados del obj 7 mat iii  733
Ejercicios detallados del obj 7 mat iii 733
 

Último

CFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCarlos Delgado
 
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptxluiscisnerosayala23
 
Procedimientos constructivos superestructura, columnas
Procedimientos constructivos superestructura, columnasProcedimientos constructivos superestructura, columnas
Procedimientos constructivos superestructura, columnasAhmedMontaoSnchez1
 
Proyecto de Base de Datos de César Guzmán
Proyecto de Base de Datos de César GuzmánProyecto de Base de Datos de César Guzmán
Proyecto de Base de Datos de César Guzmáncesarguzmansierra751
 
Revista estudiantil, trabajo final Materia ingeniería de Proyectos
Revista estudiantil, trabajo final Materia ingeniería de ProyectosRevista estudiantil, trabajo final Materia ingeniería de Proyectos
Revista estudiantil, trabajo final Materia ingeniería de ProyectosJeanCarlosLorenzo1
 
Tema 7 Plantas Industriales (2).pptx ingenieria
Tema 7 Plantas Industriales (2).pptx ingenieriaTema 7 Plantas Industriales (2).pptx ingenieria
Tema 7 Plantas Industriales (2).pptx ingenieriaLissetteMorejonLeon
 
METROLOGÍA ÓPTICA E INSTRUMENTACIÓN BÁSICA.pdf
METROLOGÍA ÓPTICA E INSTRUMENTACIÓN BÁSICA.pdfMETROLOGÍA ÓPTICA E INSTRUMENTACIÓN BÁSICA.pdf
METROLOGÍA ÓPTICA E INSTRUMENTACIÓN BÁSICA.pdfesparzadaniela548
 
POBLACIONES CICLICAS Y NO CICLICAS ......
POBLACIONES CICLICAS Y NO CICLICAS ......POBLACIONES CICLICAS Y NO CICLICAS ......
POBLACIONES CICLICAS Y NO CICLICAS ......dianamontserratmayor
 
lean manufacturing and its definition for industries
lean manufacturing and its definition for industrieslean manufacturing and its definition for industries
lean manufacturing and its definition for industriesbarom
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCANDECE
 
Diseño de un aerogenerador de 400w de eje vertical
Diseño de un aerogenerador de 400w de eje verticalDiseño de un aerogenerador de 400w de eje vertical
Diseño de un aerogenerador de 400w de eje verticalEfrain Yungan
 
Edificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaEdificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaANDECE
 
4.3 Subestaciones eléctricas componentes principales .pptx
4.3 Subestaciones eléctricas componentes principales .pptx4.3 Subestaciones eléctricas componentes principales .pptx
4.3 Subestaciones eléctricas componentes principales .pptxEfrain Yungan
 
PPT - MODIFICACIONES PRESUPUESTARIAS - Anexo II VF.pdf
PPT - MODIFICACIONES PRESUPUESTARIAS - Anexo II VF.pdfPPT - MODIFICACIONES PRESUPUESTARIAS - Anexo II VF.pdf
PPT - MODIFICACIONES PRESUPUESTARIAS - Anexo II VF.pdfDarwinJPaulino
 
Ley 29783 ALCANCES E INTERPRETACION ----
Ley 29783 ALCANCES E INTERPRETACION ----Ley 29783 ALCANCES E INTERPRETACION ----
Ley 29783 ALCANCES E INTERPRETACION ----AdministracionSSTGru
 
JimyPomalaza vivienda rural huancavelica .pdf
JimyPomalaza vivienda rural huancavelica .pdfJimyPomalaza vivienda rural huancavelica .pdf
JimyPomalaza vivienda rural huancavelica .pdfJimyPomalaza
 
Estudio de materiales asfalticos para utilizar en obras viales
Estudio de materiales asfalticos para utilizar en obras vialesEstudio de materiales asfalticos para utilizar en obras viales
Estudio de materiales asfalticos para utilizar en obras vialesRamonCortez4
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasSegundo Silva Maguiña
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfIsbelRodrguez
 
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticasEJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticasEfrain Yungan
 

Último (20)

CFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric Project
 
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
01 COSTOS UNITARIOS Y PRESUPUESTO DE OBRA-EXPEDIENTE TECNICO DE OBRA.pptx
 
Procedimientos constructivos superestructura, columnas
Procedimientos constructivos superestructura, columnasProcedimientos constructivos superestructura, columnas
Procedimientos constructivos superestructura, columnas
 
Proyecto de Base de Datos de César Guzmán
Proyecto de Base de Datos de César GuzmánProyecto de Base de Datos de César Guzmán
Proyecto de Base de Datos de César Guzmán
 
Revista estudiantil, trabajo final Materia ingeniería de Proyectos
Revista estudiantil, trabajo final Materia ingeniería de ProyectosRevista estudiantil, trabajo final Materia ingeniería de Proyectos
Revista estudiantil, trabajo final Materia ingeniería de Proyectos
 
Tema 7 Plantas Industriales (2).pptx ingenieria
Tema 7 Plantas Industriales (2).pptx ingenieriaTema 7 Plantas Industriales (2).pptx ingenieria
Tema 7 Plantas Industriales (2).pptx ingenieria
 
METROLOGÍA ÓPTICA E INSTRUMENTACIÓN BÁSICA.pdf
METROLOGÍA ÓPTICA E INSTRUMENTACIÓN BÁSICA.pdfMETROLOGÍA ÓPTICA E INSTRUMENTACIÓN BÁSICA.pdf
METROLOGÍA ÓPTICA E INSTRUMENTACIÓN BÁSICA.pdf
 
POBLACIONES CICLICAS Y NO CICLICAS ......
POBLACIONES CICLICAS Y NO CICLICAS ......POBLACIONES CICLICAS Y NO CICLICAS ......
POBLACIONES CICLICAS Y NO CICLICAS ......
 
lean manufacturing and its definition for industries
lean manufacturing and its definition for industrieslean manufacturing and its definition for industries
lean manufacturing and its definition for industries
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRC
 
Diseño de un aerogenerador de 400w de eje vertical
Diseño de un aerogenerador de 400w de eje verticalDiseño de un aerogenerador de 400w de eje vertical
Diseño de un aerogenerador de 400w de eje vertical
 
Edificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes GranadaEdificio residencial Tarsia de AEDAS Homes Granada
Edificio residencial Tarsia de AEDAS Homes Granada
 
4.3 Subestaciones eléctricas componentes principales .pptx
4.3 Subestaciones eléctricas componentes principales .pptx4.3 Subestaciones eléctricas componentes principales .pptx
4.3 Subestaciones eléctricas componentes principales .pptx
 
PPT - MODIFICACIONES PRESUPUESTARIAS - Anexo II VF.pdf
PPT - MODIFICACIONES PRESUPUESTARIAS - Anexo II VF.pdfPPT - MODIFICACIONES PRESUPUESTARIAS - Anexo II VF.pdf
PPT - MODIFICACIONES PRESUPUESTARIAS - Anexo II VF.pdf
 
Ley 29783 ALCANCES E INTERPRETACION ----
Ley 29783 ALCANCES E INTERPRETACION ----Ley 29783 ALCANCES E INTERPRETACION ----
Ley 29783 ALCANCES E INTERPRETACION ----
 
JimyPomalaza vivienda rural huancavelica .pdf
JimyPomalaza vivienda rural huancavelica .pdfJimyPomalaza vivienda rural huancavelica .pdf
JimyPomalaza vivienda rural huancavelica .pdf
 
Estudio de materiales asfalticos para utilizar en obras viales
Estudio de materiales asfalticos para utilizar en obras vialesEstudio de materiales asfalticos para utilizar en obras viales
Estudio de materiales asfalticos para utilizar en obras viales
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la Ingenierías
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdf
 
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticasEJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
EJERCICIOS DE -LEY-DE-OHM aplicaciones prácticas
 

ejemplos matlab

  • 1. ANEXO: PROGRAMAS DE MATLAB CÁLCULO DE DESPLAZAMIENTOS HOMERBUCLE.M clear all; global E; global IX; % direccion general de batimiento global IY; % direccion general de arrastre global IXY; % producto de inercia para esos ejes. global K; global area; global G; global modtor; global Kt; global CL; global L; global planosZ; %global xi; %global x; global temps0; %%%%%%%%%%%% Propiedades del material: material sandwich.%%%%%%%%%%%%% E=1.2261e10; %2.6733e+010; Modulo elastico del material(N/m2) K=5/6; % Rigidez de la viga (para una viga de seccion rectangular toma este valor) nu=0.3; % Coeficiente de Poisson %G=1.0282e+010; G=2.3e+009; % Modulo a cortante del material Kt=1e15; %-0.0304e6 % Si no hay acoplamiento Kt=-infinito. % Acoplamiento flexion-torsion ro=857.7; %densidad del material sándwich (kg/m3) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%Geometria%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% % Datos iniciales para una viga de geometria cuadrada: %base=2.5; % base(m) %hauteur=0.2*base; % altura(m) L=26; % longitud de la viga(m) %I=(base*hauteur^3)/12; % momento de inercia respecto al eje x de la seccion (Ix) %A=base*hauteur; % area de la seccion rectangular %J=(1/12)*base*hauteur*(base*base+hauteur*hauteur); % momento polar de inercia de la seccion: J=Ix+Iy %Is=ro*J; % elemento de la matriz de masas(kg*m)
  • 2. % A continuacion modificaremos los valores de la geometria para poder % obtener una representacion mas compleja y real de la pala. %%%%%%%%%%% datos que definen la geometria %%%%%%%%%%%%%%%%%%% % Se encuentran guardados en el mat-file geometria, si se quieren modificar % los datos de la pala, hay que modificarlos en los respectivos programas y % correr el script palahomer.m que nos modificara las variables del % mat-file ''geometria''. load geometria %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Una vez tenemos estos valores, podemos obtener las variables para % cualquier punto de la pala mediante interpolacion con pchip. %%%%%%%%%%% Otras variables importantes del programa%%%%%%%%%%%%%%%%%%%%%% CL=1; type=2; % Si es uno analizaremos el estado 1 de carga. a=[7:2:25]./L; % vector de puntos de aplicacion (adimensional)de las cargas exteriores variables en el tiempo dimension=length(a); % número de cargas exteriores (longitud de a). force=ones(1,10); % vector de la misma longitud que 'a' donde sus elementos valen 1 si hay fuerza puntual exterior en la posicion 'a' ; 0 si no %force=zeros(1,10); moment_torsion=ones(1,10); % % vector de la misma longitud que 'a' donde sus elementos valen 1 si hay momento torsor exterior en la posicion 'a' ; 0 si no %moment_torsion=zeros(1,10); temps0=2.4; % tiempo que duran las fuerzas exteriores. Todas duran lo mismo en el tiempo (con 3.6 segundos ya no me converge) n=4; % numero de puntos de Gauss m=1.2e3; % numero de intervalos de integracion h=temps0/m; %h=temps0/m; %H/m; % tamaño del intervalo de integracion met='sto'; % Metodo numerico de integracion ver el archivo metodo.m % comienzo del programa %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% R=zeros(2*n,2*n); M=zeros(2*n,2*n); C=zeros(2*n,2*n); [y,w]=gauss(0,L,n); y=y/L; % adimensionalizamos los valores de los puntos de gauss, pues las funciones de influencia estan % adimensionalizadas en longitud.
  • 3. % y: punto de Gauss % w: coeficientes de Gauss % Las tres matrices R M y C son matrices 2*n,2*n o vectores de dimensiones 2*n, pues por cada punto de gauss hay que % calcular dos despalazamientos (desplazamiento vertical lineal y giro por torsion en el plano perpendicular a la seccion de la viga o % giro por flexion en el plano de carga de la viga). % Implementacion de la matriz de integracion[R] for i=1:2:2*n; R(i,i)=w((i+1)/2); R(i+1,i+1)=w((i+1)/2); end % Implementacion de la matriz de masas [M] % Para ello necesitamos calcular los valores de densidad,area y modulo de % torsion en los puntos de gauss: usaremos polinomios interpoladores. % inicialmente consideramos que la densidad es constante en toda la pala. A=pchip(planosZ,area,y*L); % valores de area en los puntos de gauss. J=pchip(planosZ,modtor,y*L); % valores del modulo torsion en puntos gauss Is=ro.*J; for i=1:2:2*n; M(i,i)=ro.*A((i+1)/2); M(i+1,i+1)=Is((i+1)/2); end % Implementacion de la matriz de funciones de influencia [C] for i=1:2:2*n; for j=1:2:2*n; C(i,j)=w1(y((i+1)/2),y((j+1)/2)); C(i,j+1)=w3(y((i+1)/2),y((j+1)/2)); C(i+1,j)=fi1(y((i+1)/2),y((j+1)/2)); C(i+1,j+1)=fi3(y((i+1)/2),y((j+1)/2)); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % calculo del desplazamiento estatico (deltaest) deltaest=zeros(2*n,m); % la matriz de desplazamientos es una matriz donde en cada una de las columnas se han almacenado % los 2 desplazamientos de cada punto de gauss en un instante concreto de tiempo. for i=1:2:2*n for s=1:dimension for j=0:m-1 if j*h<temps0 [effort,m_torsion]=actionbuclejf(j*h,a(s),type,s);
  • 4. if (force(s)==1)&&(moment_torsion(s)==0) % si hay solo fuerza puntual deltaest(i,j+1)=deltaest(i,j+1) + w1(y((i+1)/2),a(s))*effort; % asi vamos añadiendo al valor anterior el nuevo desplazamiento generado por nueva carga. deltaest(i+1,j+1)=deltaest(i+1,j+1) + fi1(y((i+1)/2),a(s))*effort; elseif (force(s)==0)&&(moment_torsion(s)==1) % si hay solo momento de torsion deltaest(i,j+1)=deltaest(i,j+1) + w3(y((i+1)/2),a(s))*m_torsion; deltaest(i+1,j+1)=deltaest(i+1,j+1) + fi3(y((i+1)/2),a(s))*m_torsion; elseif (force(s)==1)&&(moment_torsion(s)==1) % hay fuerza puntual y momento de torsion deltaest(i,j+1)=deltaest(i,j+1) + w1(y((i+1)/2),a(s))*effort + w3(y((i+1)/2),a(s))*m_torsion; deltaest(i+1,j+1)=deltaest(i+1,j+1) + fi1(y((i+1)/2),a(s))*effort + fi3(y((i+1)/2),a(s))*m_torsion; else % no hay cargas (force=0 y moment_torsion=0) deltaest(i,j+1)=deltaest(i,j+1); deltaest(i+1,j+1)=deltaest(i+1,j+1); break % pongo esto para no estar entrando continuamente en el bucle sin analizar nada. end else deltaest(i,j+1)=0; deltaest(i+1,j+1)=0; % ¿ Haria falta poner esto, si nunca entra aqui j*h siempre es menor que temps0 end end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%% PRINCIPO DE STOERM %%%%%%%%%%%%%%%%%%%%% % resolucion de la ecuacion diferencial % algoritmo de Stoerm metodo % corremos el programa metodo, el cual, al estar definida la variable met como 'sto' nos ejecuta el algoritmo de stoerm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% FINAL DE STOERM %%%%%%%%%%%%%%%%%%%%%%%%%%%% % Del algoritmo de Stoerm acabamos obteniendo el valor de delta. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  • 5. % Calculo del desplazamiento en todos los puntos de la viga: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% nb=40; % numero de puntos deseados deltapp=zeros(2*n,m); % esto se podria quitar point=zeros(nb,1); % esto se podria quitar for i=1:nb+1; point(i)=1/nb*(i-1); end % Point es un vector donde se representa la posicion de nb puntos de la viga con equiespaciado entre puntos de 1/nb deltapp=-invCRM*(delta-deltaest); % matriz que representa la segunda derivada de delta. C=zeros(2*nb,2*n); for i=1:2:2*nb; for j=1:2:2*n; C(i,j)=w1(point((i+1)/2),y((j+1)/2)); C(i,j+1)=w3(point((i+1)/2),y((j+1)/2)); C(i+1,j)=fi1(point((i+1)/2),y((j+1)/2)); C(i+1,j+1)=fi3(point((i+1)/2),y((j+1)/2)); end end % Ahora llenamos la matriz de funciones de influencia colocando en cada funcion de influencia los puntos % de gauss como valores de chi, y valores equiespaciados de la posicion de la viga como valores de x % (ya no introducimos como haciamos antes en los valores de x de las funciones de influencia los puntos de gauss) deltaest=zeros(2*nb,m); for i=1:2:2*nb for s=1:dimension for j=0:m-1 if j*h<temps0 [effort,m_torsion]=actionbuclejf(j*h,a(s),type,s); if (force(s)==1)&&(moment_torsion(s)==0) % si hay solo fuerza puntual deltaest(i,j+1)=deltaest(i,j+1) + w1(point((i+1)/2),a(s))*effort; deltaest(i+1,j+1)=deltaest(i+1,j+1) + fi1(point((i+1)/2),a(s))*effort; elseif (force(s)==0)&&(moment_torsion(s)==1) % si hay solo momento de torsion deltaest(i,j+1)=deltaest(i,j+1) + w3(point((i+1)/2),a(s))*m_torsion; deltaest(i+1,j+1)=deltaest(i+1,j+1) + fi3(point((i+1)/2),a(s))*m_torsion;
  • 6. elseif (force(s)==1)&&(moment_torsion(s)==1) % hay fuerza puntual y momento de torsion deltaest(i,j+1)=deltaest(i,j+1) + w1(point((i+1)/2),a(s))*effort + w3(point((i+1)/2),a(s))*m_torsion; deltaest(i+1,j+1)=deltaest(i+1,j+1) + fi1(point((i+1)/2),a(s))*effort + fi3(point((i+1)/2),a(s))*m_torsion; else % si no hay fuerza ni momento el desplazamiento es el % que habia antes. deltaest(i,j+1)=deltaest(i,j+1); deltaest(i+1,j+1)=deltaest(i+1,j+1); break % ponemos esto para no estar entrando continuamente en el bucle sin analizar nada. end else deltaest(i,j+1)=0; deltaest(i+1,j+1)=0; end end end end delta=zeros(2*nb,m); % esto se podria quitar delta=deltaest-C*R*M*deltapp; %despl=zeros(m/100,nb); %teta=zeros(m/100,nb); %fi=zeros(m/100,nb); for i=1:2:2*nb for j=1:1:m despl(j,(i+1)/2)=delta(i,j); fi(j,(i+1)/2)=delta(i+1,j); tiempo(j)=t(j); end end % esto nos permite separar de la matriz de desplazamientos, el desplazamiento vertical, giro por flexion y % giro por torsion en funcion del tiempo de cada uno de los nb puntos seleccionados de la viga en tres % vectores distintos que los almacenan: despl, teta y fi respectivamente. % El vector de tiempos es el ya obtenido en el algoritmo de stoerm: es un vector equiespaciado. tiempo2=tiempo'; % trasponemos el vector para que quede igual que despl, teta y fi, en cuyas columnas se almacenan % los desplazamientos correspondientes a cada uno de los puntos de la viga en el transcurso del tiempo. %for i=1:3:3*nb % for j=1:m % despl((i+2)/3,j)=-delta(i,j);
  • 7. % teta((i+2)/3,j)=-delta(i+1,j); % fi((i+2)/3,j)=-delta(i+2,j); % end %end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % affichage du resultat % Graficos de desplazamiento vertical: figure(1) plot(tiempo2,despl(:,40),'.b-') % nos permite ver la evolucion de un punto de la viga en el tiempo title('evolucion del extremo de la viga en el tiempo') xlabel('tiempo(s)') ylabel('desplazamiento vertical (m)') grid figure(2) plot(1:40,despl(1200,:),'.r-') % nos permite ver la deformada de la viga en un determinado tiempo title('deformada de la viga en un determinado tiempo') xlabel('posicion de los puntos de la viga (pto 40 = extremo)') ylabel('desplazamiento vertical (m)') grid %Graficos de angulo de torsion: figure(3) plot(tiempo2,fi(:,40),'.b-') % nos permite ver la evolucion del angulo torsion de un punto de la viga en el tiempo title('evolucion del angulo de torsion del extremo de la viga en el tiempo') xlabel('tiempo(s)') ylabel('angulo de torsion') grid figure(4) plot(1:40,fi(1200,:),'.r-') % nos permite ver el angulo de torsion de la viga en un determinado tiempo title('angulo de torsion de la viga en un determinado tiempo') xlabel('posicion de los puntos de la viga (pto 40 = extremo)') ylabel('angulo de torsion') grid % Hemos puesto como amplitud de la fuerza en el programa action un valor de Pmax = 20: % Para este valor los valores de axis del programita siguiente nos permiten verlo bien. % Probar esta secuencia para ver bien los resultados: % Para visualizar la deformada de la viga en el transcurso del tiempo: %for i=1:1200 %if i<600 %plot(1:40,despl(i,:),'r-') %hold on %pause(0.1) %axis([38.5 40 -6e-5 1e-8]) %else %plot(1:40,despl(i,:),'b-')
  • 8. %hold on %pause(0.1) %axis([38.5 40 -6e-5 1e-8]) %end %end % Y para visualizar la evolucion de cada punto de la viga en funcion del tiempo: %for i=1:40 %plot(tiempo2,despl(:,i)) %hold on %pause(1) %end ACTIONBUCLEJF.M function [effort,moment_torsion] = actionbuclejf(ti,a,type,s) global temps0; factorcarga=1.35; if type==1 load cargasoperacion tiempo=(giro1)*60/(25*2*pi); %effort0=pchip(tiempo,Fax1(:,s),ti); effort0=pchip(tiempo,Ftantot(:,s),ti); effort=effort0*factorcarga; moment_torsion0=pchip(tiempo,Mtorsor(:,s),ti); moment_torsion=moment_torsion0*factorcarga; elseif type==2 load cargaextrema effort0=pchip(t,Fax(:,s),ti); effort=effort0*factorcarga; moment_torsion0=pchip(t,Mtorsor(:,s),ti); moment_torsion=moment_torsion0*factorcarga; end %moment_torsion=0; METODO.M % Seleccion del metodo numerico para integral la ecuacion diferencial if met=='sto' stoerm end if met=='abm' adbami end if met=='ham' hamming end if met=='msi'
  • 9. milsim end if met=='rk2' runkut2 end if met=='rk4' runkut4 end STOERM.M %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%% PRINCIPIO DE STOERM %%%%%%%%%%%%%%%%%%%%% % resolucion de la ecuacion diferencial. % algoritmo de Stoerm % Si nos fijamos en los apuntes se ve como la y de la ecuacion corresponde a nuestra delta % que es funcion del tiempo (el equivalente a la variable x de la formula). La funcion de la % derecha de la ecuacion, que es f(x,y) esta representada en nuestro problema por (deltaest-delta)/CRM % que es una funcion de x y de y, o lo que es lo mismo de t y de delta, pues la variable delta % esta representada por el termino delta y la varieble del tiempo por deltaest, pues es funcion solo % de t ya que en x esta evaluada sobre los puntos de gauss. % Asi x0=t0; y(x0)=y(t0)=y0=delta0; z0 es igual: dy/dx=ddelta/dt=z0. t0=0; z0=0; delta0=0; delta=zeros(2*n,m); invCRM=inv(C*R*M); inc=zeros(2*n,m); inc(:,1)=h*(z0+1/2*h*invCRM*(deltaest(:,1)-delta(:,1))); delta(:,2)=delta(:,1)+inc(:,1); for k=2:m-1 inc(:,k)=inc(:,k-1)+h*h*invCRM*(deltaest(:,k)-delta(:,k)); delta(:,k+1)=delta(:,k)+inc(:,k); end t=zeros(1,m); for k=1:m t(k)=t0+(k-1)*h; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%% FINAL DE STOERM %%%%%%%%%%%%%%%%%%%%%%%%%%%%
  • 10. GAUSS.M function[x,w]=gauss(x1,x2,n) eps=0.001; m=(n+1)/2; xm=0.5*(x1+x2); xl=0.5*(x2-x1); for i=1:m z=cos(pi*(i-0.25)/(n+0.5)); p1=1; p2=0; for j=1:n p3=p2; p2=p1; p1=((2*j-1)*z*p2-(j-1)*p3)/j; end pp=n*(z*p1-p2)/(z*z-1); z1=z; z=z1-p1/pp; while abs(z-z1)>eps p1=1; p2=0; for j=1:n p3=p2; p2=p1; p1=((2*j-1)*z*p2-(j-1)*p3)/j; end pp=n*(z*p1-p2)/(z*z-1); z1=z; z=z1-p1/pp; end x(i,1)=xm-xl*z; x(n+1-i,1)=xm+xl*z; w(i,1)=2*xl/((1-z*z)*pp*pp); w(n+1-i,1)=w(i); end; PALAHOMER.M % Este script nos va a permitir obtener los datos geometricos necesarios % para el programa homer, de manera que si queremos modificar esos datos % simplemente tendremos que correr previamente este script para generar el % mat file usado en homer. Hacemos esto porq si no hay q modificar ningun % dato de la pala, es decir, estamos analizando una pala de unas % caracteristicas concretas, el programa de analisis homer se ejecutara mas
  • 11. % rapido. % Asi: L=26; % longitud de la viga(m) planosZ=linspace(0,L,L+1); % vector longitud en el que vamos a calcular valores tipo=2; % definimos el tipo de pala que queremos de los modelos a estudio. % Recordar: tipo=1 pala con distribucion de webs desde transicion % tipo=2 pala con webs solo zona aerodinamica % tipo=3 pala sin ninguna distribucion de webs. % Centros de masas de las secciones (consideraremos ademas que coinciden % con los centros de torsion o shear center, por lo que la inercia y la % torsion se producira sobre estos puntos): [xg,yg] = cmasas(planosZ,tipo); % estos valores estan calculados para cada seccion % respecto a unos ejes x,y que pasan por su leading edge. % Momentos de inercia de las secciones: [cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] = palalmlineal(planosZ); [Ixggir,Iyggir,Ixyggir] = mominercia(planosZ,tipo,xg,yg,torsion); % inercia sobre ejes que pasan por xg,yg % Hay que pasar estos valores a las direcciones globales de batimiento y % arrastre: IX=Iyggir; % Direccion general de batimiento de la pala (X). IY=Ixggir; % Direccion general de arrastre de la pala (Y). IXY=-Ixyggir; % Efecto en el cambio del producto de inercia por el sentido de ejes considerado % Sentido de la direccion de batimiento: sentido de la velocidad del viento. % Sentido de la direccion de arrastre: Hacia el extrados del perfil. % Areas de las secciones: variable area [xext,yextraext,yintraext,xint,yextraint,yintraint,area]=secciontotpch ip(planosZ,tipo); % Modulos de torsion: 'modtor' [modtor]=modulotorsion(planosZ); % Una vez obtenidas estas variables generamos un mat-file para el programa % homer que las contenga. Este archivo se llamara geometria: save geometria
  • 12. W1.M function [reponse] = w1(x,xi) global E; global IX; global IY; global IXY; global K; global area; global G; global modtor; global Kt; global CL; global L; global planosZ; x=x*L; xi=xi*L; P=1; puntis=30; if CL==1 if x<xi if x==0 reponse=0; % la viga esta empotrada, su extremo no se mueve. else % metodo Hermite: XH=linspace(0,x,puntis); % XH es la variable de integracion. MfH=P*(xi-XH); %Para no torsion: %I=pchip(planosZ,IY,XH); % BATIMIENTO (FLAP) %I=pchip(planosZ,IX,XH); % ARRASTRE (LAG) %FH=(MfH./(E.*I)).*(x-XH); % Para torsion: Iy=pchip(planosZ,IY,XH); Ix=pchip(planosZ,IX,XH); Ixy=pchip(planosZ,IXY,XH); FH=((MfH.*Ix)./(E.*(Ix.*Iy-Ixy.^2))).*(x-XH); % BATIMIENTO (FLAP) %FH=((MfH.*Iy)./(E.*(Ix.*Iy-Ixy.^2))).*(x-XH); % ARRASTRE (LAG) trapecio=sum(diff(XH).*(FH(1:end-1)+FH(2:end))/2); % añadimos la parte de hermite a la parte ttrapezoidal. h = diff(XH); delta = diff(FH)./h; d = pchipslopes(h,delta); D = sum((h.^2).*(d(2:end)-d(1:end-1))/12); reponse=trapecio-D; %reponse =-(x^2*L^3/(2*E*I)*(x/3-xi)); sin cortante %1 reponse = -(-(L/(K*A*G)*x) + x^2*L^3/(2*E*I)*(x/3- xi)); con %cortante end else if x==0 reponse=0; % la viga esta empotrada, su extremo no se mueve. else
  • 13. % metodo Hermite: XH=linspace(0,xi,puntis); % XH es la variable de integracion. MfH=P*(xi-XH); %Para no torsion: %I=pchip(planosZ,IY,XH); % BATIMIENTO (FLAP) %I=pchip(planosZ,IX,XH); % ARRASTRE (LAG) %FH=(MfH./(E.*I)).*(x-XH); % Para torsion: Iy=pchip(planosZ,IY,XH); Ix=pchip(planosZ,IX,XH); Ixy=pchip(planosZ,IXY,XH); FH=((MfH.*Ix)./(E.*(Ix.*Iy-Ixy.^2))).*(x-XH); % BATIMIENTO (FLAP) %FH=((MfH.*Iy)./(E.*(Ix.*Iy-Ixy.^2))).*(x-XH); % ARRASTRE (LAG) trapecio=sum(diff(XH).*(FH(1:end-1)+FH(2:end))/2); % añadimos la parte de hermite a la parte ttrapezoidal. h = diff(XH); delta = diff(FH)./h; d = pchipslopes(h,delta); D = sum((h.^2).*(d(2:end)-d(1:end-1))/12); reponse=trapecio-D; %reponse = -(xi^2*L^2/(2*E*I)*(xi/3-x)*L); %1 reponse = -(-L/(K*A*G)*xi + xi^2*L^2/(2*E*I)*(xi/3-x)*L); end end end W3.M function [reponse] = w3(x,xi) global E; global IX; global IY; global IXY; global K; global area; global G; global modtor; global Kt; global CL; global L; global planosZ; if CL==1 if x<xi reponse =L^2/(2*Kt)*x^2; else reponse =L^2/(2*Kt)*xi^2; % xi*L/Kt*(xi/2-x)*L; end end
  • 14. FI1.M function [reponse] = fi1(x,xi) global E; global IX; global IY; global IXY; global K; global area; global G; global modtor; global Kt; global CL; global L; global planosZ; if CL==1 if x<xi reponse =x*L/Kt*(xi-x/2)*L; else reponse =xi^2*L^2/(2*Kt); end end FI3.M function [reponse] = fi3(x,xi) global E; global IX; global IY; global IXY; global K; global area; global G; global modtor; global Kt; global CL; global L; global planosZ; x=x*L; xi=xi*L; puntis=30; if CL==1 if x<xi if x==0 reponse=0; % la viga esta empotrada, su extremo no se mueve. else % metodo Hermite: XH=linspace(0,x,puntis); % XH es la variable de integracion. MtH=1; J=pchip(planosZ,modtor,XH); FH=(MtH./(G.*J)); trapecio=sum(diff(XH).*(FH(1:end-1)+FH(2:end))/2);
  • 15. % añadimos la parte de hermite a la parte ttrapezoidal. h = diff(XH); delta = diff(FH)./h; d = pchipslopes(h,delta); D = sum((h.^2).*(d(2:end)-d(1:end-1))/12); reponse=trapecio-D; %reponse =-(x^2*L^3/(2*E*I)*(x/3-xi)); sin cortante %1 reponse = -(-(L/(K*A*G)*x) + x^2*L^3/(2*E*I)*(x/3- xi)); con %cortante end else if x==0 reponse=0; % la viga esta empotrada, su extremo no se mueve. else % metodo Hermite: XH=linspace(0,xi,puntis); % XH es la variable de integracion. MtH=1; J=pchip(planosZ,modtor,XH); FH=(MtH./(G.*J)); trapecio=sum(diff(XH).*(FH(1:end-1)+FH(2:end))/2); % añadimos la parte de hermite a la parte ttrapezoidal. h = diff(XH); delta = diff(FH)./h; d = pchipslopes(h,delta); D = sum((h.^2).*(d(2:end)-d(1:end-1))/12); reponse=trapecio-D; %reponse = -(xi^2*L^2/(2*E*I)*(xi/3-x)*L); %1 reponse = -(-L/(K*A*G)*xi + xi^2*L^2/(2*E*I)*(xi/3-x)*L); end end end
  • 16. CÁLCULO DE FUERZAS FUERZASCICLO.M % Este programa permite calcular las fuerzas aerodinámicas a las que % se encuentra sometida una pala del aerogenerador en su movimiento de % giro , dando lugar a fuerzas ciclicas de frecuencia 1P. giro1=[0:20:360]*pi/180; num=length(giro1); % Programa calculo aerogenerador STRIP THEORY (CIEMAT) % Vamos a intentar calcular la distribucion de fuerzas sobre un rotor % que presenta las siguientes caracteristicas geometricas en sus palas. % Llamada a los programas que contienen la geometria del rotor. rbuje=1; % (m) L=26; % (m) R=L+rbuje; % Radio de 27 m. %x=0.1:0.01:1; x=(7:2:25)*(1/L); % vector de puntos con longitudes adimensionales con la longitud de la pala. puntos=length(x); % numero de puntos en q dividimos la pala elementos=puntos-1; % numero de elementos de pala en que queda dividida la misma. l=x*L; % distribucion de longitudes de pala (distancias medidas desde la base de la pala) r=l+rbuje; % distribución de radios N=3; % número de palas de la aeroturbina (separadas por tanto 120 grados entre si). ro=1.225; % densidad del aire a T=25ºC nu=1.5e-5; % viscosidad cinematica del aire a T=25ºC, nu = viscosidad dinamica/ro (m^2/s) omrpm=25; % velocidad de giro de la maquina en revoluciones por minuto omega=omrpm/(60/(2*pi)); % velocidad de giro de la maquina en rad/s %Vhub=omega*R/lambda; % velocidad del viento a la altura del buje (m/s) Vhub=25; % velocidad del viento a la altura del buje (m/s) lambda=omega*R/Vhub; % cociente entre la velocidad de punta de pala y la velocidad viento en el buje hbuje=50; % altura del buje. Se puede utilizar la expresion hbuje=0.75D +10 m siendo D el diámetro del rotor. [cuerda,torsion,espesorrel]=palalmlineal(l); % variacion lineal de la cuerda. teta=torsion*pi/180; % pasamos torsion q esta en grados a radianes. %%%%%%%%%%% CALCULO DE LOS VALORES ADIMENSIONALES DEL PROBLEMA %%%%%%%%%%
  • 17. %lan=(omega/Vhub)*r; % parametro de avance local de la pala sigma=(N/pi)*cuerda./r; % solidez local de la pala % Consideraremos en este apartado que el viento no es uniforme sino que presenta cortadura vertical. % Cada pala esta afectada por un viento distinto, asi que numeraremos las tres palas con los coeficientes 1,2 y 3. for s=1:num %giro1=0; % angulo de giro en el que se encuentra la pala 1 en el plano del rotor giro2=giro1(s)+(2/3)*pi; % angulo en el que se encuentra la pala 2 (120 grados mas que la 1) giro3=giro1(s)-(2/3)*pi; % angulo en el que se encuentra la pala (120 grados menos que la 1) % Calculo de las palas. h1=hbuje+r.*sin(giro1(s)); % vector de alturas de los elementos de pala de la pala 1. h2=hbuje+r.*sin(giro2); % vector de alturas de los elementos de pala de la pala 2. h3=hbuje+r.*sin(giro3); % vector de alturas de los elementos de pala de la pala 3. v1=viento(h1,Vhub,hbuje); % vector de velocidades de viento incidente en cada tramo de la pala 1. % se ve como se ha llamado a la funcion viento, considerando como valores % de referencia la velocidad q queremos en el buje y la altura del mismo. v2=viento(h2,Vhub,hbuje); % vector de velocidades de viento incidente en cada tramo de la pala 2. v3=viento(h3,Vhub,hbuje); % vector de velocidades de viento incidente en cada tramo de la pala 3. for k=1:puntos; % k = seccion de la pala. La ultima es la anterior a la punta. j=1; a(1)=0; % valor inicial del parametro de velocidad inducida axial aprima(1)=0; % valor inicial del parametro de velocidad inducida tangencial [alfa,cl,cd,cm] = polarespala(l(k)); % Obtenemos los datos de las curvas polares de la seccion. while j<50 FI1(j)=atan((v1(k)/(omega*r(k)))*((1-a(j))/(1+aprima(j)))); FI2(j)=atan((v2(k)/(omega*r(k)))*((1-a(j))/(1+aprima(j)))); FI3(j)=atan((v3(k)/(omega*r(k)))*((1-a(j))/(1+aprima(j)))); alfa1(j)=FI1(j)-teta(k); alfa2(j)=FI2(j)-teta(k); alfa3(j)=FI3(j)-teta(k); alfagrad1(j)=alfa1(j)*180/pi; alfagrad2(j)=alfa2(j)*180/pi; alfagrad3(j)=alfa3(j)*180/pi; coefsust1(j)=pchip(alfa,cl,alfagrad1(j)); coefsust2(j)=pchip(alfa,cl,alfagrad2(j)); coefsust3(j)=pchip(alfa,cl,alfagrad3(j)); %coefresist1(j)= pchip(cl1,cd,coefsust1(j));
  • 18. %coefresist2(j)= pchip(cl1,cd,coefsust2(j)); %coefresist3(j)= pchip(cl1,cd,coefsust3(j)); coefresist1(j)= pchip(alfa,cd,alfagrad1(j)); coefresist2(j)= pchip(alfa,cd,alfagrad2(j)); coefresist3(j)= pchip(alfa,cd,alfagrad3(j)); % Vamos a incluir los efectos de perdida en punta de pala a traves % del factor de Prandtl Fp. Fp1(j)=(2/pi)*acos(exp(-(N*(R-r(k)))/(2*r(k)*sin(FI1(j))))); Fp2(j)=(2/pi)*acos(exp(-(N*(R-r(k)))/(2*r(k)*sin(FI2(j))))); Fp3(j)=(2/pi)*acos(exp(-(N*(R-r(k)))/(2*r(k)*sin(FI3(j))))); % Vamos a ver el resultado segun dos libros diferentes, el de % Arnalte Gomez y el del Ciemat (al primero le daremos el subindice % 1 para los datos calculados y al segundo el valor 2) Y(j)=(1/Vhub^2)*(sigma(k)/(8*N))*((v1(k)^2/(sin(FI1(j)))^2)*(coefsust1 (j)*cos(FI1(j))+coefresist1(j)*sin(FI1(j)))+... (v2(k)^2/(sin(FI2(j)))^2)*(coefsust2(j)*cos(FI2(j))+coefresist2(j)*sin (FI2(j)))+... (v3(k)^2/(sin(FI3(j)))^2)*(coefsust3(j)*cos(FI3(j))+coefresist3(j)*sin (FI3(j)))); Z(j)=(1/Vhub)*(sigma(k)/(8*N))*((v1(k)/(sin(FI1(j))*cos(FI1(j))))*(coe fsust1(j)*sin(FI1(j))-coefresist1(j)*cos(FI1(j)))+... (v2(k)/(sin(FI2(j))*cos(FI2(j))))*(coefsust2(j)*sin(FI2(j))- coefresist2(j)*cos(FI2(j)))+... (v3(k)/(sin(FI3(j))*cos(FI3(j))))*(coefsust3(j)*sin(FI3(j))- coefresist3(j)*cos(FI3(j)))); % Segun libro Arnalte Gomez. % a(j+1)=Y(j)*(1/Fp(j))/(Y(j)*(1/Fp(j))+1); % aprima(j+1)=Z(j)*(1/Fp(j))/(1-Z(j)*(1/Fp(j))); % En este caso como divide directamente por los coeficientes Y y Z % por el factor Fp se dispara mas la solucion de A en la punta de % la pala q en el caso del ciemat, donde la subida no es tan % grande. % Segun libro del ciemat. %%%%%%%%%%%%%%%%%%%%%%%%% MATLAB 5.3 %%%%%%%%%%%%%%%%%%%%%%%%%%% %g=inline('(u.^2)*(constante1+constante2^2)- u*(2*constante1+constante2)+constante1','u','constante1','constante2') ; %constante1=Y(j); %constante2=Fp1(j);
  • 19. %a(j+1)=fzero(g,[0 1],[],0,constante1,constante2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%% MATLAB 7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% constante1=Y(j); constante2=Fp1(j); g=@(u)(u.^2)*(constante1+constante2^2)- u*(2*constante1+constante2)+constante1; a(j+1)=fzero(g,[0 1]); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Zprima(j)=Z(j)*(1-a(j+1))/(Fp1(j)*(1-a(j+1)*Fp1(j))); aprima(j+1)=Zprima(j)/(1-Zprima(j)); j=j+1; end % Guardamos en un nuevo vector los valores resultantes de la % convergencia (ver que j tiene q reducirse en 1 pues sale con un valor % adicional con el que ya no entra en el bucle. A(k)=a(j-1); Aprima(k)=aprima(j-1); fi1(k)=FI1(j-1); fi2(k)=FI2(j-1); fi3(k)=FI3(j-1); figrad1(k)=FI1(j-1)*180/pi; figrad2(k)=FI2(j-1)*180/pi; figrad3(k)=FI3(j-1)*180/pi; alphagrad1(k)=alfagrad1(j-1); alphagrad2(k)=alfagrad2(j-1); alphagrad3(k)=alfagrad3(j-1); Coefsust1(k)=coefsust1(j-1); Coefsust2(k)=coefsust2(j-1); Coefsust3(k)=coefsust3(j-1); Coefresist1(k)=coefresist1(j-1); Coefresist2(k)=coefresist2(j-1); Coefresist3(k)=coefresist3(j-1); Coefmoment1(k)=pchip(alfa,cm,alphagrad1(k)); Coefmoment2(k)=pchip(alfa,cm,alphagrad2(k)); Coefmoment3(k)=pchip(alfa,cm,alphagrad3(k)); y(k)=Y(j-1); z(k)=Z(j-1); fp1(k)=Fp1(j-1); fp2(k)=Fp2(j-1); fp3(k)=Fp3(j-1); end % Nota: hay que darse cuenta que no se han calculado en el bucle los % valores de los datos correspondientes a la punta de la pala. Esto nos permite despues a la hora de calcular la distribucion de fuerzas sobre los elementos de pala de la misma no tener que eliminar el dato de los valores de la punta de pala de los distintos vectores, pues el numero de elementos de pala es igual al numero de puntos en que hemos dividido la pala menos 1. %figure(1) %plot(x(1:k),A,x(1:k),A,'mo');
  • 20. %title('Velocidad inducida axial a') %xlabel('r/R') %ylabel('a') %grid %figure(2) %plot(x(1:k),Aprima,x(1:k),Aprima,'mo'); %title('Velocidad inducida tangencial aprima') %xlabel('r/R') %ylabel('aprima') %grid %%%%%%%% CALCULO DE LAS VARIABLES DIMENSIONALES DE TURBINA %%%%%%%%%%%%% elementos=puntos; W1=((omega*r(1:elementos).*(1+Aprima)).^2+(v1(1:elementos).*(1- A)).^2).^0.5; % velocidad relativa a los perfiles pala 1 %W2=((omega*r(1:elementos).*(1+Aprima)).^2+(v2(1:elementos).*(1- A)).^2).^0.5; % velocidad relativa a los perfiles pala 2 %W3=((omega*r(1:elementos).*(1+Aprima)).^2+(v3(1:elementos).*(1- A)).^2).^0.5; % velocidad relativa a los perfiles pala 3 deltaR=2; % elemento diferencial de radio (concentramos las cargas en distancias de 2m) Cx1=Coefsust1.*cos(fi1)+ Coefresist1.*sin(fi1); % Coeficiente Cx1 %Cx2=Coefsust2.*cos(fi2)+ Coefresist2.*sin(fi2); % Coeficiente Cx2 %Cx3=Coefsust3.*cos(fi3)+ Coefresist3.*sin(fi3); % Coeficiente Cx3 Cy1=Coefsust1.*sin(fi1)- Coefresist1.*cos(fi1); % Coeficiente Cy1 %Cy2=Coefsust2.*sin(fi2)- Coefresist2.*cos(fi2); % Coeficiente Cy2 %Cy3=Coefsust3.*sin(fi3)- Coefresist3.*cos(fi3); % Coeficiente Cy3 % distribución de fuerza axial en las palas (Newton) Fax1(s,:)=0.5*ro*cuerda(1:elementos).*(W1.^2).*Cx1*deltaR; %Fax2=0.5*ro*cuerda(1:elementos).*(W2.^2).*Cx2*deltaR; %Fax3=0.5*ro*cuerda(1:elementos).*(W3.^2).*Cx3*deltaR; % Numero de Reynolds del perfil: Re1=(W1.*cuerda(1:elementos))/nu; %Re2=(W2.*cuerda(1:elementos))/nu; %Re3=(W3.*cuerda(1:elementos))/nu; % distribucion de fuerza tangencial en las palas (Newton) Ftan1(s,:)=0.5*ro*cuerda(1:elementos).*(W1.^2).*Cy1*deltaR; %Ftan2=0.5*ro*cuerda(1:elementos).*(W2.^2).*Cy2*deltaR; %Ftan3=0.5*ro*cuerda(1:elementos).*(W3.^2).*Cy3*deltaR; % distribucion de momentos torsores o de cabeceo en los perfiles (N*m). Mca1(s,:)=0.5*ro*((cuerda(1:elementos)).^2).*(W1.^2).*Coefmoment1*delt aR; %Mca2=0.5*ro*((cuerda(1:elementos)).^2).*(W2.^2).*Coefmoment2*deltaR; %Mca3=0.5*ro*((cuerda(1:elementos)).^2).*(W3.^2).*Coefmoment3*deltaR; % Fuerzas de sustentacion en los perfiles (Newton). L1(s,:)=0.5*ro*cuerda(1:elementos).*(W1.^2).*Coefsust1*deltaR;
  • 21. %L2=0.5*ro*cuerda(1:elementos).*(W2.^2).*Coefsust2*deltaR; %L3=0.5*ro*cuerda(1:elementos).*(W3.^2).*Coefsust3*deltaR; % Fuerzas de resistencia en los perfiles (Newton). D1(s,:)=0.5*ro*cuerda(1:elementos).*(W1.^2).*Coefresist1*deltaR; %D2=0.5*ro*cuerda(1:elementos).*(W2.^2).*Coefresist2*deltaR; %D3=0.5*ro*cuerda(1:elementos).*(W3.^2).*Coefresist3*deltaR; % Distancias entre el centro aerodinamico y el centro de presiones en cada perfil aerodinamico (m). lcp1=-Mca1./L1; %lcp2=-Mca2./L2; %lcp3=-Mca3./L3; end % NOTA: Hemos considerado la velocidad en el buje como una velocidad media % sobre las areas que atraviesa el viento. Esto seguramente puede ser % mejorado calculando una velocidad media sobre el área de paso de forma % mas precisa que esta mera aproximacion. En principio nos vale de momento % asi. % Una vez hecho esto, tenemos el modelo de cargas concentradas para los % distintos angulos de giro de la turbina. Las columnas de las matrices % corresponden a las variaciones de las fuerzas en el tiempo para las % secciones correspondientes (columna 1 = seccion 1 y así). % Si dibujamos la variación de la fuerza sobre una seccion, por ejemplo la % ultima, tenemos: figure(1) plot((giro1)*180/pi,Fax1(:,end),'-o') % Para todas las secciones figure(2) plot((giro1)*180/pi,Fax1,'-o') % Y como funcion del tiempo figure(3) plot((giro1)*60/(omrpm*2*pi),Fax1,'-o') % A continuacion calcularemos la funcion de distribucion de masas. k= 10/4; % relación de espesor entre el núcleo y las pieles del sandwich. dens=(2*1750+144*k)/(2+k); % densidad del sandwich (kg/m^3): fibra de vidrio epoxi + balsa core. tipo=2; g=9.81 % aceleracion de la gravedad (m/s^2) [xextH,yextraextH,yintraextH,xintH,yextraintH,yintraintH,areatot]=secc iontotpchip(l,tipo);
  • 22. % la funcion de distribucion de masas es Funmasa=areatot.*dens; % las fuerzas masicas que analizaremos con el modelo de cargas concentradas % seran: Peso=Funmasa*deltaR*g; % La funcion peso varía en el tiempo su contribucion a la Ftangencial que % mueve el aerogenerador. Esa variacion es de tipo cosenoidal: for f=1:num Ftanpeso(f,:)=-Peso(1:end)*cos(giro1(f)); % hay una seccion menos como en el resto de fuerzas end Ftantot=Ftan1+Ftanpeso; figure(4) plot((giro1)*60/(omrpm*2*pi),Ftantot,'-o') figure(5) plot((giro1)*60/(omrpm*2*pi),Ftantot(:,end),'-o') % Calculamos finalmente el momento torsor definitivo sobre las secciones: [xg,yg] = cmasas(l,tipo); [cuerda,torsion] = palalmlineal(l); for j=1:elementos Mtorsor(:,j)=(xg(j)-0.25*cuerda(j))*(- Ftan1(:,j)*sin(torsion(j)*pi/180)-Fax1(:,j)*cos(torsion(j)*pi/180)) + yg(j)*(- Ftan1(:,j)*cos(torsion(j)*pi/180)+Fax1(:,j)*sin(torsion(j)*pi/180))+(- Mca1(:,j)); end figure(6) plot((giro1)*60/(omrpm*2*pi),Mtorsor,'-o') save cargasoperacion Fax1 Ftan1 Ftanpeso Ftantot Mca1 Mtorsor giro1 omrpm
  • 23. VIENTO.M % Funcion de variacion de la velocidad del aire con la altura. function [v] = viento(h,v0,h0) % La funcion de velocidad del viento depende de los siguientes parámetros: % h: altura (m) a la cual se quiere calcular la velocidad del viento v % (m/s) % v0: velocidad de referencia a la altura de referencia h0 (por ejemplo % velocidad medida por un anemómetro a una determinada altura). % h0: altura de referencia (m) a la que se conoce la velocidad. n=0.2; % coeficiente potencial que depende del tipo de terreno n = [0.13-0.20] en superficie moderadamente rugosa. v=v0*(h/h0).^n; % velocidad del viento a una altura h del suelo. POLARESPALA.M % Archivo que contiene las curvas polares de los perfiles de la pala LM26 % según la geometría definida en palalmlineal. % Procedamos a leer los datos de las secciones analizadas (uso de XFOIL y % AIRFOIL_PREP). function [alfa,Cl,Cd,Cm] = polarespala(l) % alfa es un vector, no una matriz como pueden ser el resto de salidas ya % que siempre consideraremos los mismos valores de alfa para todas las % secciones y todas las curvas (se queda en un vector porque no hace falta % hacer una matriz redundante con todas las filas iguales) L=26; % 26m de longitud de pala longit=length(l); for i=1:longit if l(i)<0 | l(i)>L error('introduzca un/unos valor/es de longitud entre L=0 y L=26 (m)') end end % sección L=3m; CILINDRO (consideramos CL=0,CM=0,CD=1.17= constante) CL3=0; CM3=0; CD3=1.17; % seccion L=6m: matrix6=XLSREAD('perfil6m.xls','tableExtrap','H15:K87'); alpha6=matrix6(:,1);
  • 24. CL6=matrix6(:,2); CD6=matrix6(:,3); CM6=matrix6(:,4); % seccion L=7m matrix7=XLSREAD('perfil7m.xls','tableExtrap','H15:K82'); alpha7=matrix7(:,1); CL7=matrix7(:,2); CD7=matrix7(:,3); CM7=matrix7(:,4); % seccion L=9m matrix9=XLSREAD('perfil9m.xls','tableExtrap','H15:K82'); alpha9=matrix9(:,1); CL9=matrix9(:,2); CD9=matrix9(:,3); CM9=matrix9(:,4); % seccion L=11m matrix11=XLSREAD('perfil11m.xls','tableExtrap','H15:K82'); alpha11=matrix11(:,1); CL11=matrix11(:,2); CD11=matrix11(:,3); CM11=matrix11(:,4); % seccion L=13m matrix13=XLSREAD('perfil13m.xls','tableExtrap','H15:K82'); alpha13=matrix13(:,1); CL13=matrix13(:,2); CD13=matrix13(:,3); CM13=matrix13(:,4); % seccion L=15m matrix15=XLSREAD('perfil15m.xls','tableExtrap','H15:K82'); alpha15=matrix15(:,1); CL15=matrix15(:,2); CD15=matrix15(:,3); CM15=matrix15(:,4); % seccion L=17m matrix17=XLSREAD('perfil17m.xls','tableExtrap','H15:K82'); alpha17=matrix17(:,1); CL17=matrix17(:,2); CD17=matrix17(:,3); CM17=matrix17(:,4); % seccion L=19m matrix19=XLSREAD('perfil19m.xls','tableExtrap','H15:K82'); alpha19=matrix19(:,1); CL19=matrix19(:,2); CD19=matrix19(:,3); CM19=matrix19(:,4); % seccion L=21m
  • 25. matrix21=XLSREAD('perfil21m.xls','tableExtrap','H15:K82'); alpha21=matrix21(:,1); CL21=matrix21(:,2); CD21=matrix21(:,3); CM21=matrix21(:,4); % seccion L=23m matrix23=XLSREAD('perfil23m.xls','tableExtrap','H15:K82'); alpha23=matrix23(:,1); CL23=matrix23(:,2); CD23=matrix23(:,3); CM23=matrix23(:,4); % seccion L=25m matrix25=XLSREAD('perfil25m.xls','tableExtrap','H15:K82'); alpha25=matrix25(:,1); CL25=matrix25(:,2); CD25=matrix25(:,3); CM25=matrix25(:,4); % seccion L=26m matrix26=XLSREAD('perfil26m.xls','tableExtrap','H15:K87'); alpha26=matrix6(:,1); CL26=matrix26(:,2); CD26=matrix26(:,3); CM26=matrix26(:,4); % Definamos los valores del angulo de ataque que queremos obtener: alfa=[-180:10:-20 -19:1:30 35:5:60 70:10:180]; % Con esos valores de alfa, definamos los valores de CD,CL,CM de las % secciones criticas, para que todas tengan el mismo numero de puntos y % para los mismos alfas. % seccion L=3m: Cl3=zeros(1,length(alfa)); Cd3=1.17*ones(1,length(alfa)); Cm3=zeros(1,length(alfa)); % seccion L=6m: Cl6=pchip(alpha6,CL6,alfa); Cd6=pchip(alpha6,CD6,alfa); Cm6=pchip(alpha6,CM6,alfa); % seccion L=7m Cl7=pchip(alpha7,CL7,alfa); Cd7=pchip(alpha7,CD7,alfa); Cm7=pchip(alpha7,CM7,alfa); % seccion L=9m Cl9=pchip(alpha9,CL9,alfa); Cd9=pchip(alpha9,CD9,alfa); Cm9=pchip(alpha9,CM9,alfa); % seccion L=11m Cl11=pchip(alpha11,CL11,alfa); Cd11=pchip(alpha11,CD11,alfa); Cm11=pchip(alpha11,CM11,alfa);
  • 26. % seccion L=13m Cl13=pchip(alpha13,CL13,alfa); Cd13=pchip(alpha13,CD13,alfa); Cm13=pchip(alpha13,CM13,alfa); % seccion L=15m Cl15=pchip(alpha15,CL15,alfa); Cd15=pchip(alpha15,CD15,alfa); Cm15=pchip(alpha15,CM15,alfa); % seccion L=17m Cl17=pchip(alpha17,CL17,alfa); Cd17=pchip(alpha17,CD17,alfa); Cm17=pchip(alpha17,CM17,alfa); % seccion L=19m Cl19=pchip(alpha19,CL19,alfa); Cd19=pchip(alpha19,CD19,alfa); Cm19=pchip(alpha19,CM19,alfa); % seccion L=21m Cl21=pchip(alpha21,CL21,alfa); Cd21=pchip(alpha21,CD21,alfa); Cm21=pchip(alpha21,CM21,alfa); % seccion L=23m Cl23=pchip(alpha23,CL23,alfa); Cd23=pchip(alpha23,CD23,alfa); Cm23=pchip(alpha23,CM23,alfa); % seccion L=25m Cl25=pchip(alpha25,CL25,alfa); Cd25=pchip(alpha25,CD25,alfa); Cm25=pchip(alpha25,CM25,alfa); % seccion L=26m Cl26=pchip(alpha26,CL26,alfa); Cd26=pchip(alpha26,CD26,alfa); Cm26=pchip(alpha26,CM26,alfa); for j=1:longit if l(j)<=3 Cl(j,:)=Cl3; Cm(j,:)=Cm3; Cd(j,:)=Cd3; elseif l(j)<=6 % interpolamos entre la seccion L=3 y L=6 % definimos el peso: W W=((l(j)-3)/(6-3)); Cd(j,:)=W*Cd6 + (1-W)*Cd3; Cl(j,:)=W*Cl6 + (1-W)*Cl3; Cm(j,:)=W*Cm6 + (1-W)*Cm3; elseif l(j)<=7 % interpolamos entre la seccion L=6 y L=7 % definimos el peso: W W=((l(j)-6)/(7-6)); Cd(j,:)=W*Cd7 + (1-W)*Cd6; Cl(j,:)=W*Cl7 + (1-W)*Cl6; Cm(j,:)=W*Cm7 + (1-W)*Cm6; elseif l(j)<=9 % interpolamos entre la seccion L=7 y L=9 % definimos el peso: W W=((l(j)-7)/(9-7)); Cd(j,:)=W*Cd9 + (1-W)*Cd7; Cl(j,:)=W*Cl9 + (1-W)*Cl7; Cm(j,:)=W*Cm9 + (1-W)*Cm7; elseif l(j)<=11 % interpolamos entre la seccion L=9 y L=11
  • 27. % definimos el peso: W W=((l(j)-9)/(11-9)); Cd(j,:)=W*Cd11 + (1-W)*Cd9; Cl(j,:)=W*Cl11 + (1-W)*Cl9; Cm(j,:)=W*Cm11 + (1-W)*Cm9; elseif l(j)<=13 % interpolamos entre la seccion L=11 y L=13 % definimos el peso: W W=((l(j)-11)/(13-11)); Cd(j,:)=W*Cd13 + (1-W)*Cd11; Cl(j,:)=W*Cl13 + (1-W)*Cl11; Cm(j,:)=W*Cm13 + (1-W)*Cm11; elseif l(j)<=15 % interpolamos entre la seccion L=13 y L=15 % definimos el peso: W W=((l(j)-13)/(15-13)); Cd(j,:)=W*Cd15 + (1-W)*Cd13; Cl(j,:)=W*Cl15 + (1-W)*Cl13; Cm(j,:)=W*Cm15 + (1-W)*Cm13; elseif l(j)<=17 % interpolamos entre la seccion L=15 y L=17 % definimos el peso: W W=((l(j)-15)/(17-15)); Cd(j,:)=W*Cd17 + (1-W)*Cd15; Cl(j,:)=W*Cl17 + (1-W)*Cl15; Cm(j,:)=W*Cm17 + (1-W)*Cm15; elseif l(j)<=19 % interpolamos entre la seccion L=17 y L=19 % definimos el peso: W W=((l(j)-17)/(19-17)); Cd(j,:)=W*Cd19 + (1-W)*Cd17; Cl(j,:)=W*Cl19 + (1-W)*Cl17; Cm(j,:)=W*Cm19 + (1-W)*Cm17; elseif l(j)<=21 % interpolamos entre la seccion L=19 y L=21 % definimos el peso: W W=((l(j)-19)/(21-19)); Cd(j,:)=W*Cd21 + (1-W)*Cd19; Cl(j,:)=W*Cl21 + (1-W)*Cl19; Cm(j,:)=W*Cm21 + (1-W)*Cm19; elseif l(j)<=23 % interpolamos entre la seccion L=21 y L=23 % definimos el peso: W W=((l(j)-21)/(23-21)); Cd(j,:)=W*Cd23 + (1-W)*Cd21; Cl(j,:)=W*Cl23 + (1-W)*Cl21; Cm(j,:)=W*Cm23 + (1-W)*Cm21; elseif l(j)<=25 % interpolamos entre la seccion L=23 y L=25 % definimos el peso: W W=((l(j)-23)/(25-23)); Cd(j,:)=W*Cd25 + (1-W)*Cd23; Cl(j,:)=W*Cl25 + (1-W)*Cl23; Cm(j,:)=W*Cm25 + (1-W)*Cm23; elseif l(j)<=26 % interpolamos entre la seccion L=25 y L=26 % definimos el peso: W W=((l(j)-25)/(26-25)); Cd(j,:)=W*Cd26 + (1-W)*Cd25; Cl(j,:)=W*Cl26 + (1-W)*Cl25; Cm(j,:)=W*Cm26 + (1-W)*Cm25;
  • 28. end end RAFAGA_PARKED.M % Programa de determinación de las fuerzas a las que esta sometida la pala con el rotor parada bajo condiciones extremas de carga % Llamada a los programas que contienen la geometria del rotor. %palalm % programa q tiene la geometria de pala LM 26 (R = 26m) %rotor17 % programa q tiene la geometria de una pala de rotor 17m (R = 8.5m) rbuje=1; % (m) L=26; % (m) R=L+rbuje; % Radio de 27 m. %tetarad=tetagrad*pi/180; % distribución de torsion (radianes) %x=0.2:0.01:1; %x=0.1:0.01:1; x=(7:2:25)*(1/L); % vector de puntos con longitudes adimensionales con la longitud de la pala. puntos=length(x); % numero de puntos en q dividimos la pala elementos=puntos-1; % numero de elementos de pala en que queda dividida la misma. l=x*L; % distribucion de longitudes de pala (distancias medidas desde la base de la pala) r=l+rbuje; % distribución de radios %lambda=6; % cociente entre la velocidad de punta de pala y la velocidad viento en el buje N=3; % número de palas de la aeroturbina (separadas por tanto 120 grados entre si). ro=1.225; % densidad del aire a T=25ºC nu=1.5e-5; % viscosidad cinematica del aire a T=25ºC, nu = viscosidad dinamica/ro (m^2/s) %Vhub=11; % velocidad del viento en m/s en el buje del aerogenerador %omega=lambda*Vhub/R; % velocidad de giro de la aeroturbina (rad/s) %omrpm=omega*(60/(2*pi)); % velocidad giro en rpm %omrpm=25; % velocidad de giro de la maquina en revoluciones por minuto %omega=omrpm/(60/(2*pi)); % velocidad de giro de la maquina en rad/s %Vhub=omega*R/lambda; % velocidad del viento a la altura del buje (m/s) Vhub=70; %lambda=omega*R/Vhub; hbuje=50; % altura del buje. Se puede utilizar la expresion hbuje=0.75D +10 m siendo D el diámetro del rotor. %cuerda=spline(rc,c,r); % valores de cuerda para cada valor del vector x %teta=spline(rt,tetarad,r); % valores de angulo de torsion para valores de x (radianes) [cuerda,torsion,espesorrel]=palalmlineal(l); % variacion lineal de la cuerda. %[cuerda,torsion,espesorrel]=palalmpotencial(l); % variacion potencial de la cuerda.
  • 29. teta=torsion*pi/180; % pasamos torsion q esta en grados a radianes. giro1=pi/2; % angulo de giro en el que se encuentra la pala 1 en el plano del rotor h1=hbuje+r.*sin(giro1); % vector de alturas de los elementos de pala de la pala 1. [alfa,cl,cd,cm] = polarespala(l); % Obtenemos los datos de las curvas polares de las secciones. alfagrad=90-torsion; % angulos de ataque de las secciones for j=1:puntos coefsust(j)=pchip(alfa,cl(j,:),alfagrad(j)); coefresist(j)=pchip(alfa,cd(j,:),alfagrad(j)); coefmoment(j)=pchip(alfa,cm(j,:),alfagrad(j)); end deltaR=2; % elemento diferencial de radio t0=3; % tiempo de duración del análisis t=0:0.01:t0; % vector de tiempos long=length(t); I=0.14; % factor de intensidad de la turbulencia omega=10; % frecuencia de las turbulencias en rad/s tipo=2; [xg,yg] = cmasas(l,tipo); %[cuerda,torsion] = palalmlineal(l); for j=1:long v1=(Vhub*(h1/hbuje).^0.11)*(1-I*cos(omega*t(j))); % vector de velocidades de viento incidente en cada tramo de la pala 1. % distribución de fuerza axial en las palas (Newton) Fax(j,:)=0.5*ro*cuerda(1:puntos).*(v1.^2).*coefresist*deltaR; % Numero de Reynolds del perfil: Re(j,:)=(v1.*cuerda(1:puntos))/nu; % distribucion de fuerza tangencial en las palas (Newton) Ftan(j,:)=0.5*ro*cuerda(1:puntos).*(v1.^2).*coefsust*deltaR; % distribucion de momentos torsores o de cabeceo en los perfiles (N*m). Mca(j,:)=0.5*ro*((cuerda(1:puntos)).^2).*(v1.^2).*coefmoment*deltaR;
  • 30. Mtorsor(j,:)=(xg-0.25*cuerda).*(-Ftan(j,:).*sin(torsion*pi/180)- Fax(j,:).*cos(torsion*pi/180)) + yg.*(- Ftan(j,:).*cos(torsion*pi/180)+Fax(j,:).*sin(torsion*pi/180))+(- Mca(j,:)); end % Fuerza axial en toda la pala en un determinado tiempo plot(l,Fax(j,:),'.-') grid % Fuerza axial en las secciones en funcion del tiempo figure(2) plot(t,Fax,'.-') grid save cargaextrema Fax Ftan Mca Mtorsor t t0
  • 31. GEOMETRÍA Y PARÁMETROS ESTRUCTURALES NACA44XX.M % Funcion q nos determinara la forma de un perfil naca 44xx de cuerda 1. function [Xu,Yu,Xl,Yl] = naca44xx(t) % Variables de entrada: % t = espesor por unidad de cuerda del perfil (valores entre 0 y 1) % Variables de salida: % Xu,Yu (upper) : determinan la forma del extrados del perfil (zona % superior) % Xl,Yl (lower) : determinan la forma del intrados del perfil (zona % inferior) % Perfiles NACA serie 4. % NACA cuatro cifras: % - La primera cifra indica la máxima flecha de la línea media en % con respecto a la cuerda. % Esta cifra define el parámetro m. % - La segunda cifra expresa la posición de la máxima flecha de la línea media con respecto % al borde de ataque, en tanto por diez respecto de la cuerda. Parámetro p. % - Por último las dos últimas cifras indican el espesor máximo del perfil en % con respecto % a la cuerda. Parámetro t. % De esta forma un perfil NACA 2415 presenta un espesor máximo de 15% relativo a cuerda (t=grosor/c=0.15) con % un valor de flecha máxima de la línea media del 2% relativo a la cuerda (m=Yc/c=0.02) situado a una % distancia del 40% de la cuerda desde el borde de ataque del perfil (p=posicion Yc/c=0.4). % A continuación escribiremos las ecuaciones que nos permitan determinar la geometria de este % tipo de perfiles. En función de los valores otorgados a m,p y t obtendremos un perfil u % otro de la mencionada serie. % A modo de ejemplo realizaremos el estudio del perfil NACA 4415. m=0.04; p=0.4; %[a,b]=TEXTREAD('extrados4415.txt','%f%f','headerlines',1); %x=a(end:-1:1)'; x=0:0.01:1; % Vector de puntos de la cuerda (cuerda unitaria)
  • 32. % Línea de curvatura media: k=0; for s=x k=k+1; if s<=p Yc(k)=(m/p^2)*(2*p*s-s^2); DerYc(k)=(m/p^2)*(2*p-2*s); teta(k)=atan(DerYc(k)); else Yc(k)=(m/(1-p)^2)*((1-2*p)+2*p*s-s^2); DerYc(k)=(m/(1-p)^2)*(2*p-2*s); teta(k)=atan(DerYc(k)); end end % Distribución de espesor: Yt=(t/0.2)*(0.2969*x.^0.5-0.1260*x-0.3516*x.^2+0.2843*x.^3- 0.1015*x.^4); % Extradós del perfil(parte superior): Xu=x-Yt.*sin(teta); Yu=Yc+Yt.*cos(teta); % Intradós del perfil(parte inferior): Xl=x+Yt.*sin(teta); Yl=Yc-Yt.*cos(teta); PALALMLINEAL.M % Funcion que nos determina la geometria de la pala a una distancia l. function [cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] = palalmlineal(l) % Variables de entrada: Longitud en el que se quiere determinar la cuerda del % perfil (m). (valores comprendidos entre 0 y L = 26m.) % Variables de salida: % - Cuerda del perfil para una determinada distancia (m). % - Angulo de torsion o encastre (grados) del perfil para una longitud l. % - Espesor relativo del perfil en tanto por uno de la cuerda (m) para % una longitud dada l (m). % - Offset sobre el eje X de cada seccion, es decir, punto de % interseccion de la seccion con el eje X de envergadura de pala (en % tanto pot uno respecto de la cuerda de cada seccion) % - Posicion en tanto por uno de la cuerda que ocupa la web1 en los % distintos perfiles % - Posicion en tanto por uno de la cuerda que ocupa la web2 en los % distintos perfiles % - Distribucion de grosor de material a lo largo de la envergadura de
  • 33. % la pala (m). L=26; % 26m de longitud de pala lon=length(l); for i=1:lon if l(i)<0 | l(i)>L error('introduzca un/unos valor/es de longitud entre L=0 y L=26 (m)') end end % Vamos a generar la siguiente distribucion de cuerdas. También % estableceremos las distribuciones de xoffset (como se coloca cada seccion % perpendicularmente al eje X de la pala, punto de corte de la seccion con % el eje X), la distribucion de las webs(listones perpendiculares q unen el % extrados e intrados del perfil para otorgarle mayor consistencia a la % seccion) y el espesor de material en cada seccion. relaspecto=0.02/0.15; % esta es la relacion grosor material/grosor del perfil. %espe=0.02; % tanto por uno respecto de la cuerda que quiero de espesor en las secciones. %C1=2.3; % cuerda maxima de la pala (m) n=-2; % exponente de la funcion de ajuste en las webs.(mas abajo indicado) en el tramo < lc1 % Si n=1 ===> Funcion lineal % Si n distinto de 1 ===> Funcion potencial % * n=0.5 ==> funcion raiz cuadrada sqrt(x) % * n=-1 ==> funcion 1/x % * n=-0.5 ==> funcion 1/sqrt(x) % * n=-2 ==> funcion 1/(x^2) ................... ajustar a la q mas nos guste. % Definimos los valores en las zonas clave de la pala: % Fin de la raiz: lc0=3; % longitud donde finaliza la zona que es igual q la raiz (m) C0=1.5; % cuerda en la raiz (m) xoffsraiz=0.5*C0; % offset de la raiz (m) dweb1raiz=(relaspecto/2)*C0; % distancia desde el borde de ataque hasta la linea media de web1 en la raiz (m) web1raiz=abs(xoffsraiz-dweb1raiz); % distancia absoluta de la linea media de la web1 al eje X longitudinal de la pala (m) dweb2raiz=C0-(relaspecto/2)*C0; % distancia desde el borde de ataque hasta la linea media de web2 en la raiz (m) web2raiz=abs(xoffsraiz-dweb2raiz); % distancia absoluta de la linea media de la web2 al eje X longitudinal de la pala (m) % Perfil de cuerda maxima de la pala lc1=6; % longitud del perfil de cuerda maxima (m) C1=2.3; % cuerda maxima de la pala (m) xoffsmax=0.325*C1; % offset en el perfil de cuerda maxima (m) dweb1max=0.15*C1; % distancia desde el borde de ataque hasta la linea media de web1 en el perfil de cuerda maxima (m) web1max=abs(xoffsmax-dweb1max); % distancia absoluta de la linea media de la web1 al eje X longitudinal de la pala (m)
  • 34. dweb2max=0.5*C1; % distancia desde el borde de ataque hasta la linea media de web2 en el perfil de cuerda maxima (m) web2max=abs(xoffsmax-dweb2max); % distancia absoluta de la linea media de la web2 al eje X longitudinal de la pala (m) % Punta de la pala lc2=L; % longitud de la punta de la pala (m) C2=0.525; % cuerda en la punta de pala (m) xoffspunta=0.3*C2; % offset en el perfil de cuerda maxima (m) dweb1punta=0.15*C2; % distancia desde el borde de ataque hasta la linea media de web1 en el perfil de punta de pala (m) web1punta=abs(xoffspunta-dweb1punta); % distancia absoluta de la linea media de la web1 al eje X longitudinal de la pala (m) dweb2punta=0.5*C2; % distancia desde el borde de ataque hasta la linea media de web2 en el perfil de punta de pala (m) web2punta=abs(xoffspunta-dweb2punta); % distancia absoluta de la linea media de la web2 al eje X longitudinal de la pala (m) for j=1:lon if l(j)<lc0 cuerda(j)=C0; xoffset(j)=xoffsraiz/cuerda(j); % no hay webs en este tramo, de forma q vamos a hacer q estan % fusionadas con el espesor de la raiz, para obtener todos los % vectores de la misma longitud. dejeweb1(j)=web1raiz; % distancia de la web1 al eje X web1(j)=(xoffset(j)*cuerda(j)-dejeweb1(j))/cuerda(j); dejeweb2(j)=web2raiz; % distancia de la web2 al eje X web2(j)=(xoffset(j)*cuerda(j)+dejeweb2(j))/cuerda(j); %grosmat(j)=espe*C1; % grosor de material en este tramo (2% de la cuerda maxima) elseif l(j)< lc1 cuerda(j)=C0+((C1-C0)/(lc1-lc0))*(l(j)-lc0); xoffset(j)=(xoffsraiz+((xoffsmax-xoffsraiz)/(lc1-lc0))*(l(j)- lc0))/cuerda(j); dejeweb1(j)=web1raiz+((web1max-web1raiz)/(lc1^n- lc0^n))*(l(j)^n-lc0^n); % variacion potencial de la dist. al eje de la web1 web1(j)=(xoffset(j)*cuerda(j)-dejeweb1(j))/cuerda(j); dejeweb2(j)=web2raiz+((web2max-web2raiz)/(lc1^n- lc0^n))*(l(j)^n-lc0^n); % variacion potencial de la dist. al eje de la web2 web2(j)=(xoffset(j)*cuerda(j)+dejeweb2(j))/cuerda(j); %dejeweb1(j)=web1raiz+((web1max-web1raiz)/(lc1-lc0))*(l(j)- lc0); % variacion lineal de la dist. al eje de la web1 %dejeweb2(j)=web2raiz+((web2max-web2raiz)/(lc1-lc0))*(l(j)- lc0); % variacion lineal de la dist. al eje de la web2 %grosmat(j)=espe*C1;% grosor de material en este tramo (2% de la cuerda maxima) else cuerda(j)=C1+((C1-C2)/(lc1-lc2))*(l(j)-lc1); xoffset(j)=(xoffsmax+((xoffsmax-xoffspunta)/(lc1-lc2))*(l(j)- lc1))/cuerda(j); dejeweb1(j)=web1max+((web1max-web1punta)/(lc1-lc2))*(l(j)- lc1); % variacion lineal de la dist. al eje de la web1 web1(j)=(xoffset(j)*cuerda(j)-dejeweb1(j))/cuerda(j); dejeweb2(j)=web2max+((web2max-web2punta)/(lc1-lc2))*(l(j)- lc1); % variacion lineal de la dist. al eje de la web2 web2(j)=(xoffset(j)*cuerda(j)+dejeweb2(j))/cuerda(j);
  • 35. %grosmat(j)=espe*cuerda(j);% grosor de material en este tramo (2% de la cuerda) end end % A continuacion obtendremos el angulo de torsion de la misma forma que para la pala lm 26 % DISTRIBUCION ANGULO DE TORSION DE LA PALA (grados): datos obtenidos libro % 'Sistemas eólicos de produccion de energia electrica'. lt=(0:0.5:L); % longitudes para los angulos de torsion (m) tetagrad=[0 0 0 0 0 0 0 8 10 11.5 12.75 14 15 14 12.75 12 11 10 9 8.5 8 7.5 7 6.5 6.25 6 5.5 5.25 5 4.5 4.25 4 3.5 3.25 3 2.75 2.5 2.25 2 1.75 1.5 1.25 1 0.9 0.8 0.7 0.5 0.25 0.2 0.1 0 0 0]; long=length(lt); %definimos las coordenadas de los puntos x,y por los que hacemos pasar la %funcion: x1=lc1; x4=lt(long); x2=12; x3=20; y1=tetagrad(x1/0.5+1); y4=tetagrad(long); y2=tetagrad(x2/0.5+1); y3=tetagrad(x3/0.5+1); %potencias de la funcion: pot=6; pot2=-1.5; MM=[x1^pot x1^pot2 x1 1;x2^pot x2^pot2 x2 1;x3^pot x3^pot2 x3 1;x4^pot x4^pot2 x4 1]; q=[y1 y2 y3 y4]'; solu=MMq; %la funcion es del tipo: %Fun=solu(1)*l.^pot + solu(2)*l.^pot2 + solu(3)*l + solu(4); for j=1:lon if l(j)<=3 torsion(j)=0; elseif (l(j)>3) & (l(j)<6) torsion(j)=spline(lt,tetagrad,l(j)); % valores de angulo de torsion para valores de l (grados) else torsion(j)=solu(1)*l(j).^pot + solu(2)*l(j).^pot2 + solu(3)*l(j) + solu(4); end end % A continuacion representamos el espesor maximo relativo a la cuerda para la pala lm 26 % DISTRIBUCION ESPESOR RELATIVO DE LA PALA (tanto por uno DE LA CUERDA):datos obtenidos libro % 'Sistemas eólicos de produccion de energia electrica'. le=lt; % longitudes de las secciones a estudio (m) esperel=[1 1 1 1 1 1 1 0.875 0.775 0.7 0.62 0.55 0.5 0.46 0.44 0.41 0.39 0.375 0.35 0.33 0.315 0.3 0.29 0.28 0.27 0.26 0.25 0.25- (0.05/8)*(1:8) 0.2-(0.05/18)*(1:18)]; %definimos las coordenadas de los puntos x,y por los que hacemos pasar la %funcion:
  • 36. xx1=3; xx4=le(long); xx2=7 ; xx3=20; % si ponemos xx1=6 ==>xx2=10; si xx1=3 ==> xx2=7 yy1=esperel(xx1/0.5+1); yy4=esperel(long); yy2=esperel(xx2/0.5+1); yy3=esperel(xx3/0.5+1); %potencias de la funcion: po=0.5; po2=-0.5; Mat=[xx1^po xx1^po2 xx1 1;xx2^po xx2^po2 xx2 1;xx3^po xx3^po2 xx3 1;xx4^po xx4^po2 xx4 1]; qu=[yy1 yy2 yy3 yy4]'; so=Matqu; %la funcion es del tipo: %Fun2=so(1)*l.^po + so(2)*l.^po2 + so(3)*l + so(4); for j=1:lon if l(j)<=3 espesorrel(j)=1; else espesorrel(j)=so(1)*l(j).^po + so(2)*l(j).^po2 + so(3)*l(j) + so(4); % valores del espesor maximo relativo a la cuerda del perfil para valores de l (adim) end end % finalmente definiremos la distribucion de grosores GROSMAT %relaspecto=0.02/0.15; % esta es la relacion grosor material/grosor del perfil. for j=1:lon if l(j)<lc0 grosmat(j)=relaspecto*espesorrel(j)*cuerda(j); elseif l(j)< lc1 grosmat(j)=relaspecto*espesorrel(j)*cuerda(j); else grosmat(j)=relaspecto*espesorrel(j)*cuerda(j); end end grosmat=0.95*grosmat; SECCIONEXTPCHIP.M % La siguiente funcion nos va a dar la seccion exterior de los perfiles de % la pala a estudio. function [x,yextra,yintra,area]=seccionextpchip(planosZ) % Variables de entrada: vector con los planos Z donde quiero la seccion % Variables salida: % x: Matriz cuyas filas son las coordenadas de las x extrados para % cada plano de corte Z % x=xextra=xintra % yextra: Matriz cuyas filas son las coordenadas de las y extrados para % cada plano de corte Z
  • 37. % yintra: Matriz cuyas filas son las coordenadas de las y intrados para % cada plano de corte Z % Este programa nos generara las secciones de cualquier zona de la pala. La % pala la podemos dividir en tres partes diferenciadas: 1- la zona de % encastre q es de seccion circular, 2- zona de transicion de la zona % circular a la zona aerodinamica de perfiles, 3- zona puramente % aerodinamica compuesta por perfiles aerodinamicos hasta la punta de pala. % Para ello definiremos las dos secciones entre las q se encuentra la % transicion descrita (seccion circular y perfil de cuerda maxima) mediante % el mismo numero de puntos, uniremos los puntos de una seccion con los de % la otra (dos a dos) para obtener rectas en tres dimensiones de las que % obtendremos sus ecuaciones, y al cortar por planos perpendiculares al de % envergadura o longitud de la pala (X) obtendremos puntos de las secciones % interiores de transicion. for i=planosZ if i<0 | i>26 error('introduzca un/unos valor/es de distancia del plano entre L=0 y L=26 (m)') end end % Secciones límite en la zona de transicion: % 1- Seccion circular:(cir) lcir=3; % distancia a la que se encuentra la seccion 1 de la raiz de la pala (m) % llamamos a la funcion que tiene la geometria de la pala [cuerdacir,torsioncir,espesorrelcir,xoffsetcir,web1cir,web2cir,grosmat cir] = palalmlineal(lcir); rcir=cuerdacir/2; % radio de la seccion % como ejes de las secciones definimos los ejes x,y como eje x en % direccion de la cuerda y eje y el perpendicular. npuntos=101; xcir=linspace(-rcir,rcir,npuntos); % generamos 101 puntos equiespaciados ==> dividimos en 100 partes el diametro. ycirsup=(rcir^2-xcir.^2).^0.5; % parte superior de la seccion ycirinf=-((rcir^2-xcir.^2).^0.5); % parte inferior de la seccion % 2- Seccion perfil de cuerda maxima:(per) lper=6; % distancia a la que se encuentra el perfil de cuerda maxima de la raiz de la pala (m) % llamamos a la funcion que tiene la geometria de la pala [cuerdaper,torsionper,espesorrelper,xoffsetper,web1per,web2per,grosmat per] = palalmlineal(lper); % Generamos el perfil de cuerda unidad y espesor espesorrelper [Xuunit,Yuunit,Xlunit,Ylunit] = naca44xx(espesorrelper); % Multiplicamos estos valores por la cuerda del perfil Xuper=Xuunit*cuerdaper;
  • 38. Yuper=Yuunit*cuerdaper; Xlper=Xlunit*cuerdaper; Ylper=Ylunit*cuerdaper; % Definimos el vector de puntos a lo largo de la cuerda: xper0=linspace(0,cuerdaper,npuntos); % Obtenemos los puntos correspondientes a este vector en el extrados e intrados del % perfil mediante un ajuste con los polinomios cubicos a trozos % (pchip en principio mejor que con spline): ypersup=pchip(Xuper,Yuper,xper0); yperinf=pchip(Xlper,Ylper,xper0); % La altura o coordenada y de los puntos no varia al aplicar el offset % del perfil. Solo varia la coordenada x: xper=xper0-xoffsetper*cuerdaper; % Ya tenemos los puntos que definen las secciones limite. % Nota : hemos realizado el ajuste de las funciones antes del offset. % A continuacion estableceremos las rectas que unen los puntos de las % secciones dos a dos, para poder determinar los puntos de interseccion de % esas rectas con planos perpendiculares al eje longitudinal de la pala, % definiendo asi las secciones en los distintos planos. % Una recta en 3D entre 2 puntos A(x1,y1,z1) y B(x2,y2,z2) se puede definir % de la siguiente forma: % y=a*x+b donde a=pendientexy=v2/v1; b=o.origenxy=y1-(v2/v1)*x1 % z=c*x+d donde c=pendientexz=v3/v1; b=o.origenxz=z1-(v3/v1)*x1 % siendo v=vector director=(v1,v2,v3)=(x2-x1,y2- y1,z2-z1) % De esta forma introduciendo un valor para x, se obtiene y(x) y z(x). % Tomamos como ejes positivos de la pala los mencionados anteriormente, x direccion % cordal de las secciones y sentido borde de salida del perfil, y % perpendicular a x con sentido hacia el extrados del perfil, y z direccion % perpendicular a las secciones (longitudinal a la pala) hacia la punta de % pala. % Rectas del extrados: % Generamos los vectores directores de las rectas: v=AB=B(x,y,z)- A(x,y,z) % siendo B los puntos del perfil y A los de la seccion mas proxima a la % raiz. vx_ext=(xper-xcir); vy_ext=(ypersup-ycirsup); vz_ext=(lper-lcir)*ones(1,length(vx_ext)); % pendientes pend_xy_ext=vy_ext./vx_ext; pend_xz_ext=vz_ext./vx_ext; % ordenadas origen oo_xy_ext=ycirsup-pend_xy_ext.*xcir; oo_xz_ext=lcir*ones(1,length(vx_ext))-pend_xz_ext.*xcir;
  • 39. % Rectas del intrados: % Generamos los vectores directores de las rectas: v=AB=B(x,y,z)- A(x,y,z) % siendo B los puntos del perfil y A los de la seccion mas proxima a la % raiz. vx_int=(xper-xcir); vy_int=(yperinf-ycirinf); vz_int=(lper-lcir)*ones(1,length(vx_int)); % pendientes pend_xy_int=vy_int./vx_int; pend_xz_int=vz_int./vx_int; % ordenadas origen oo_xy_int=ycirinf-pend_xy_int.*xcir; oo_xz_int=lcir*ones(1,length(vx_int))-pend_xz_int.*xcir; % En esta zona de transicion: % definido un vector de planos de corte Z (variable de entrada de la funcion) % calculamos los puntos x,y de esa seccion, pues conocemos la variable z, % de la siguiente manera: % x=(z-d)/c ====> y=a*x+b. % Vemos la longitud del vector de planos Z: longi=length(planosZ); for j=1:longi if (planosZ(j)>=0) & (planosZ(j)<=lcir) % Hasta la longitud lcir todas las secciones son circulares e % iguales. % extrados xextra(j,:)=xcir; yextra(j,:)=ycirsup; % intrados xintra(j,:)=xcir; yintra(j,:)=ycirinf; % CALCULO DEL AREA: area(j)=pi*(cuerdacir/2)^2; % metodo Hermite: aexttrap= sum(diff(xextra(j,:)).*(yextra(j,1:end- 1)+yextra(j,2:end))/2)-sum(diff(xintra(j,:)).*(yintra(j,1:end- 1)+yintra(j,2:end))/2); % regla trapecio compuesta % ahora lo calculamos mediante el metodo de Hermite: hsup = diff(xextra(j,:)); deltasup = diff(yextra(j,:))./hsup; dsup = pchipslopes(hsup,deltasup); % esto nos da las pendientes o derivadas del polinomio interpolador de Hermite en los puntos del perfil. hinf = diff(xintra(j,:)); deltainf = diff(yintra(j,:))./hinf; dinf = pchipslopes(hinf,deltainf); % esto nos da las pendientes o derivadas del polinomio interpolador de Hermite en los puntos del perfil. Dsup = sum((hsup.^2).*(dsup(2:end)-dsup(1:end-1))/12); Dinf = sum((hinf.^2).*(dinf(2:end)-dinf(1:end-1))/12);
  • 40. areaextH=aexttrap-(Dsup-Dinf); area(j)=areaextH; % Calulo de las cosas usando pchip: ppsup=pchip(xextra(j,:),yextra(j,:)); % pp = piecewise polynomial. ppinf=pchip(xintra(j,:),yintra(j,:)); intsup=quad(@ppval,xextra(j,1),xextra(j,end),[],[],ppsup); intinf=quad(@ppval,xintra(j,1),xintra(j,end),[],[],ppinf); area(j)=intsup-intinf; elseif (planosZ(j)>lcir) & (planosZ(j)<=lper) %Zona de transicion de la pala.Obtenemos los puntos x,y mediante la %interseccion de los planos de corte con las rectas trazadas %anteriormente entre las secciones limite. Aplicando la formula %anteriormente descrita, al saber z, calculamos x e y para cada %seccion. [cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] = palalmlineal(planosZ(j)); % extrados xextra(j,:)=(planosZ(j)-oo_xz_ext)./pend_xz_ext; yextra(j,:)=pend_xy_ext.*xextra(j,:)+oo_xy_ext; % intrados xintra(j,:)=(planosZ(j)-oo_xz_int)./pend_xz_int; yintra(j,:)=pend_xy_int.*xintra(j,:)+oo_xy_int; % Calulo del area usando pchip: ppsup=pchip(xextra(j,:),yextra(j,:)); % pp = piecewise polynomial. ppinf=pchip(xintra(j,:),yintra(j,:)); intsup=quad(@ppval,xextra(j,1),xextra(j,end),[],[],ppsup); intinf=quad(@ppval,xintra(j,1),xintra(j,end),[],[],ppinf); area(j)=intsup-intinf; else % Aqui estamos en la zona puramente aerodinamica de la pala. Las % coordenadas de los perfiles las obtendremos ayudandonos de la % funcion q nos los genera q es naca44xx y de la distribucion de % espesores. [cuerdai,torsioni,espesorreli,xoffseti,web1i,web2i,grosmati] = palalmlineal(planosZ(j)); [Xuuniti,Yuuniti,Xluniti,Yluniti] = naca44xx(espesorreli); Xui=Xuuniti*cuerdai; Yui=Yuuniti*cuerdai; Xli=Xluniti*cuerdai; Yli=Yluniti*cuerdai; xi0=linspace(0,cuerdai,npuntos); % extrados xextra(j,:)=xi0-xoffseti*cuerdai; yextra(j,:)=pchip(Xui,Yui,xi0); % intrados xintra(j,:)=xi0-xoffseti*cuerdai; yintra(j,:)=pchip(Xli,Yli,xi0); % Calculo del area de las secciones utilizando pchip: ppsup=pchip(xextra(j,:),yextra(j,:)); % pp = piecewise polynomial.
  • 41. ppinf=pchip(xintra(j,:),yintra(j,:)); intsup=quad(@ppval,xextra(j,1),xextra(j,end),[],[],ppsup); intinf=quad(@ppval,xintra(j,1),xintra(j,end),[],[],ppinf); area(j)=intsup-intinf; end end % NOTA: % Como hemos usado los mismos valores de x para las funciones de intrados y % extrados, los valores de xextra y xintra q se obtienen son los mismos, de % forma q podiamos poner un unico valor de salida x que fuera % x=xextra=xintra. x=xextra; % o x=xintra SECCIONTOTPCHIP.M % La siguiente funcion nos va a dar exactamente las distintas secciones de % la pala a estudio en funcion de su distancia al encastre de la pala. function [xext,yextraext,yintraext,xint,yextraint,yintraint,area]=secciontotpch ip(planosZ,tipo) % La variable tipo nos va a definir distintos tipos de interiores de la % pala. Asi, llamaremos: % TIPO = 1: La pala interiormente tiene una distribucion de webs que es la % que viene dada por el programa que especifica la geometria de la pala (en % nuestro caso,palalmlineal). % TIPO = 2: La pala interiormente solo presenta la distribucion de webs en % la zona puramente aerodinamica, tb segun indica palalmlineal. % TIPO = 3: La pala interiormente no presenta ninguna distribucion de webs. if nargin < 2 || isempty(tipo), tipo = 1; end; % si no ponemos nada en tipo o ponemos la matriz vacia analizamos por defecto el tipo 1 de pala. for i=planosZ if i<0 | i>26 error('introduzca un/unos valor/es de distancia del plano entre L=0 y L=26 (m)') end end if (tipo==1) | (tipo==2) | (tipo==3) % puede comenzar el programa else error('introduzca un valor de tipo que sea 1, 2 o 3 correspondiente a los modelos de pala')
  • 42. end % Las coordenadas de la zona exterior de la seccion las obtenemos mediante % la funcion seccionext. [xext,yextraext,yintraext,areaext]=seccionextpchip(planosZ); % Para calcular ahora la parte interna de seccion procedemos como hemos hecho % anteriormente: % Vemos la longitud del vector de planos Z: longi=length(planosZ); global puntoscelda global poscfinal global poscinicial puntoscelda=33; % poner un numero impar que sea multiplo de 3 (numero de celdas). % si lo ponemos par nos da luego problemas al hacer diff(y) % en el programa de calculos de inercia posterior. Si lo % ponemos par, hay q cambiar en mominercia la manera de % calcular el mominerciax de la parte circular de la pala, % hacer la forma que usa pchip y quad. k=0; for j=1:longi if (planosZ(j)>=0) & (planosZ(j)<=3) [cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] = palalmlineal(planosZ(j)); rcirint=cuerda/2-grosmat; % radio de la seccion interior % como ejes de las secciones definimos los ejes x,y como eje x en % direccion de la cuerda y eje y el perpendicular. npuntos=3*puntoscelda; xcir=linspace(-rcirint,rcirint,npuntos); % generamos ''npuntos'' puntos equiespaciados. ycirsup=(rcirint^2-xcir.^2).^0.5; % parte superior de la seccion interior ycirinf=-((rcirint^2-xcir.^2).^0.5); % parte inferior de la seccion interior % extrados xextra(j,:)=xcir; yextraint(j,:)=ycirsup; % intrados xintra(j,:)=xcir; yintraint(j,:)=ycirinf; % como las xextra y xintra son iguales: xint(j,:)=xextra(j,:); % CALCULO DEL AREA: % El area de estas secciones es el area de una corona circular: area(j)=areaext(j)-pi*rcirint^2; %area2(j)=area(j); %areawebs(j)=area(j);
  • 43. else k=k+1; % contador para la variable poscinicial y poscfinal. ver mas abajo. [cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] = palalmlineal(planosZ(j)); % Puntos del contorno interno de la seccion (extrados/intrados % interno): necesito primero obtener la derivada del contorno externo % de la seccion. % Calcularemos a continuacion la forma interior, mediante % los polinomios de Hermite de interpolacion. hsup = diff(xext(j,:)); deltasup = diff(yextraext(j,:))./hsup; dsup = pchipslopes(hsup,deltasup); % esto nos da las pendientes o derivadas del polinomio interpolador de Hermite en los puntos del perfil. hinf = diff(xext(j,:)); deltainf = diff(yintraext(j,:))./hinf; dinf = pchipslopes(hinf,deltainf); % esto nos da las pendientes o derivadas del polinomio interpolador de Hermite en los puntos del perfil. betasup=atan(dsup); betainf=atan(dinf); % Extrados interno: Xinterior=(xext(j,:))+(grosmat)*sin(betasup); Yinterior=yextraext(j,:)-(grosmat)*cos(betasup); %Intardos interno: Xinterior1=(xext(j,:))+(-grosmat)*sin(betainf); Yinterior1=yintraext(j,:)-(-grosmat)*cos(betainf); % Definimos los parametros importantes en la seccion interna, como son % las posiciones de las webs y demas. posweb11=(-xoffset+web1).*cuerda-grosmat./2; posweb12=(-xoffset+web1).*cuerda+grosmat./2; posweb21=(-xoffset+web2).*cuerda-grosmat./2; posweb22=(-xoffset+web2).*cuerda+grosmat./2; lat11sup=pchip(Xinterior,Yinterior,posweb11);; % coordenada de lat11 q saco de la parte superior (extrados) lat11inf=pchip(Xinterior1,Yinterior1,posweb11);% coordenada de lat11 q saco de la parte inferior (intrados) lat12sup=pchip(Xinterior,Yinterior,posweb12);;% coordenada de lat12 q saco de la parte superior (extrados) lat12inf=pchip(Xinterior1,Yinterior1,posweb12);% coordenada de lat12 q saco de la parte inferior (intrados) lat21sup=pchip(Xinterior,Yinterior,posweb21);;% coordenada de lat21 q saco de la parte superior (extrados) lat21inf=pchip(Xinterior1,Yinterior1,posweb21);% coordenada de lat21 q saco de la parte inferior (intrados) lat22sup=pchip(Xinterior,Yinterior,posweb22);;% coordenada de lat22 q saco de la parte superior (extrados) lat22inf=pchip(Xinterior1,Yinterior1,posweb22);% coordenada de lat22 q saco de la parte inferior (intrados)
  • 44. % Obtengo puntos equidistantes entre los puntos superior e inferior de cada % pared de cada lateral. lat11=linspace(lat11inf,lat11sup,20); % su coordenada x es posweb11 lat12=linspace(lat12inf,lat12sup,20); % su coordenada x es posweb12 lat21=linspace(lat21inf,lat21sup,20); % su coordenada x es posweb21 lat22=linspace(lat22inf,lat22sup,20); % su coordenada x es posweb22 % Vamos a ir obteniendo el vector de puntos que me definan la parte % superior e inferior del perfil por su parte interna. % puntoscelda ====> estan definidos al principio del bucle. % Primeramente tenemos que calcular en este caso donde donde se juntan % las funciones de intrados y extrados (las internas se sobreentiende), % pues ambas convergen en dos puntos, uno en el borde de ataque de la % seccion y otro en el borde de salida, que son precisamente donde % comiennza y acaba la cuerda interior de las secciones. Esos puntos % son poscinicial y poscfinal. % Para ello haremos un barrido de las funciones y cuando su diferencia % sea nula obtendremos los valores finales de poscinicial y poscfinal. % POSCINICIAL: % Establecemos el paso del barrido: paso=-0.001*cuerda; % Hacemos el barrido for x=posweb12:paso:-xoffset*cuerda Wu=pchip(Xinterior,Yinterior,x); Wl=pchip(Xinterior1,Yinterior1,x); dif=Wu-Wl; if dif<0 xanterior=x-paso; %interpolamos entre x y x anterior la solucion poscinicial(k)=xanterior+((x-xanterior)/(difanterior- dif))*difanterior; break elseif dif==0 poscinicial(k)=x; break end difanterior=dif; % guardamos el valor de dif q es positivo para poderlo usar en la interpolacion al encontrar el negativo siguiente. end % POSCFINAL: % Establecemos el paso del barrido:
  • 45. paso2=0.001*cuerda; % Hacemos el barrido for x=posweb21:paso2:cuerda-xoffset*cuerda Wu=pchip(Xinterior,Yinterior,x); Wl=pchip(Xinterior1,Yinterior1,x); dif=Wu-Wl; if dif<0 xanterior=x-paso; %interpolamos entre x y x anterior la solucion poscfinal(k)=xanterior+((x-xanterior)/(difanterior- dif))*difanterior; break elseif dif==0 poscfinal(k)=x; break end difanterior=dif; % guardamos el valor de dif q es positivo para poderlo usar en la interpolacion al encontrar el negativo siguiente. end % Ahora ya sabiendo el valor de poscinicial y poscfinal empezamos a % calcular los puntos iinteriores de la seccion. % Dependiendo de si estos valores son mayores o menores q los valores % de posicion de las webs tendremos mas o menos celdas interiores en la % seccion. Asi: if (tipo==1) | ((tipo==2)&(planosZ(j)>=6)) if (poscinicial(k)>=posweb11) & (poscfinal(k)<=posweb22) % Solo tenemos una celda, la central. npuntos=3*puntoscelda; % CELDA CENTRAL (2): % Usando PCHIP: xcelda2=linspace(posweb12,posweb21,npuntos); % Extrados interno: [yextraint2] = pchip(Xinterior,Yinterior,xcelda2); %Intardos interno: [yintraint2] = pchip(Xinterior1,Yinterior1,xcelda2); % introducimos estos datos en las variables de salida: xint(j,:)=xcelda2; yextraint(j,:)=yextraint2; yintraint(j,:)=yintraint2; elseif (poscinicial(k)<posweb11) & (poscfinal(k)<=posweb22) % Tenemos celda izquierda y central, pero derecha no. npuntos0=(3*puntoscelda-1)/2; % como puntos celda es impar hay que hacer q una celda tenga un punto mas q la otra npuntos1=3*puntoscelda-npuntos0; % CELDA IZQUIERDA (1): % Usando PCHIP: xcelda1=linspace(poscinicial(k),posweb11,npuntos0); % Extrados interno: [yextraint1] = pchip(Xinterior,Yinterior,xcelda1); %Intardos interno: [yintraint1] = pchip(Xinterior1,Yinterior1,xcelda1); % Aqui hemos obtenido las constantes del ajuste del perfil interno.
  • 46. % CELDA CENTRAL (2): % Usando PCHIP: xcelda2=linspace(posweb12,posweb21,npuntos1); % Extrados interno: [yextraint2] = pchip(Xinterior,Yinterior,xcelda2); %Intardos interno: [yintraint2] = pchip(Xinterior1,Yinterior1,xcelda2); % introducimos estos datos en las variables de salida: xint(j,:)=[xcelda1 xcelda2]; yextraint(j,:)=[yextraint1 yextraint2]; yintraint(j,:)=[yintraint1 yintraint2]; elseif (poscinicial(k)>=posweb11) & (poscfinal(k)>posweb22) % En este caso no tendriamos celda 1, si 2 y 3. npuntos0=(3*puntoscelda-1)/2; npuntos1=3*puntoscelda-npuntos0; % CELDA CENTRAL (2): % Usando PCHIP: xcelda2=linspace(posweb12,posweb21,npuntos0); % Extrados interno: [yextraint2] = pchip(Xinterior,Yinterior,xcelda2); %Intardos interno: [yintraint2] = pchip(Xinterior1,Yinterior1,xcelda2); % CELDA DERECHA (3): % Usando PCHIP: xcelda3=linspace(posweb22,poscfinal(k),npuntos1); % Extrados interno: [yextraint3] = pchip(Xinterior,Yinterior,xcelda3); %Intardos interno: [yintraint3] = pchip(Xinterior1,Yinterior1,xcelda3); % introducimos estos datos en las variables de salida: xint(j,:)=[xcelda2 xcelda3]; yextraint(j,:)=[yextraint2 yextraint3]; yintraint(j,:)=[yintraint2 yintraint3]; elseif (poscinicial(k)<posweb11) & (poscfinal(k)>posweb22) % tenemos todas las celdas: npuntos=puntoscelda; % CELDA IZQUIERDA (1): % Usando PCHIP: xcelda1=linspace(poscinicial(k),posweb11,npuntos); % Extrados interno: [yextraint1] = pchip(Xinterior,Yinterior,xcelda1); %Intardos interno: [yintraint1] = pchip(Xinterior1,Yinterior1,xcelda1); % Aqui hemos obtenido las constantes del ajuste del perfil interno. % CELDA CENTRAL (2): % Usando PCHIP: xcelda2=linspace(posweb12,posweb21,npuntos); % Extrados interno: [yextraint2] = pchip(Xinterior,Yinterior,xcelda2); %Intardos interno: [yintraint2] = pchip(Xinterior1,Yinterior1,xcelda2); % CELDA DERECHA (3): % Usando PCHIP: xcelda3=linspace(posweb22,poscfinal(k),npuntos); % Extrados interno: [yextraint3] = pchip(Xinterior,Yinterior,xcelda3);
  • 47. %Intardos interno: [yintraint3] = pchip(Xinterior1,Yinterior1,xcelda3); % introducimos estos datos en las variables de salida: xint(j,:)=[xcelda1 xcelda2 xcelda3]; yextraint(j,:)=[yextraint1 yextraint2 yextraint3]; yintraint(j,:)=[yintraint1 yintraint2 yintraint3]; end % CALCULO DEL AREA DE LA SECCION: if posweb11>poscinicial(k) ppsupcelda1=pchip(xcelda1,yextraint1); % pp = piecewise polynomial. ppinfcelda1=pchip(xcelda1,yintraint1); intsupcelda1=quad(@ppval,xcelda1(1),xcelda1(end),[],[],ppsupcelda1); intinfcelda1=quad(@ppval,xcelda1(1),xcelda1(end),[],[],ppinfcelda1); Acelda1=intsupcelda1-intinfcelda1; else Acelda1=0; end ppsupcelda2=pchip(xcelda2,yextraint2); % pp = piecewise polynomial. ppinfcelda2=pchip(xcelda2,yintraint2); intsupcelda2=quad(@ppval,xcelda2(1),xcelda2(end),[],[],ppsupcelda2); intinfcelda2=quad(@ppval,xcelda2(1),xcelda2(end),[],[],ppinfcelda2); Acelda2=intsupcelda2-intinfcelda2; if poscfinal(k)>posweb22 ppsupcelda3=pchip(xcelda3,yextraint3); % pp = piecewise polynomial. ppinfcelda3=pchip(xcelda3,yintraint3); intsupcelda3=quad(@ppval,xcelda3(1),xcelda3(end),[],[],ppsupcelda3); intinfcelda3=quad(@ppval,xcelda3(1),xcelda3(end),[],[],ppinfcelda3); Acelda3=intsupcelda3-intinfcelda3; else Acelda3=0; end area(j)=areaext(j)-(Acelda1 + Acelda2 + Acelda3); end if (tipo==3) | ((tipo==2)&(planosZ(j)<6)) % Obtenemos un vector de puntos representativo de todo el perfil % interno: npuntos=3*puntoscelda; xinter=linspace(poscinicial(k),poscfinal(k),npuntos); yextrainter=pchip(Xinterior,Yinterior,xinter); yintrainter=pchip(Xinterior1,Yinterior1,xinter); xint(j,:)=xinter; yextraint(j,:)=yextrainter; yintraint(j,:)=yintrainter; % CALCULO DEL AREA DE LA SECCION:
  • 48. % utilizando pchip: ppsup=pchip(xinter,yextrainter); % pp = piecewise polynomial. ppinf=pchip(xinter,yintrainter); intsup=quad(@ppval,xinter(1),xinter(end),[],[],ppsup); intinf=quad(@ppval,xinter(1),xinter(end),[],[],ppinf); areaint=intsup-intinf; area(j)=areaext(j)-areaint; end end end CMASAS.M % Vamos a crear una funcion para calcular los centros de masas de las % secciones que nos da la funcion secciontotpchip. function [xg,yg] = cmasas(planosZ,tipo) if nargin < 2 || isempty(tipo), tipo = 1; end; [xext,yextraext,yintraext,xint,yextraint,yintraint,areatot]=secciontot pchip(planosZ,tipo); [cuerda,torsion,espesorrel,xoffset,web1,web2,grosmat] = palalmlineal(planosZ); posweb11=(-xoffset+web1).*cuerda-grosmat./2; % posicion de la web11 posweb12=(-xoffset+web1).*cuerda+grosmat./2; % posicion de la web12 posweb21=(-xoffset+web2).*cuerda-grosmat./2; % posicion de la web21 posweb22=(-xoffset+web2).*cuerda+grosmat./2; % posicion de la web22 global puntoscelda % numero de puntos definidos en secciontotpchip por celda global poscfinal % punto de interseccion de las funciones de extrados e intrados interno en la celda 3 definidas en secciontotpchip global poscinicial % punto de interseccion de las funciones de extrados e intrados interno en la celda 1 de la seccion pc=puntoscelda; % Procedamos al calculo del primer momento de area tanto sobre el eje x % como sobra el eje y. Estos momentos se identifican con la leta S (Sx,Sy) % de forma que xg=Sy/Aseccion e yg=Sx/Aseccion. long=length(planosZ); k=0; for j=1:long % CALCULAMOS PRIMERO LO REFERENTE A LAS ZONAS EXTERIORES: exteriorsup(1,:)=xext(j,:) + xoffset(j)*cuerda(j); % añadimos los offsets para calcular los momentos respecto sistema ejes q pasan por el borde ataque del perfil. exteriorsup(2,:)=yextraext(j,:);
  • 49. exteriorinf(1,:)=xext(j,:) + xoffset(j)*cuerda(j); exteriorinf(2,:)=yintraext(j,:); % Sy: %ZONA EXTERIOR: % utilizando solo la regla del trapecio: integrandou=(exteriorsup(1,:)).*exteriorsup(2,:); integrandol=(exteriorinf(1,:)).*exteriorinf(2,:); momysup=sum(diff(exteriorsup(1,:)).*(integrandou(1:end- 1)+integrandou(2:end))/2); momyinf=sum(diff(exteriorinf(1,:)).*(integrandol(1:end- 1)+integrandol(2:end))/2); momyexte=momysup-momyinf; % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: hu = diff(exteriorsup(1,:)); deltau = diff(integrandou)./hu; du = pchipslopes(hu,deltau); Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12); momysupH=momysup-Dsup; hl = diff(exteriorinf(1,:)); deltal = diff(integrandol)./hl; dl = pchipslopes(hl,deltal); Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12); momyinfH=momyinf-Dinf; momyHexte=momysupH-momyinfH; % Sx: % ZONA EXTERIOR: [maxi,indi]=max(exteriorsup(2,:)); [mini,indi2]=min(exteriorinf(2,:)); % utilizando solo la regla del trapecio: % extrados: (up es de extrados y arriba abajo corresponde a los dos tramos % de curva que se ven si se plotea (y^2)*x(y) frente a y, todo de extrados). inteuparriba=(exteriorsup(2,end:-1:indi)).*exteriorsup(1,end:- 1:indi); % invertimos los valores para integrar la funcion en el sentido de las x positivas. inteuparriba2=exteriorsup(1,end)*(linspace(0,exteriorsup(2,end),30)); % esto es la funcion y*xmax inteupabajo=(exteriorsup(2,1:indi)).*exteriorsup(1,1:indi); inteupabajo2=exteriorsup(1,1)*(linspace(0,exteriorsup(2,1),30));% esto es la funcion y*xmin momxuparriba=sum(diff(exteriorsup(2,end:- 1:indi)).*(inteuparriba(1:end-1)+inteuparriba(2:end))/2)+... sum(diff(linspace(0,exteriorsup(2,end),30)).*(inteuparriba2(1:end- 1)+inteuparriba2(2:end))/2); momxupabajo=sum(diff(exteriorsup(2,1:indi)).*(inteupabajo(1:end- 1)+inteupabajo(2:end))/2)+...
  • 50. sum(diff(linspace(0,exteriorsup(2,1),30)).*(inteupabajo2(1:end- 1)+inteupabajo2(2:end))/2); momxup=momxuparriba-momxupabajo; % intrados: low es de intrados y arriba abajo corresponde a los dos tramos % de curva que se ven si se plotea (y^2)*x(y) frente a y, todo de intrados). intelowarriba=(exteriorinf(2,end:-1:indi2)).*exteriorinf(1,end:- 1:indi2); % invierto el sentido de la curva superior para integrar en el sentido de las x negativas (y) intelowarriba2=exteriorinf(1,end)*(linspace(0,exteriorinf(2,end),30)); % esto es la funcion y*xmax intelowabajo=(exteriorinf(2,1:indi2)).*exteriorinf(1,1:indi2); intelowabajo2=exteriorinf(1,1)*(linspace(0,exteriorinf(2,1),30));% esto es la funcion y*xmin momxlowarriba=sum(diff(exteriorinf(2,end:- 1:indi2)).*(intelowarriba(1:end-1)+intelowarriba(2:end))/2)+... sum(diff(linspace(0,exteriorinf(2,end),30)).*(intelowarriba2(1:end- 1)+intelowarriba2(2:end))/2);% las areas tienen q salir negativas aqui. momxlowabajo=sum(diff(exteriorinf(2,1:indi2)).*(intelowabajo(1:end- 1)+intelowabajo(2:end))/2)+... sum(diff(linspace(0,exteriorinf(2,1),30)).*(intelowabajo2(1:end- 1)+intelowabajo2(2:end))/2); momxlow=momxlowarriba-momxlowabajo; momxexte=momxup-momxlow; % lo q vale es restar no sumar (antes lo habia sumado) % esta es la que vale porque ambas partes, la positiva y negativa añaden inercia % si no, si la seccion fuera simetrica y las sumara, daria inercia nula y % eso esta mal. % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: huparriba = diff(exteriorsup(2,end:-1:indi)); deltauparriba = diff(inteuparriba)./huparriba; duparriba = pchipslopes(huparriba,deltauparriba); Duparriba = sum((huparriba.^2).*(duparriba(2:end)-duparriba(1:end- 1))/12); if exteriorsup(2,end)>0 huparriba2 = diff(linspace(0,exteriorsup(2,end),30)); deltauparriba2 = diff(inteuparriba2)./huparriba2; duparriba2 = pchipslopes(huparriba2,deltauparriba2); Duparriba2 = sum((huparriba2.^2).*(duparriba2(2:end)- duparriba2(1:end-1))/12); else Duparriba2=0; end % tengo q poner este if porq si me dieran las coordenadas del perfil
  • 51. % exactas (pasando el extrados e intrados por (0,0) y (c,0)) como hace % Xfoil (el programa nuestro naca44xx no pasa exactamente por (0,0) y % (c,0)), el termino de inteuparriba se anula solo, pero a la hora de % añadir la parte de Hermite tendriamos problema porque dividiriamos por 0, % de forma q si estos puntos tienen y=0, tenemos q poner q D=0,parte de % Hermite nula (la parte de la regla del trapecio ya se anula sola como % hemos dixo antes, T=0). Esto hay q hacerlo tb para el punto del origen % en extrados, y repetirlo para origen y cuerda de intrados tb. momxuparribaH=momxuparriba-Duparriba-Duparriba2; hupabajo = diff(exteriorsup(2,1:indi)); deltaupabajo = diff(inteupabajo)./hupabajo; dupabajo = pchipslopes(hupabajo,deltaupabajo); Dupabajo = sum((hupabajo.^2).*(dupabajo(2:end)-dupabajo(1:end- 1))/12); if exteriorsup(2,1)>0 hupabajo2 = diff(linspace(0,exteriorsup(2,1),30)); deltaupabajo2 = diff(inteupabajo2)./hupabajo2; dupabajo2 = pchipslopes(hupabajo2,deltaupabajo2); Dupabajo2 = sum((hupabajo2.^2).*(dupabajo2(2:end)- dupabajo2(1:end-1))/12); else Dupabajo2=0; end momxupabajoH=momxupabajo-Dupabajo-Dupabajo2; hlowarriba = diff(exteriorinf(2,end:-1:indi2)); deltalowarriba = diff(intelowarriba)./hlowarriba; dlowarriba = pchipslopes(hlowarriba,deltalowarriba); Dlowarriba = sum((hlowarriba.^2).*(dlowarriba(2:end)- dlowarriba(1:end-1))/12); if exteriorinf(2,end)<0 % el intrados tiene y negativas hlowarriba2 = diff(linspace(0,exteriorinf(2,end),30)); deltalowarriba2 = diff(intelowarriba2)./hlowarriba2; dlowarriba2 = pchipslopes(hlowarriba2,deltalowarriba2); Dlowarriba2 = sum((hlowarriba2.^2).*(dlowarriba2(2:end)- dlowarriba2(1:end-1))/12); else Dlowarriba2=0; end momxlowarribaH=momxlowarriba-Dlowarriba-Dlowarriba2; hlowabajo = diff(exteriorinf(2,1:indi2)); deltalowabajo = diff(intelowabajo)./hlowabajo; dlowabajo = pchipslopes(hlowabajo,deltalowabajo);
  • 52. Dlowabajo = sum((hlowabajo.^2).*(dlowabajo(2:end)-dlowabajo(1:end- 1))/12); if exteriorinf(2,1)<0 hlowabajo2 = diff(linspace(0,exteriorinf(2,1),30)); deltalowabajo2 = diff(intelowabajo2)./hlowabajo2; dlowabajo2 = pchipslopes(hlowabajo2,deltalowabajo2); Dlowabajo2 = sum((hlowabajo2.^2).*(dlowabajo2(2:end)- dlowabajo2(1:end-1))/12); else Dlowabajo2=0; end momxlowabajoH=momxlowabajo-Dlowabajo-Dlowabajo2; momxupH=momxuparribaH-momxupabajoH; momxlowH=momxlowarribaH-momxlowabajoH; momxHexte=momxupH-momxlowH; % esta es la buena % UNA VEZ HECHO ESTO SOLO FALTA LAS ZONAS INTERIORES: if (planosZ(j)>=0) & (planosZ(j)<=3) % solo tenemos una zona interior, no hay webs. % definimos variables: % ZONA INTERIOR: interiorsup(1,:)=xint(j,:) + xoffset(j)*cuerda(j); % añadimos los offsets para calcular los momentos respecto sistema ejes q pasan por el borde ataque del perfil. interiorsup(2,:)=yextraint(j,:); interiorinf(1,:)=xint(j,:) + xoffset(j)*cuerda(j); interiorinf(2,:)=yintraint(j,:); % CALCULO DE LOS MOMENTOS DE INERCIA: % Sy: % ZONA INTERIOR: % utilizando solo la regla del trapecio: integrandou=(interiorsup(1,:)).*interiorsup(2,:); integrandol=(interiorinf(1,:)).*interiorinf(2,:); momysup=sum(diff(interiorsup(1,:)).*(integrandou(1:end- 1)+integrandou(2:end))/2); momyinf=sum(diff(interiorinf(1,:)).*(integrandol(1:end- 1)+integrandol(2:end))/2); momyinte=momysup-momyinf; % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: hu = diff(interiorsup(1,:)); deltau = diff(integrandou)./hu; du = pchipslopes(hu,deltau); Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12); momysupH=momysup-Dsup; hl = diff(interiorinf(1,:)); deltal = diff(integrandol)./hl; dl = pchipslopes(hl,deltal);
  • 53. Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12); momyinfH=momyinf-Dinf; momyHinte=momysupH-momyinfH; % Una vez analizadas todas las partes simplemente queda restarlas: momytotality=momyexte-momyinte; momyHtotality=momyHexte-momyHinte; Sy(j)=momyHtotality;% ponemos como resultado final el de integracion con polinomio Hermite. xg(j)=Sy(j)/areatot(j); % Sx: % ZONA INTERIOR: [maxi,indi]=max(interiorsup(2,:)); [mini,indi2]=min(interiorinf(2,:)); % utilizando solo la regla del trapecio: % extrados: (up es de extrados y arriba abajo corresponde a los dos tramos % de curva que se ven si se plotea (y^2)*x(y) frente a y, todo de extrados). inteuparriba=(interiorsup(2,end:-1:indi)).*interiorsup(1,end:- 1:indi); % invertimos los valores para integrar la funcion en el sentido de las x positivas. inteupabajo=(interiorsup(2,1:indi)).*interiorsup(1,1:indi); momxuparriba=sum(diff(interiorsup(2,end:- 1:indi)).*(inteuparriba(1:end-1)+inteuparriba(2:end))/2); momxupabajo=sum(diff(interiorsup(2,1:indi)).*(inteupabajo(1:end- 1)+inteupabajo(2:end))/2); momxup=momxuparriba-momxupabajo; % intrados: low es de intrados y arriba abajo corresponde a los dos tramos % de curva que se ven si se plotea (y^2)*x(y) frente a y, todo de intrados). intelowarriba=(interiorinf(2,end:- 1:indi2)).*interiorinf(1,end:-1:indi2); % invierto el sentido de la curva superior para integrar en el sentido de las x negativas (y) intelowabajo=(interiorinf(2,1:indi2)).*interiorinf(1,1:indi2); momxlowarriba=sum(diff(interiorinf(2,end:- 1:indi2)).*(intelowarriba(1:end-1)+intelowarriba(2:end))/2);% las areas tienen q salir negativas aqui. momxlowabajo=sum(diff(interiorinf(2,1:indi2)).*(intelowabajo(1:end- 1)+intelowabajo(2:end))/2); momxlow=momxlowarriba-momxlowabajo; momxinte=momxup-momxlow; % lo q vale es restar no sumar (antes lo habia sumado) % esta es la que vale porque ambas partes, la positiva y negativa añaden inercia % si no, si la seccion fuera simetrica y las sumara, daria inercia nula y % eso esta mal. % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite:
  • 54. huparriba = diff(interiorsup(2,end:-1:indi)); deltauparriba = diff(inteuparriba)./huparriba; duparriba = pchipslopes(huparriba,deltauparriba); Duparriba = sum((huparriba.^2).*(duparriba(2:end)- duparriba(1:end-1))/12); momxuparribaH=momxuparriba-Duparriba; hupabajo = diff(interiorsup(2,1:indi)); deltaupabajo = diff(inteupabajo)./hupabajo; dupabajo = pchipslopes(hupabajo,deltaupabajo); Dupabajo = sum((hupabajo.^2).*(dupabajo(2:end)-dupabajo(1:end- 1))/12); momxupabajoH=momxupabajo-Dupabajo; hlowarriba = diff(interiorinf(2,end:-1:indi2)); deltalowarriba = diff(intelowarriba)./hlowarriba; dlowarriba = pchipslopes(hlowarriba,deltalowarriba); Dlowarriba = sum((hlowarriba.^2).*(dlowarriba(2:end)- dlowarriba(1:end-1))/12); momxlowarribaH=momxlowarriba-Dlowarriba; hlowabajo = diff(interiorinf(2,1:indi2)); deltalowabajo = diff(intelowabajo)./hlowabajo; dlowabajo = pchipslopes(hlowabajo,deltalowabajo); Dlowabajo = sum((hlowabajo.^2).*(dlowabajo(2:end)- dlowabajo(1:end-1))/12); momxlowabajoH=momxlowabajo-Dlowabajo; momxupH=momxuparribaH-momxupabajoH; momxlowH=momxlowarribaH-momxlowabajoH; momxHinte=momxupH-momxlowH; % esta es la buena momxHtotality=momxHexte-momxHinte; Sx(j)=momxHtotality; % ponemos como resultado final el de integracion con polinomio Hermite. yg(j)=Sx(j)/areatot(j); else k=k+1; % contador para la variable poscinicial y poscfinal. if (tipo==1) | ((tipo==2)&(planosZ(j)>=6)) % Tenemos webs interiores, ahora hay q ver cuantas: if (poscinicial(k)>=posweb11(j)) & (poscfinal(k)<=posweb22(j)) % Solo tenemos una celda, la central. % CELDA CENTRAL (2): celdacensup(1,:)=xint(j,:) + xoffset(j)*cuerda(j); celdacensup(2,:)=yextraint(j,:); celdaceninf(1,:)=xint(j,:) + xoffset(j)*cuerda(j); celdaceninf(2,:)=yintraint(j,:); % Sy: % utilizando solo la regla del trapecio:
  • 55. integrandou=(celdacensup(1,:)).*celdacensup(2,:); integrandol=(celdaceninf(1,:)).*celdaceninf(2,:); momysup=sum(diff(celdacensup(1,:)).*(integrandou(1:end- 1)+integrandou(2:end))/2); momyinf=sum(diff(celdaceninf(1,:)).*(integrandol(1:end- 1)+integrandol(2:end))/2); momyceldacen=momysup-momyinf; % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: hu = diff(celdacensup(1,:)); deltau = diff(integrandou)./hu; du = pchipslopes(hu,deltau); Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12); momysupH=momysup-Dsup; hl = diff(celdaceninf(1,:)); deltal = diff(integrandol)./hl; dl = pchipslopes(hl,deltal); Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12); momyinfH=momyinf-Dinf; momyHceldacen=momysupH-momyinfH; momyHtotality=momyHexte-momyHceldacen; Sy(j)=momyHtotality; % ponemos como resultado final el de integracion con polinomio Hermite. xg(j)=Sy(j)/areatot(j); % Sx: % utilizando solo la regla del trapecio: [maxim,in]=max(celdacensup(2,:)); integrandou1=(celdacensup(2,end:- 1:in)).*celdacensup(1,end:-1:in); integrandou2=celdacensup(1,end)*(linspace(0,celdacensup(2,end),30)); % esto es la funcion y*xmax integrandou3=(celdacensup(2,1:in)).*celdacensup(1,1:in); integrandou4=celdacensup(1,1)*(linspace(0,celdacensup(2,1),30)); % esto es la funcion y*xmin integrandol1=(celdaceninf(2,end:- 1:1)).*celdaceninf(1,end:-1:1);% hay q invertir el sentido integrandol2=celdaceninf(1,end)*(linspace(0,celdaceninf(2,end),30)); % esto es la funcion y*xmax integrandol3=celdaceninf(1,1)*(linspace(0,celdaceninf(2,1),30)); % esto es la funcion y*xmin momxsup=sum(diff(celdacensup(2,end:- 1:in)).*(integrandou1(1:end-1)+integrandou1(2:end))/2)+... sum(diff(linspace(0,celdacensup(2,end),30)).*(integrandou2(1:end- 1)+integrandou2(2:end))/2)-...
  • 56. sum(diff(celdacensup(2,1:in)).*(integrandou3(1:end- 1)+integrandou3(2:end))/2)-... sum(diff(linspace(0,celdacensup(2,1),30)).*(integrandou4(1:end- 1)+integrandou4(2:end))/2); momxinf=sum(diff(celdaceninf(2,end:- 1:1)).*(integrandol1(1:end-1)+integrandol1(2:end))/2)+... sum(diff(linspace(0,celdaceninf(2,end),30)).*(integrandol2(1:end- 1)+integrandol2(2:end))/2)-... sum(diff(linspace(0,celdaceninf(2,1),30)).*(integrandol3(1:end- 1)+integrandol3(2:end))/2); momxceldacen=momxsup-momxinf; % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: % superior: hu1 = diff(celdacensup(2,end:-1:in)); deltau1 = diff(integrandou1)./hu1; du1 = pchipslopes(hu1,deltau1); Dsup1 = sum((hu1.^2).*(du1(2:end)-du1(1:end-1))/12); hu2 = diff(linspace(0,celdacensup(2,end),30)); deltau2 = diff(integrandou2)./hu2; du2 = pchipslopes(hu2,deltau2); Dsup2 = sum((hu2.^2).*(du2(2:end)-du2(1:end-1))/12); hu3 = diff(celdacensup(2,1:in)); deltau3 = diff(integrandou3)./hu3; du3 = pchipslopes(hu3,deltau3); Dsup3 = sum((hu3.^2).*(du3(2:end)-du3(1:end-1))/12); hu4 = diff(linspace(0,celdacensup(2,1),30)); deltau4 = diff(integrandou4)./hu4; du4 = pchipslopes(hu4,deltau4); Dsup4 = sum((hu4.^2).*(du4(2:end)-du4(1:end-1))/12); momxsupH=momxsup-Dsup1-Dsup2+Dsup3+Dsup4; % Inferior: hl1 = diff(celdaceninf(2,end:-1:1)); % invertimos el sentido como en el integrando deltal1 = diff(integrandol1)./hl1; dl1 = pchipslopes(hl1,deltal1); Dinf1 = sum((hl1.^2).*(dl1(2:end)-dl1(1:end-1))/12); hl2 = diff(linspace(0,celdaceninf(2,end),30)); deltal2 = diff(integrandol2)./hl2; dl2 = pchipslopes(hl2,deltal2); Dinf2 = sum((hl2.^2).*(dl2(2:end)-dl2(1:end-1))/12); hl3 = diff(linspace(0,celdaceninf(2,1),30)); deltal3 = diff(integrandol3)./hl3; dl3 = pchipslopes(hl3,deltal3); Dinf3 = sum((hl3.^2).*(dl3(2:end)-dl3(1:end-1))/12); momxinfH=momxinf-Dinf1-Dinf2+Dinf3; momxHceldacen=momxsupH-momxinfH;
  • 57. momxHtotality=momxHexte-momxHceldacen; Sx(j)=momxHtotality; % ponemos como resultado final el de integracion con polinomio Hermite. yg(j)=Sx(j)/areatot(j); % Reinicializamos las matrices usadas para q luego no de % problemas el programa al asignar otros datos, pues si no % se quedarian guardadas las dimensiones actuales de % celdacensup y celdaceninf: celdacensup=[]; celdaceninf=[]; elseif (poscinicial(k)<posweb11(j)) & (poscfinal(k)<=posweb22(j)) % Tenemos celda izquierda y central, pero derecha no. npuntos0=(3*pc-1)/2; npuntos1=3*pc-npuntos0; % CELDA IZQUIERDA: celdaizqsup(1,:)=xint(j,1:npuntos0) + xoffset(j)*cuerda(j); celdaizqsup(2,:)=yextraint(j,1:npuntos0); celdaizqinf(1,:)=xint(j,1:npuntos0) + xoffset(j)*cuerda(j); celdaizqinf(2,:)=yintraint(j,1:npuntos0); % CELDA CENTRAL: celdacensup(1,:)=xint(j,npuntos0+1:end) + xoffset(j)*cuerda(j); celdacensup(2,:)=yextraint(j,npuntos0+1:end); celdaceninf(1,:)=xint(j,npuntos0+1:end) + xoffset(j)*cuerda(j); celdaceninf(2,:)=yintraint(j,npuntos0+1:end); % Sy: % CELDA IZQ: % utilizando solo la regla del trapecio: integrandou=(celdaizqsup(1,:)).*celdaizqsup(2,:); integrandol=(celdaizqinf(1,:)).*celdaizqinf(2,:); momysup=sum(diff(celdaizqsup(1,:)).*(integrandou(1:end- 1)+integrandou(2:end))/2); momyinf=sum(diff(celdaizqinf(1,:)).*(integrandol(1:end- 1)+integrandol(2:end))/2); momyceldaizq=momysup-momyinf; % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: hu = diff(celdaizqsup(1,:)); deltau = diff(integrandou)./hu; du = pchipslopes(hu,deltau); Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12); momysupH=momysup-Dsup; hl = diff(celdaizqinf(1,:)); deltal = diff(integrandol)./hl; dl = pchipslopes(hl,deltal);
  • 58. Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12); momyinfH=momyinf-Dinf; momyHceldaizq=momysupH-momyinfH; % CELDA CENTRAL: % utilizando solo la regla del trapecio: integrandou=(celdacensup(1,:)).*celdacensup(2,:); integrandol=(celdaceninf(1,:)).*celdaceninf(2,:); momysup=sum(diff(celdacensup(1,:)).*(integrandou(1:end- 1)+integrandou(2:end))/2); momyinf=sum(diff(celdaceninf(1,:)).*(integrandol(1:end- 1)+integrandol(2:end))/2); momyceldacen=momysup-momyinf; % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: hu = diff(celdacensup(1,:)); deltau = diff(integrandou)./hu; du = pchipslopes(hu,deltau); Dsup = sum((hu.^2).*(du(2:end)-du(1:end-1))/12); momysupH=momysup-Dsup; hl = diff(celdaceninf(1,:)); deltal = diff(integrandol)./hl; dl = pchipslopes(hl,deltal); Dinf = sum((hl.^2).*(dl(2:end)-dl(1:end-1))/12); momyinfH=momyinf-Dinf; momyHceldacen=momysupH-momyinfH; momyHtotality=momyHexte-momyHceldaizq-momyHceldacen; Sy(j)=momyHtotality; % ponemos como resultado final el de integracion con polinomio Hermite. xg(j)=Sy(j)/areatot(j); % Sx: % CELDA IZQ: % utilizando solo la regla del trapecio: integrandou1=celdaizqsup(1,end)*(linspace(0,celdaizqsup(2,end),30)); % esto es la funcion y*xmax integrandou2=(celdaizqsup(2,:)).*celdaizqsup(1,:); integrandol1=celdaizqinf(1,end)*(linspace(0,celdaizqinf(2,end),30)); % esto es la funcion y*xmax integrandol2=(celdaizqinf(2,:)).*celdaizqinf(1,:); momxsup=sum(diff(linspace(0,celdaizqsup(2,end),30)).*(integrandou1(1:e nd-1)+integrandou1(2:end))/2)- sum(diff(celdaizqsup(2,:)).*(integrandou2(1:end- 1)+integrandou2(2:end))/2); momxinf=sum(diff(linspace(0,celdaizqinf(2,end),30)).*(integrandol1(1:e
  • 59. nd-1)+integrandol1(2:end))/2)- sum(diff(celdaizqinf(2,:)).*(integrandol2(1:end- 1)+integrandol2(2:end))/2); momxceldaizq=momxsup-momxinf; % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: % superior: hu1 = diff(linspace(0,celdaizqsup(2,end),30)); deltau1 = diff(integrandou1)./hu1; du1 = pchipslopes(hu1,deltau1); Dsup1 = sum((hu1.^2).*(du1(2:end)-du1(1:end-1))/12); hu2 = diff(celdaizqsup(2,:)); deltau2 = diff(integrandou2)./hu2; du2 = pchipslopes(hu2,deltau2); Dsup2 = sum((hu2.^2).*(du2(2:end)-du2(1:end-1))/12); momxsupH=momxsup-Dsup1+Dsup2; % inferior: hl1 = diff(linspace(0,celdaizqinf(2,end),30)); deltal1 = diff(integrandol1)./hl1; dl1 = pchipslopes(hl1,deltal1); Dinf1 = sum((hl1.^2).*(dl1(2:end)-dl1(1:end-1))/12); hl2 = diff(celdaizqinf(2,:)); deltal2 = diff(integrandol2)./hl2; dl2 = pchipslopes(hl2,deltal2); Dinf2 = sum((hl2.^2).*(dl2(2:end)-dl2(1:end-1))/12); momxinfH=momxinf-Dinf1+Dinf2; momxHceldaizq=momxsupH-momxinfH; % CELDA CENTRAL: % utilizando solo la regla del trapecio: [maxim,in]=max(celdacensup(2,:)); integrandou1=(celdacensup(2,end:- 1:in)).*celdacensup(1,end:-1:in); integrandou2=celdacensup(1,end)*(linspace(0,celdacensup(2,end),30)); % esto es la funcion y*xmax integrandou3=(celdacensup(2,1:in)).*celdacensup(1,1:in); integrandou4=celdacensup(1,1)*(linspace(0,celdacensup(2,1),30)); % esto es la funcion y*xmin integrandol1=(celdaceninf(2,end:- 1:1)).*celdaceninf(1,end:-1:1);% hay q invertir el sentido integrandol2=celdaceninf(1,end)*(linspace(0,celdaceninf(2,end),30)); % esto es la funcion y*xmax integrandol3=celdaceninf(1,1)*(linspace(0,celdaceninf(2,1),30)); % esto es la funcion y*xmin
  • 60. momxsup=sum(diff(celdacensup(2,end:- 1:in)).*(integrandou1(1:end-1)+integrandou1(2:end))/2)+... sum(diff(linspace(0,celdacensup(2,end),30)).*(integrandou2(1:end- 1)+integrandou2(2:end))/2)-... sum(diff(celdacensup(2,1:in)).*(integrandou3(1:end- 1)+integrandou3(2:end))/2)-... sum(diff(linspace(0,celdacensup(2,1),30)).*(integrandou4(1:end- 1)+integrandou4(2:end))/2); momxinf=sum(diff(celdaceninf(2,end:- 1:1)).*(integrandol1(1:end-1)+integrandol1(2:end))/2)+... sum(diff(linspace(0,celdaceninf(2,end),30)).*(integrandol2(1:end- 1)+integrandol2(2:end))/2)-... sum(diff(linspace(0,celdaceninf(2,1),30)).*(integrandol3(1:end- 1)+integrandol3(2:end))/2); momxceldacen=momxsup-momxinf; % si añadimos el termino que se obtiene de integrar el polinomio de % Hermite: % superior: hu1 = diff(celdacensup(2,end:-1:in)); deltau1 = diff(integrandou1)./hu1; du1 = pchipslopes(hu1,deltau1); Dsup1 = sum((hu1.^2).*(du1(2:end)-du1(1:end-1))/12); hu2 = diff(linspace(0,celdacensup(2,end),30)); deltau2 = diff(integrandou2)./hu2; du2 = pchipslopes(hu2,deltau2); Dsup2 = sum((hu2.^2).*(du2(2:end)-du2(1:end-1))/12); hu3 = diff(celdacensup(2,1:in)); deltau3 = diff(integrandou3)./hu3; du3 = pchipslopes(hu3,deltau3); Dsup3 = sum((hu3.^2).*(du3(2:end)-du3(1:end-1))/12); hu4 = diff(linspace(0,celdacensup(2,1),30)); deltau4 = diff(integrandou4)./hu4; du4 = pchipslopes(hu4,deltau4); Dsup4 = sum((hu4.^2).*(du4(2:end)-du4(1:end-1))/12); momxsupH=momxsup-Dsup1-Dsup2+Dsup3+Dsup4; % Inferior: hl1 = diff(celdaceninf(2,end:-1:1)); % invertimos el sentido como en el integrando deltal1 = diff(integrandol1)./hl1; dl1 = pchipslopes(hl1,deltal1); Dinf1 = sum((hl1.^2).*(dl1(2:end)-dl1(1:end-1))/12); hl2 = diff(linspace(0,celdaceninf(2,end),30)); deltal2 = diff(integrandol2)./hl2; dl2 = pchipslopes(hl2,deltal2); Dinf2 = sum((hl2.^2).*(dl2(2:end)-dl2(1:end-1))/12); hl3 = diff(linspace(0,celdaceninf(2,1),30)); deltal3 = diff(integrandol3)./hl3; dl3 = pchipslopes(hl3,deltal3);