vuoi
o PayPal
tutte le volte che vuoi
Condensazione Statica - analisi ad un solo telaio
%Estendibile a Simmetric Plan Building(al posto di Kstruct, metto la somma delle
matrici laterali dei telai)
%necessaria condensazione statica se sono inclusi i gradi di libertà rotazionali
per Kstruct
%massa [m(x)=m]
m=50000; %Kg
%lunghezza
L=3.50; %m
%modulo - sezione
E=2060000000; %KPa
% b=0.3; %m
% h=0.6; %m
I= 0.0006;
%A=b*h/12;
zita=0.05;
%nodi - o X Y sistema di riferimento assoluto su un incastro
nodo(1).x=0;
nodo(1).y=0;
nodo(1).vinc=1;
nodo(2).x=2*L;
nodo(2).y=0;
nodo(2).vinc=1;
nodo(3).x=0;
nodo(3).y=L;
nodo(4).x=2*L;
nodo(4).y=L;
nodo(5).x=0;
nodo(5).y=2*L;
nodo(6).x=2*L;
nodo(6).y=2*L;
nodo(7).x=0;
nodo(7).y=3*L;
nodo(8).x=2*L;
nodo(8).y=3*L;
%aste 0 - x(asse trave) - y sistema locale
asta(1).nodoi=1;
asta(1).nodoj=3;
asta(1).massa=0;
asta(1).L=L;
asta(1).E=E;
asta(1).I=I;
%asta(1).A=A;
asta(1).dof=[0 0 1 4]; % ordinati mettendo a sx nodo i e destra nodo j,
zero equivale a nodo fermo; il nodo j ha gli stessi spost. del nodo del telaio e
quindi assumerà gli stessi dof_telaio
asta(1).trasl=0;
asta(2).nodoi=4;
asta(2).nodoj=2;
asta(2).massa=0;
asta(2).L=L;
asta(2).E=E;
asta(2).I=I;
%asta(2).A=A;
asta(2).dof=[1 5 0 0]; % i fa solo gdl 2 del telaio, j solo 3
asta(2).trasl=0;
asta(3).nodoi=3;
asta(3).nodoj=4;
asta(3).massa=m;
asta(3).L=2*L;
asta(3).E=0.5*E;
asta(3).I=I;
%asta(3).A=A;
asta(3).dof=[0 4 0 5]; %i fa gdl del telaio 1 e 3
asta(3).trasl=1; %perchè trasla come il telaio, ovvero segue il DOF 1 del
telaio
asta(4).nodoi=3;
asta(4).nodoj=5;
asta(4).massa=0;
asta(4).L=L;
asta(4).E=0.666*E;
asta(4).I=I;
%asta(4).A=A;
asta(4).dof=[1 4 2 6]; %i fa gdl del telaio 1 e 3
asta(4).trasl=0;
asta(5).nodoi=6;
asta(5).nodoj=4;
asta(5).massa=0;
asta(5).L=L;
asta(5).E=0.666*E;
asta(5).I=I;
%asta(5).A=A;
asta(5).dof=[2 7 1 5]; %i fa gdl del telaio 1 e 3 asta(5).trasl=0;
asta(6).nodoi=5;
asta(6).nodoj=6;
asta(6).massa=m;
asta(6).L=2*L;
asta(6).E=0.333*E;
asta(6).I=I;
%asta(6).A=A;
asta(6).dof=[0 6 0 7]; %i fa gdl del telaio 1 e 3
asta(6).trasl=2;
asta(7).nodoi=5;
asta(7).nodoj=7;
asta(7).massa=0;
asta(7).L=L;
asta(7).E=0.333*E;
asta(7).I=I;
%asta(7).A=A;
asta(7).dof=[2 6 3 8]; %i fa gdl del telaio 1 e 3
asta(7).trasl=0;
asta(8).nodoi=8;
asta(8).nodoj=6;
asta(8).massa=0;
asta(8).L=L;
asta(8).E=0.333*E;
asta(8).I=I;
%asta(8).A=A;
asta(8).dof=[3 9 2 7]; %i fa gdl del telaio 1 e 3
asta(8).trasl=0;
asta(9).nodoi=7;
asta(9).nodoj=8;
asta(9).massa=m/2;
asta(9).L=2*L;
asta(9).E=E/6;
asta(9).I=I;
%asta(9).A=A;
asta(9).dof=[0 8 0 9]; %i fa gdl del telaio 1 e 3
asta(9).trasl=3;
%dati telaio
n_nodi=length(nodo);
n=length(asta);
dof_telaio=[1 2 3 4 5 6 7 8 9]; % gradi di libertà telaio - ordine
[traslazioni rotazioni]
% Rappresentazione del telaio
for i=1:n
figure(1)
x=[nodo(asta(i).nodoi).x, nodo(asta(i).nodoj).x]; %sintassi per
rappresentare i segmenti estremo1-estremo2 x e poi y
y=[nodo(asta(i).nodoi).y, nodo(asta(i).nodoj).y]; %tutte le
coordinate y dei nodi
title('Telaio Assegnato')
plot(x,y)
hold on
for jj=1:n_nodi
if nodo(jj).x==0 && nodo(jj).y==0 || nodo(jj).x~=0 && nodo(jj).y==0
plot(nodo(jj).x, nodo(jj).y,'*')
end
end
axis([-1 3*L -1 4*L])
xlabel('x, (m)')
ylabel('y, (m)')
end
%% Matrici di rotazione L, di rigidezza K delle ASTE nel sistema locale e
globale
for i=1:n %posizione aste rispetto al SDR globale
asta(i).inclinazione=atan((nodo(asta(i).nodoj).y -
nodo(asta(i).nodoi).y)/((nodo(asta(i).nodoj).x - nodo(asta(i).nodoi).x)));
asta(i).matrice_rotazL=[-sin(asta(i).inclinazione) 0 0 0; 0 1 0 0;
0 0 -sin(asta(i).inclinazione) 0; 0 0 0 1]; %ruoto solo gli spostamenti locali
verticali su x
%matrici aste sistema locale
asta(i).matrice_Klocale= (asta(i).E*asta(i).I/(asta(i).L^3))* [12
6*asta(i).L -12 6*asta(i).L; 6*asta(i).L 4*(asta(i).L^2) -6*asta(i).L
2*(asta(i).L^2); -12 -6*asta(i).L 12 -6*asta(i).L; 6*asta(i).L
2*(asta(i).L^2) -6*asta(i).L 4*(asta(i).L^2)];
%matrici aste sistema globale
if det(asta(i).matrice_rotazL)~=0
asta(i).matrice_Kglob=asta(i).matrice_rotazL*asta(i).matrice_Klocale*inv(asta(i)
.matrice_rotazL); %matrice K riferita al SDR globale
else asta(i).matrice_Kglob=asta(i).matrice_Klocale;
end
end
%matrici di corrispondenza
for i=1:n
for k=1:length(dof_telaio)
for j=1:length(asta(i).dof)
if (asta(i).dof(j)==dof_telaio(k))
asta(i).Matrice_corrisp(j,k)=1;
else asta(i).Matrice_corrisp(j,k)=0;
end
end
end
end
%% Matrici di rigidezza K e di massa M globali - INTERA STRUTTURA -
Kstruct=zeros(length(dof_telaio), length(dof_telaio)); %quadrate, gdl_telaio x
gdl_telaio
for i=1:n
Kstruct=Kstruct + asta(i).Matrice_corrisp'
*asta(i).matrice_Kglob*asta(i).Matrice_corrisp;
end
%matrice di massa
for i=1:n
if det(asta(i).matrice_rotazL)==0
A=asta(i).trasl;
for j=1:length(dof_telaio)
if A==dof_telaio(j)
Mstruct(j,j)=asta(i).massa; %la matrice di massa ha le
dimensioni del vettore gradi di libertà telaio
f=Mstruct(1,:);
end
end
for k=1:(length(dof_telaio)- length(f))
Mstruct(length(f)+k, length(f)+k)=0; %tutto quello che
rimane mette zero perchè sono rotazioni
end
end
end
%% FREQUENZE E MODI DI VIBRAZIONI
%Condensazione statica - tolgo i gradi di libertà rotazionali
ut=[dof_telaio(1) dof_telaio(2) dof_telaio(3)]; %raggruppo i gradi di libertà
traslazionali
u_teta=[dof_telaio(4) dof_telaio(5) dof_telaio(6) dof_telaio(7) dof_telaio(8)
dof_telaio(9)]; % gradi di libertà rotazionali