% % Calculo de la matriz de amortiguamiento utilizando % Algoritmo de Wilson y Penzien % % Por: Roberto Aguiar Falconi % CEINCI ESPE % ----------------------------------------------------------------- % [C]=amortiguamiento_1 (K,zeda) % ----------------------------------------------------------------- % K Matriz de rigidez lateral del portico plano. % M Matriz de masas. % NP Número de pisos. % Por pantalla se indicara las masas de cada piso. % Previamente el usuario habra calculado la matriz de rigidez lateral % con otro programa. % T Periodos de vibracion. % C Matriz de amortiguamiento. % zeda Vector que contiene los coeficientes de amortiguamiento. % NP = input (' \n Numero de pisos '); M = zeros(NP,NP); C = zeros(NP,NP); for i=1:NP fprintf ('Indique la masa del piso , %2d',i); M(i,i) = input (', Valor de la masa: '); end [V,D]=eig(K,M); Wn=sqrt(D); W=diag(Wn); for i=1:NP fi=V(:,i); mi=fi'*M*fi; aux=2*zeda(i)*W(i)/mi; C=C+aux.*M*fi*fi'*M; end fprintf ('\n Matriz de amortiguamiento') C % ---fin EJERCICIO 11 function [q]=vlibreamortiguado(K,zeda,Xo) % % Vibraciones libres considerando amortiguamiento. % Solucion por medio del exponencial de una matriz. % % Por: Roberto Aguiar Falconi % CEINCI ESPE % ----------------------------------------------------------------- % [q]=vlibreamortiguado(K,zeda,Xo) % ----------------------------------------------------------------- % K Matriz de rigidez lateral del portico plano, viene de consola. % M Matriz de masas. % NP Número de pisos, igual al número de grados de libertad. % Por pantalla se indicara las masas de cada piso. % Previamente el usuario habra calculado la matriz de rigidez lateral % con otro programa. % T Periodos de vibracion. % C Matriz de amortiguamiento. % zeda Vector que contiene los coeficientes de amortiguamiento. viene de % consola, sirve para calcular matriz de amortiguamiento. % Xo Vector de condiciones iniciales, viene de consola. % F Matriz de orden 2nx2n % q Los n primeros valores corresponden a los desplazamientos y los % restantes a las velocidades. % dt Incremento de tiempo con el cual se obtiene la respuesta. % n Número de puntos que se desean obtener en la respuesta. % Programado para dt=0.02 y n=100 dt=0.02; n=100; NP = input (' \n Numero de pisos '); M = zeros(NP,NP); C = zeros(NP,NP); % Matriz de Masas for i=1:NP fprintf ('Indique la masa del piso , %2d',i); M(i,i) = input (', Valor de la masa: '); end % Matriz de amortiguamiento mediante algoritmo de Wilson y Penzien [V,D]=eig(K,M); Wn=sqrt(D); W=diag(Wn); for i=1:NP
fi=V(:,i); mi=fi'*M*fi; aux=2*zeda(i)*W(i)/mi;
C=C+aux.*M*fi*fi'*M; end % Matriz F CERO=zeros(NP,NP); IDENT=eye(NP,NP);MIK=(-1)*inv(M)*K; MIC=(-1)*inv(M)*C; F=[CERO IDENT; MIK MIC]; % Valores Propios de F [V,D] = eig(F) % Respuesta en el tiempo for j=1:n t=j*dt; E=expm(F*t); EE=real(E); q=EE*Xo; tt(j)=t; des(j)=q(NP); end % Dibujo para la respuesta en el tiempo del último piso plot (tt,des) xlabel ('Tiempo (s)'); ylabel ('Desplazamiento ultimo piso'); title ('Vibracion libre considerando amortiguamiento'); % ---fin