Está en la página 1de 6

Codificación

BetaNewmark1GDL
function[d,v,a,Qe,t]=BetaNewmark1GDL(beta,m,z,k,sg,dt)
%beta de 1/8 a 1/4
c=z*2*(m*k)^0.5;
f=-m*sg;
n=length(f);
tmax=dt*(n-1);
t=(0:dt:tmax)';
Ma=m+c*dt/2+beta*k*dt^2;
a=zeros(n,1);v=a;d=a;Qe=a;
for i=1:n-1
incf=f(i+1)-f(i);
incfa=incf-k*v(i)*dt-a(i)*(c*dt+k*dt^2/2);
inca=incfa/Ma;
incv=a(i)*dt+inca*dt/2;
incd=v(i)*dt+a(i)*dt^2/2+beta*inca*dt^2;
a(i+1)=a(i)+inca;
v(i+1)=v(i)+incv;
d(i+1)=d(i)+incd;
Qe(i+1)=k*d(i+1);
end

Duhamel_trp

function [x,t]=Duhamel_trp(m,wo,dt,z,f,xo,xpo)
%m: masa del sistema
%wo: frecuencia natural
%dt: paso del tiempo
%z: factor de amortiguamiento viscoso
%f: fuerzas (vector vertical)
%xo y xpo: desplazamiento y velocidadades iniciales
%
%x: respuesta del sistema
%t: tiempo

n=length(f);
t=(0:dt:dt*(n-1))';
wz=wo*(1-z^2)^0.5;
ai=f.*cos(wz*t);
bi=f.*sin(wz*t);
ai_1=[0;ai(1:n-1)];
bi_1=[0;bi(1:n-1)];
pc=dt/2/m/wz*(ai_1*exp(-z*wo*dt)+ai);
ps=dt/2/m/wz*(bi_1*exp(-z*wo*dt)+bi);
c=zeros(n,1);
s=zeros(n,1);
c(1)=pc(1);
s(1)=ps(1);
for i=2:n
c(i)=c(i-1)*exp(-z*wo*dt)+pc(i);
s(i)=s(i-1)*exp(-z*wo*dt)+ps(i);
end
xp=c.*sin(wz*t)-s.*cos(wz*t);
xh=exp(-z*wo*t).*(xo*cos(wz*t)+(xpo+z*wo*xo)/wz*sin(wz*t));
x=xh+xp
V=(1/wo*exp(-z*wo*dt))*sin(wz*t)*8.33*0.480-cos(wz*t)*(8.33*0.917);

Resultados
%Ejemplo respuesta sistema 1 GDL
U=0.50;
z=0.05;
k=1000;
wo=62.83;
wz=62.75;
m= 0.25;

%Respuesta Escalón Unitario


%De 0<=t<=0.5s
dt=0.01;
t=(0:dt:0.5);
g1=U*1/k*(1-exp(-z*wo*t).*(cos(wz*t)+wo*z/wz*sin(wz*t)));
plot(t,g1)
%De 0.5<=t<=2s
t=(0.5:dt:2);
g2=U*1/k*(1-exp(-z*wo*(t-0.5)).*(cos(wz*(t-0.5))+wo*z/wz*sin(wz*(t-
0.5))));
g1=U*1/k*(1-exp(-z*wo*t).*(cos(wz*t)+wo*z/wz*sin(wz*t)));
g=g1-g2;
hold on
plot(t,g,'blue');

%Respuesta Solución lineal


dt=0.01;
c=z*2*(k*m)^0.5;
Ma=m+c*dt/2+k*dt^2/6;
f=[0;ones(0.5/dt-1,1)*U;zeros(1.5/dt-1,1)];
n=length(f);
t=(0:dt:dt*(n-1));
a=zeros(n,1);v=zeros(n,1);d=zeros(n,1);
for i=1:n-1
incf=f(i+1)-f(i);
incfa=incf-k*v(i)*dt-a(i)*(c*dt+k*dt^2/2);
inca=incfa/Ma;
incv=a(i)*dt+inca*dt/2;
incd=v(i)*dt+a(i)*dt^2/2+inca*dt^2/6;
a(i+1)=a(i)+inca;
v(i+1)=v(i)+incv;
d(i+1)=d(i)+incd;
end
plot(t,d,'red')

%Integral de Duhamel con métodos numéricos


dt=0.01;
f=[0;ones(0.5/dt-1,1)*U;zeros(1.5/dt-1,1)];
[x,t]=Duhamel_trp(m,wo,dt,z,f,0,0);
plot(t,x,'green')

%Comprobación de función beta de Newmark


dt=0.05;
beta=1/5;
f=[0;ones(0.5/dt-1,1)*U;zeros(1.5/dt-1,1)];
sg=-f/m;
[d,v,a,Qe,t]=BetaNewmark1GDL(beta,m,z,k,sg,dt);
plot(t,d,'black')
%m: masa del sistema
%wo: frecuencia natural
%dt: paso del tiempo
%z: factor de amortiguamiento viscoso
%f: fuerzas (vector vertical)
%xo y xpo: desplazamiento y velocidadades iniciales
%
%x: respuesta del sistema
%t: tiempo

n=length(f);
t=(0:dt:dt*(n-1))';
wz=wo*(1-z^2)^0.5;
ai=f.*cos(wz*t);
bi=f.*sin(wz*t);
ai_1=[0;ai(1:n-1)];
bi_1=[0;bi(1:n-1)];
pc=dt/2/m/wz*(ai_1*exp(-z*wo*dt)+ai);
ps=dt/2/m/wz*(bi_1*exp(-z*wo*dt)+bi);
c=zeros(n,1);
s=zeros(n,1);
c(1)=pc(1);
s(1)=ps(1);
for i=2:n
c(i)=c(i-1)*exp(-z*wo*dt)+pc(i);
s(i)=s(i-1)*exp(-z*wo*dt)+ps(i);
end
xp=c.*sin(wz*t)-s.*cos(wz*t);
xh=exp(-z*wo*t).*(xo*cos(wz*t)+(xpo+z*wo*xo)/wz*sin(wz*t));
x=xh+xp
V=(1/wo*exp(-z*wo*dt))*sin(wz*t)*8.33*0.480-cos(wz*t)*(8.33*0.917);

function[d,v,a,Qe,t]=BetaNewmark1GDL(beta,m,z,k,sg,dt)
%beta de 1/8 a 1/4
%gama de 0 a 1
%m es la masa del sistema
%z es el factor de amortiguamiento viscoso
%k es la rigidez del sistema
%sg aceleración del suelo
%dt es el intervalo de tiempo del registro sismico
%
%d, v y a son las respuestas del sistema (desplazamiento, velocidad y
%aceleración
%Qe es la fuerza elástica del sistema Qe=k*x
%[d,v,a,Qe]=BetaNewmark1GDL(beta,m,z,k,sg)
c=z*2*(m*k)^0.5;
f=-m*sg;
n=length(f);
tmax=dt*(n-1);
t=(0:dt:tmax)';
Ma=m+c*dt/2+beta*k*dt^2;
a=zeros(n,1);v=a;d=a;Qe=a;
for i=1:n-1
incf=f(i+1)-f(i);
incfa=incf-k*v(i)*dt-a(i)*(c*dt+k*dt^2/2);
inca=incfa/Ma;
incv=a(i)*dt+inca*dt/2;
incd=v(i)*dt+a(i)*dt^2/2+beta*inca*dt^2;
a(i+1)=a(i)+inca;
v(i+1)=v(i)+incv;
d(i+1)=d(i)+incd;
Qe(i+1)=k*d(i+1);
end

También podría gustarte