m = 1000.0;   % kg, her kat
k = 4.0e6;    % N/m, her kat

% --- 2 katli kayma binasi ---
M = [m 0; 0 m];
K = [2*k -k; -k k];

% MATLAB'in genellestirilmis ozdeger cozucusu: eig(K, M)
% (Python'da inv(M)*K kullandik; MATLAB'da eig(K,M) daha kararlidir)
[evecs, evals] = eig(K, M);
[lambda_sorted, idx] = sort(diag(evals));
evecs = evecs(:, idx);

w = sqrt(lambda_sorted);
T = 2*pi ./ w;

fprintf('--- 2 katli bina ---\n');
for i = 1:2
    phi = evecs(:, i) / evecs(1, i);   % 1. kat = 1 normalize
    fprintf('Mod %d: w=%.3f rad/s, T=%.4f s, sekil=[%.3f, %.3f]\n', ...
            i, w(i), T(i), phi(1), phi(2));
end

w1_exact = sqrt(k/m * (3-sqrt(5))/2);
w2_exact = sqrt(k/m * (3+sqrt(5))/2);
fprintf('Analitik: w1=%.3f, w2=%.3f\n', w1_exact, w2_exact);

% --- 3 katli bina: modal kutle katilimi ---
M3 = diag([m m m]);
K3 = [2*k  -k    0;
      -k   2*k  -k;
       0   -k    k];

[evecs3, evals3] = eig(K3, M3);
[lambda3, idx3] = sort(diag(evals3));
evecs3 = evecs3(:, idx3);
w3 = sqrt(lambda3);
T3 = 2*pi ./ w3;

r = ones(3,1);
total_mass = r' * M3 * r;

fprintf('\n--- 3 katli bina: modal kutle katilimi ---\n');
cum = 0;
for i = 1:3
    phi = evecs3(:, i);
    Mn = phi' * M3 * phi;
    Ln = phi' * M3 * r;
    Meff = Ln^2 / Mn;
    ratio = Meff / total_mass * 100;
    cum = cum + ratio;
    fprintf('Mod %d: T=%.4fs, Meff=%7.1fkg, katilim=%%%5.2f, kumulatif=%%%6.2f\n', ...
            i, T3(i), Meff, ratio, cum);
end
fprintf('\nKONTROL - kumulatif tam %%100 olmali: %d\n', abs(cum-100) < 1e-9);
