Está en la página 1de 4

PROGRAMACION EN MATLAB

1.A
close all
clear
clc

% Datos iniciales
m1=22;m2=22;m3=20;m4=20;
M=[m1 m2 m3 m4];
M=diag(M);
k1=50000;k2=40000;k3=40000;k4=30000;
K=[k1+k2 -k2 0 0;
-k2 k2+k3 -k3 0;
0 -k3 k3+k4 -k4;
0 0 -k4 k4];
% Se asume una forma para el cuarto modo
phi_i=[1 1 1 1]';
lambda_i=100; %se ajusta este valor hasta que se obtenga un phi lógico
i=1;
j=1;
while i==1
phi_j=inv(K-lambda_i*M)*M*phi_i;
lambda_j=(phi_j'*M*phi_i/(phi_j'*M*phi_j))+lambda_i;
error=((lambda_j-lambda_i)/lambda_i);
phi_i=phi_j/(phi_j'*M*phi_j)^0.5;
lambda_i=lambda_j;
j=j+1; %número de iteraciones
if error<0.01
break
end
end
fprintf("Se realizaron un total de %d iteraciones\n",j)
% Se realiza la operación una vez más
phi_j=inv(K-lambda_i*M)*M*phi_i;
lambda=(phi_j'*M*phi_i/(phi_j'*M*phi_j))+lambda_i;
phi=phi_j/(phi_j'*M*phi_j)^0.5;
phi=phi/phi(1) %modo de vibración buscado
T=2*pi/sqrt(lambda);
fprintf("El periodo es igual a %d s\n",T)
plot([0;phi],[0 1 2 3 4],'LineWidth',2)
title('Modo de vibración 4','FontSize',14)
xlim([-5 5])
ylim([0 5])
hold on
plot([0 0],[0 5],'k','LineStyle','--')
% Comprobando con valores y vectores propios
[a,b]=eig(K,M);
modo1=a(:,1)/a(4,1)
w=sqrt(diag(b));
periodo1=2*pi/w(1)
Se realizaron un total de 3 iteraciones

phi =

1.0000

2.1107

2.9274

3.5221

El periodo es igual a 3.948172e-01 s

modo1 =

1.0000

2.1107

2.9274

3.5221

periodo1 = 0.3948

1.B
close all
clear
clc

% Datos iniciales
m1=22;m2=22;m3=20;m4=20;
M=[m1 m2 m3 m4];
M=diag(M);
k1=50000;k2=40000;k3=40000;k4=30000;
K=[k1+k2 -k2 0 0;
-k2 k2+k3 -k3 0;
0 -k3 k3+k4 -k4;
0 0 -k4 k4];
% Se asume una forma para el cuarto modo
phi_i=[-1 1 -1 1]';
lambda_i=3000; %se ajusta este valor hasta que se obtenga un phi
lógico
i=1;
j=1;
while i==1
phi_j=inv(K-lambda_i*M)*M*phi_i;
lambda_j=(phi_j'*M*phi_i/(phi_j'*M*phi_j))+lambda_i;
error=((lambda_j-lambda_i)/lambda_i);
phi_i=phi_j/(phi_j'*M*phi_j)^0.5;
lambda_i=lambda_j;
j=j+1; %número de iteraciones
if error<0.01
break
end
end
fprintf("Se realizaron un total de %d iteraciones\n",j)
% Se realiza la operación una vez más
phi_j=inv(K-lambda_i*M)*M*phi_i;
lambda=(phi_j'*M*phi_i/(phi_j'*M*phi_j))+lambda_i;
phi=phi_j/(phi_j'*M*phi_j)^0.5;
phi=phi/phi(3) %modo de vibración buscado
T=2*pi/sqrt(lambda);
fprintf("El periodo es igual a %d s\n",T)
plot([0;phi],[0 1 2 3 4],'LineWidth',2)
title('Modo de vibración 3','FontSize',14)
xlim([-4 4])
ylim([0 4])
hold on
plot([0 0],[0 5],'k','LineStyle','--')
% Comprobando con valores y vectores propios
[a,b]=eig(K,M);
modo3=a(:,3)/a(3,3)
w=sqrt(diag(b));
periodo3=2*pi/w(3)
Se realizaron un total de 3 iteraciones

phi =

-1.0199

0.0637

1.0000

-0.5546

El periodo es igual a 9.689972e-02 s

modo3 =

-1.0199

0.0637

1.0000

-0.5546

periodo3 = 0.0969

También podría gustarte