Ana Sayfa / MATLAB / Python / Problem 4

Modal Analiz — Özdeğer ve Kütle Katılımı

2 ve 3 katlı kayma binası. Beklenen: ω₁=39.088 rad/s, mod şekli oranı altın oran; 3 katlıda modal katılım toplamı tam %100 (F5 Problem 4-5'ten).

PYTHON modal_analysis.py

import numpy as np

# --- 2 katli kayma binasi: ozdeger analizi ---
m = 1000.0   # kg, her kat
k = 4.0e6    # N/m, her kat

M = np.array([[m, 0],
              [0, m]])
K = np.array([[2*k, -k],
              [-k,   k]])

# Genellestirilmis ozdeger problemi: K*phi = w^2 * M*phi
evals, evecs = np.linalg.eig(np.linalg.inv(M).dot(K))
idx = np.argsort(evals)
evals, evecs = evals[idx], evecs[:, idx]

w = np.sqrt(evals)      # rad/s
T = 2*np.pi / w         # s

print("--- 2 katli bina ---")
for i in range(2):
    phi = evecs[:, i] / evecs[0, i]   # 1. kat = 1 normalize
    print(f"Mod {i+1}: w={w[i]:.3f} rad/s, T={T[i]:.4f} s, sekil=[{phi[0]:.3f}, {phi[1]:.3f}]")

# Analitik dogrulama (esit m,k icin kapali form)
w1_exact = np.sqrt(k/m * (3-np.sqrt(5))/2)
w2_exact = np.sqrt(k/m * (3+np.sqrt(5))/2)
print(f"Analitik: w1={w1_exact:.3f}, w2={w2_exact:.3f} -> "
      f"eslesme: {np.allclose([w[0],w[1]],[w1_exact,w2_exact])}")

# --- 3 katli bina: modal kutle katilimi ---
M3 = np.diag([m, m, m])
K3 = np.array([[2*k, -k,   0],
               [-k,  2*k, -k],
               [0,   -k,   k]])

evals3, evecs3 = np.linalg.eig(np.linalg.inv(M3).dot(K3))
idx3 = np.argsort(evals3)
evals3, evecs3 = evals3[idx3], evecs3[:, idx3]
w3 = np.sqrt(evals3)
T3 = 2*np.pi / w3

r = np.ones(3)                      # yatay yer hareketi etki vektoru
total_mass = r.T.dot(M3).dot(r)

print("\n--- 3 katli bina: modal kutle katilimi ---")
cum = 0.0
for i in range(3):
    phi = evecs3[:, i]
    Mn = phi.T.dot(M3).dot(phi)     # modal kutle
    Ln = phi.T.dot(M3).dot(r)       # modal katilim carpani
    Meff = Ln**2 / Mn               # etkin modal kutle
    ratio = Meff / total_mass * 100
    cum += ratio
    print(f"Mod {i+1}: T={T3[i]:.4f}s, Meff={Meff:7.1f}kg, "
          f"katilim=%{ratio:5.2f}, kumulatif=%{cum:6.2f}")

print(f"\nKONTROL - kumulatif tam %100 olmali: {abs(cum-100) < 1e-9}")
--- 2 katli bina --- Mod 1: w=39.088 rad/s, T=0.1607 s, sekil=[1.000, 1.618] Mod 2: w=102.333 rad/s, T=0.0614 s, sekil=[1.000, -0.618] Analitik: w1=39.088, w2=102.333 -> eslesme: True --- 3 katli bina: modal kutle katilimi --- Mod 1: T=0.2232s, Meff= 2742.2kg, katilim=%91.41, kumulatif=% 91.41 Mod 2: T=0.0797s, Meff= 224.6kg, katilim=% 7.49, kumulatif=% 98.90 Mod 3: T=0.0551s, Meff= 33.1kg, katilim=% 1.10, kumulatif=%100.00 KONTROL - kumulatif tam %100 olmali: True
✓ Bu platform tarafından gerçekten çalıştırıldı — analitik kapalı-form ile eşleşti

MATLAB modal_analysis.m

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);
--- 2 katli bina --- Mod 1: w=39.088 rad/s, T=0.1607 s, sekil=[1.000, 1.618] Mod 2: w=102.333 rad/s, T=0.0614 s, sekil=[1.000, -0.618] Analitik: w1=39.088, w2=102.333 --- 3 katli bina: modal kutle katilimi --- Mod 1: T=0.2232s, Meff= 2742.2kg, katilim=%91.41, kumulatif=% 91.41 Mod 2: T=0.0797s, Meff= 224.6kg, katilim=% 7.49, kumulatif=% 98.90 Mod 3: T=0.0551s, Meff= 33.1kg, katilim=% 1.10, kumulatif=%100.00 KONTROL - kumulatif tam %100 olmali: 1

⚠ Bu kod gerçek bir MATLAB'da çalıştırılmadı. Dikkat edilen fark: Python'da inv(M)·K kullanıldı; MATLAB'da eig(K,M) genelleştirilmiş biçimi tercih edildi — sayısal olarak daha kararlıdır ve büyük sistemlerde matris tersi almaktan kaçınır. İkisi de aynı özdeğerleri verir. Kendi MATLAB'ınızda çalıştırıp doğrulayın.

← Problem 3 SHM: Ölçümden Modal Çıkarım →